AgentConfig interface to define how to detect and install skills for each supported coding agent.
AgentConfig Interface
Defined insrc/types.ts, the AgentConfig interface specifies the configuration for each agent:
Field Reference
string
required
Unique identifier for the agent in kebab-case. Used in CLI commands with the
--agent flag.Examples:claude-codecursorgithub-copilot
AgentType used throughout the codebase.string
required
Human-readable name shown in CLI output and prompts.Examples:
"Claude Code""Cursor""GitHub Copilot"
string
required
Relative path where skills are installed in project scope.Examples:
.claude/skills- Claude Code.agents/skills- Universal agents (Cursor, OpenCode, etc.)skills- OpenClaw (no dot prefix)
This path is relative to the current working directory when installing project-scoped skills.
string | undefined
required
Absolute path where global skills are installed (typically in user’s home directory).Set to
undefined if the agent doesn’t support global installation.Examples:~/.claude/skills- Claude Code global skills~/.config/opencode/skills- OpenCode global skills~/.codeium/windsurf/skills- Windsurf global skills
() => Promise<boolean>
required
Async function that returns
true if the agent is installed on the system.Common detection strategies:- Check if config directory exists:
existsSync(join(home, '.agent')) - Check for project marker file:
existsSync(join(cwd(), '.replit')) - Check multiple possible locations (OpenClaw supports 3 legacy paths)
boolean
default:true
Whether to show this agent in the universal agents list.Set to
false for:- Agents that shouldn’t be auto-selected (e.g.,
universalmeta-agent) - Platform-specific agents (e.g., Replit)
Agent Types
All supported agent identifiers are defined in theAgentType union type:
Agent Registry
All agent configurations are stored in theagents object in src/agents.ts:
Universal Agents
Some agents share a common skills directory (.agents/skills/). These are called “universal agents”:
- Amp
- Cline
- Codex
- Cursor
- Gemini CLI
- GitHub Copilot
- Kimi Code CLI
- OpenCode
- Replit
- No symlinks needed between agents
- Single installation serves multiple agents
- Easier to manage and update
Agent Detection
The CLI automatically detects which agents are installed:1
Iterate all agents
Check each agent’s
detectInstalled() function.2
Run in parallel
All detection checks run concurrently using
Promise.all().3
Filter results
Return only agents where
detectInstalled() returned true.Environment Variables
Some agents support custom configuration paths via environment variables:string
Custom Claude Code config directory.Default:
~/.claudeExample:string
Custom Codex home directory.Default:
~/.codexExample:Platform Differences
The agent system handles platform-specific path differences:XDG Base Directory
On Linux/macOS, some agents follow the XDG Base Directory specification:- OpenCode:
~/.config/opencode/skills/ - Goose:
~/.config/goose/skills/ - Amp:
~/.config/amp/skills/ - Crush:
~/.config/crush/skills/
Windows Compatibility
Paths work across platforms using Node’spath module:
Adding a New Agent
To add support for a new agent:1
Add to AgentType
Edit
src/types.ts and add your agent to the AgentType union:2
Add configuration
Edit
src/agents.ts and add your agent config:3
Validate
Run the validation script:
4
Sync to README
Update documentation:
5
Test
Test installation:
Agent-Specific Notes
OpenClaw
OpenClaw
OpenClaw supports three legacy directory names:This ensures backwards compatibility with older installations.
Kiro CLI
Kiro CLI
Kiro CLI requires manual configuration after skill installation:Edit This is because Kiro uses a custom resource loading mechanism.
.kiro/agents/<agent>.json:Replit
Replit
Replit detection looks for Also has
.replit file:showInUniversalList: false since it’s platform-specific.Universal Meta-Agent
Universal Meta-Agent
The It represents the shared
universal agent is a meta-agent that never detects as installed:.agents/skills/ directory used by universal agents.Utility Functions
getAgentConfig(type: AgentType): AgentConfig
Get configuration for a specific agent:
getUniversalAgents(): AgentType[]
Get all agents using .agents/skills/ directory:
getNonUniversalAgents(): AgentType[]
Get agents with custom skill directories:
isUniversalAgent(type: AgentType): boolean
Check if an agent uses universal directory:
Related Documentation
CLI Options
Learn how to target specific agents
Compatibility
Agent feature compatibility matrix
Contributing
How to add a new agent
Skill Format
SKILL.md format specification