Skip to main content
The @skill tool lets the agent grow its own capabilities: when it learns a reusable procedure, a project convention or a workflow you repeat, it writes a skill that auto-activates on its triggers in this and every future session. It’s hermes-agent’s living skill layer, native to ChatCLI’s skill format.
@memory vs @skill: @memory stores facts (“the user prefers tabs”); @skill stores a reusable procedure/knowledge with triggers (“how to deploy this project”). Short fact → memory; “how to do X” → skill. And to author skills from documentation, attach the corpus as a knowledge base: the agent researches with @knowledge and writes the skill with @skill.

Subcommands

<tool_call name="@skill" args='{"cmd":"create","args":{
  "name":"deploy-acme-api",
  "description":"How to deploy the Acme API. Use when asked to deploy Acme.",
  "triggers":["deploy acme","ship the api"],
  "content":"# Deploy\n1. make test\n2. git tag vX.Y.Z\n...",
  "allowed_tools":["@coder","Bash"]
}}' />
SubcommandPurpose
create {name, description, content, triggers?, allowed_tools?}create a new skill
update {name, ...}evolve an existing skill (no duplicates)
listlist saved skills
show {name}print a skill’s content
remove {name}delete a skill
statsusage analytics (which skills earn their keep)
export {names?, out}bundle skills into a shareable JSON pack
import {path}install skills from a pack
name is a validated kebab-case slug (no path traversal). create won’t clobber; update requires the skill to exist.

Evolution loop

agent learns → @skill create/update → writes ~/.chatcli/skills/<name>/SKILL.md


            loader discovers next turn → auto-activates on triggers
The bundled skill-authoring skill guides the agent on when and how to author (capture a repeated workflow, good descriptions/triggers, evolve instead of duplicate).

Usage analytics

@skill stats shows the activation ranking (most used first, with last used) and flags authored skills that never activated — candidates to evolve or remove. Data lives in ~/.chatcli/skill-usage.json, written asynchronously by the manager on each activation (FindAutoActivatedSkills), never slowing a turn.

Shareable packs

@skill export {names:["deploy-acme-api"], out:"team-pack.json"}   # bundle
@skill import {path:"team-pack.json"}                              # install
The pack is a JSON carrying each raw SKILL.md (lossless round-trip). On import, existing skills are skipped unless overwrite:true. Useful for moving skills across machines and teams.

Safety

  • Slug-validated name → no writes outside the skills directory.
  • Never store secrets/tokens in a skill (that’s an environment/credential concern).
  • Builtin skills seeding never clobbers agent-authored skills.