Skip to main content
The Skills CLI uses the AgentConfig interface to define how to detect and install skills for each supported coding agent.

AgentConfig Interface

Defined in src/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-code
  • cursor
  • github-copilot
This is also the 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
Use join(home, '.agent/skills') or join(configHome, 'agent/skills') to construct platform-independent paths.
() => 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)
Example implementation:
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., universal meta-agent)
  • Platform-specific agents (e.g., Replit)
Example:

Agent Types

All supported agent identifiers are defined in the AgentType union type:
See src/types.ts for the complete list of supported agent types.

Agent Registry

All agent configurations are stored in the agents 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
Benefits:
  • No symlinks needed between agents
  • Single installation serves multiple agents
  • Easier to manage and update
Helper functions:

Agent Detection

The CLI automatically detects which agents are installed:
Detection flow:
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:
Agents using XDG:
  • OpenCode: ~/.config/opencode/skills/
  • Goose: ~/.config/goose/skills/
  • Amp: ~/.config/amp/skills/
  • Crush: ~/.config/crush/skills/

Windows Compatibility

Paths work across platforms using Node’s path 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:
See the Contributing Guide for detailed instructions.

Agent-Specific Notes

OpenClaw supports three legacy directory names:
This ensures backwards compatibility with older installations.
Kiro CLI requires manual configuration after skill installation:Edit .kiro/agents/<agent>.json:
This is because Kiro uses a custom resource loading mechanism.
Replit detection looks for .replit file:
Also has showInUniversalList: false since it’s platform-specific.
The universal agent is a meta-agent that never detects as installed:
It represents the shared .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:

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