Skip to main content
ChatCLI supports a multi-registry Skill Registry system that lets you search, install, and manage skills from multiple registries simultaneously. Installed skills are immediately available for use with agents via /agent skills.

Concepts


Default Registries

ChatCLI ships with three registries: New default registries are automatically added after upgrades β€” no need to edit config manually.

skills.sh

skills.sh is the open agent skills directory, compatible with 30+ agents (Claude Code, Cursor, Codex, Gemini CLI, etc.). Skills hosted on GitHub are indexed with installation metrics and security audits. ChatCLI consumes 3 skills.sh APIs:
  • Search API β€” fuzzy search with install counts
  • Download API β€” pre-packaged snapshots with all skill files
  • Audit API β€” partner security assessments (ATH, Socket, Snyk)

/skill Commands

Search Skills

Performs a parallel fan-out search across all enabled registries. Skills with the same name from different registries appear separately (no cross-registry dedup), allowing you to compare versions.
Visual indicators:
  • (214K installs) β€” install count (skills.sh)
  • [installed] (green) β€” skill installed from that registry
  • [installed from other source] (yellow) β€” same-name skill exists from another source
  • [SUSPICIOUS] / [BLOCKED] β€” moderation flags

Install Skill

Searches for the skill, checks moderation flags, and installs. When the same skill exists in multiple registries, --from resolves the ambiguity:
Other ways to install:

Uninstall Skill

Removes an installed skill. Accepts both base name and qualified name. When multiple versions exist, lists them for disambiguation.

List Installed Skills

Displays all installed skills with version, source, and path.

Skill Info

Shows full metadata. Without --from, prioritizes the registry with richest data (skills.sh with installs and security). With --from, queries only that registry.

Manage Registries

Enable/disable takes immediate effect β€” the registry manager is recreated in real-time, no ChatCLI restart needed.

Source Preferences

When multiple skills with the same base name are installed (e.g. local + skills.sh), preferences control which version the agent uses. Without a preference, local always wins. Priority chain for skill resolution:

Pin Skills for the Session (/skill pin)

When you want a skill considered on every turn of the conversation β€” regardless of whether the message matches its triggers: or paths: β€” pin it with /skill pin. The skill stays injected in the system prompt until you /skill unpin it or end the session.
Example:
What pin does exactly:
  • Injects the skill into a dedicated # Pinned Skills block in the system prompt, before the # Auto-loaded Skills block. On model:/effort: hint conflicts, pinned beats auto-activation (but loses to a manual /<skill-name> invocation).
  • The pinned block carries cache_control: ephemeral β€” the provider keeps the cache warm across turns as long as the pinned set doesn’t change.
  • Auto-activation still runs: if a skill is pinned and matches by triggers:/paths:, it’s injected exactly once (deduplicated by name).
  • Skills uninstalled/renamed during the session silently drop from the set on the next turn (re-resolved through the persona manager).
  • /skill list shows [pinned] next to pinned skills.
Restrictions:
  • Skills with disable-model-invocation: true cannot be pinned β€” the flag exists precisely to forbid automatic injection. Use manual /<skill-name> for those.
  • The pinned set is session-scoped; it does not persist across chatcli runs (by design β€” pinning expresses current-session intent).

How to Activate a Skill: Three Modes

model:/effort: hint precedence when multiple modes fire on the same turn:
For each mode’s details, frontmatter, and examples: see Advanced frontmatter in Customizable Agents.

Skill Injection Budget

Injected skill bodies respect a per-block character budget: CHATCLI_SKILL_INJECT_BUDGET (default 24000, 0 = unlimited/legacy). Skills are rendered in their stable order; once the budget is spent, later skills keep their header and description but the body degrades to a read-on-demand pointer at the skill’s source file:
Nothing is lost β€” only deferred: the model reads the file when (and only when) it actually applies the skill.
Why this exists: a single prompt can auto-activate a burst of skills (e.g. nine ServiceNow skills matching one question), adding tens of KB to every subsequent request. Behind a corporate proxy/WAF with a body-size cap, that alone can push the session over the rejection threshold β€” see Context Recovery. The default is generous: typical sessions inline every activated skill untouched.
The variable is surfaced in /config agent (token efficiency section).

Help


Namespace and Collisions

How Skills Are Stored on Disk

Registry skills use qualified names to avoid collisions:
The -- separator is safe because the agentskills.io spec forbids consecutive hyphens in skill names.

Users Never Need to Type Qualified Names

Daily usage is transparent:
Qualified names only appear in management contexts (info, uninstall) when there are conflicts between sources.

Configuration

Registries File

~/.chatcli/registries.yaml controls the registries:

Preferences File

~/.chatcli/skill-preferences.yaml stores source preferences:
Managed exclusively via /skill prefer β€” no manual editing needed.

Environment Variables


Security and Moderation

Moderation Flags

Security Audits (skills.sh)

For skills.sh skills, /skill info shows security assessments from three partner providers: Data is fetched from https://add-skill.vercel.sh/audit with a 3-second timeout β€” failures are silent (advisory data, never blocks).

Atomic Installation

Skills are installed using atomic writes:
  1. Content downloaded to temporary directory (.tmp-*)
  2. YAML frontmatter validated
  3. Moderation flags checked
  4. Scripts receive executable permission
  5. source and snapshot_hash fields injected into frontmatter
  6. Directory atomically renamed to final destination
  7. On failure, temporary directory is automatically removed

Search Cache (Trigram)

ChatCLI implements a trigram-based fuzzy cache to reduce network calls: The cache is automatically invalidated after installing or uninstalling a skill, and recreated when enabling/disabling a registry.

Architecture

Packages


Next Steps