Conceito Fundamental
A ideia central é a composição de prompts:- Agentes definem “quem” a IA é (personalidade, especialização, tom).
- Skills definem “o que” ela deve saber/obedecer (regras, knowledge, compliance).
Benefícios
Reutilização
Skills podem ser compartilhadas entre múltiplos agentes.
Versionamento
Arquivos
.md podem ser versionados no Git.Colaboração
Equipes podem compartilhar agentes e skills.
Consistência
Regras de coding style aplicadas automaticamente.
Especialização
Crie agentes para Go, Python, DevOps, etc.
Despacho como Worker
Agents customizados são automaticamente registrados no sistema multi-agent e podem ser despachados via
agent_call pelo LLM orquestrador.Auto-ativação de Skills
Skills com
triggers: ou paths: no frontmatter são injetadas automaticamente no system prompt quando detectadas na mensagem do usuário.Modelo e Effort por Agente
Cada skill e cada agente podem declarar
model: e effort: ideais — o dispatcher faz o roteamento correto sem mudar a escolha do usuário.Estrutura de Diretórios
Os arquivos ficam no diretório~/.chatcli/:
Formato do Arquivo de Agente
Os agentes são arquivos Markdown com frontmatter YAML:Campo tools — Integração com Multi-Agent
O campo tools no frontmatter YAML é a chave para a integração com o sistema de orquestração multi-agent. Ele define quais comandos o agent pode usar quando despachado como worker pelo LLM orquestrador.
| Tool no YAML | Comando(s) @coder | Descrição |
|---|---|---|
Read | read | Ler conteúdo de arquivos |
Grep | search | Buscar padrões em arquivos |
Glob | tree | Listar diretórios |
Bash | exec, test, git-status, git-diff, git-log, git-changed, git-branch | Execução de comandos e operações git |
Write | write | Criar/sobrescrever arquivos |
Edit | patch | Edição precisa (search/replace) |
MultiEdit | multipatch | Edição transacional de múltiplos arquivos com rollback all-or-nothing |
Exemplo sem o campo tools
Este agent será registrado como read-only no sistema multi-agent (apenas
read, search, tree).Frontmatter Avançado de Agentes
Desde a versão recente, agentes suportam os mesmos campos de preferência de LLM que as skills. Eles são opcionais e retrocompatíveis — agents sem esses campos continuam funcionando exatamente como antes.| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
model | string | — | Modelo preferido quando este agent roda como worker. Se o usuário estiver em outro modelo/provider, o dispatcher tenta swap transparente (mesmo provider → catálogo → família; cross-provider quando disponível). |
effort | string | — | Nível de esforço: low, medium, high, max. Mapeado para extended thinking (Anthropic) / reasoning_effort (OpenAI) nos providers compatíveis. |
category | string | — | Categoria para organização (ex.: devops, security, review). |
version | string | — | Versão do agent (SemVer recomendado). |
author | string | — | Autor do agent. |
tags | list|string | — | Tags para busca e classificação. Aceita lista YAML ou string separada por vírgula. |
Como o Dispatcher Aplica Model/Effort
Quando o LLM orquestrador despacha um agent via<agent_call>, o dispatcher:
Lê `agent.Model()` e `agent.Effort()`
Para custom agents, vem do frontmatter. Para built-ins, vem de
BuiltinAgentMeta (defaults + env var override).Se `Model()` não é vazio, roda pelo Model Router
O resolver tenta, em ordem: API cache do provider ativo → catálogo estático → heurística de família (
claude-*, gpt-*, gemini-*, etc.) → fallback otimista no provider do usuário. Se o provider-alvo não estiver configurado (sem API key), cai de volta no client do usuário e loga um aviso claro.Se `Effort()` não é vazio, anexa ao `ctx` do worker
O provider lê o hint via
client.EffortFromContext(ctx) dentro do SendPrompt e injeta thinking.budget_tokens (Anthropic) ou reasoning.effort / reasoning_effort (OpenAI) no request body — apenas em modelos que suportam.Exemplo: Custom Agent com Modelo Ideal
Formato do Arquivo de Skill
As skills contem conhecimento puro ou regras de compliance:Skills V2 — Pacotes com Subskills e Scripts
Além das skills V1 (arquivo único.md), o ChatCLI suporta Skills V2: diretórios contendo múltiplos documentos e scripts executáveis.
Estrutura de uma Skill V2
Subskills
Arquivos.md dentro do diretório da skill (exceto SKILL.md) são registrados como subskills. Quando o agent é despachado como worker, os caminhos dos subskills aparecem no system prompt do worker, que pode lê-los com o comando read conforme necessário.
Scripts
Arquivos emscripts/ são registrados como skills executáveis no worker. O sistema infere automaticamente o comando de execução com base na extensão:
| Extensão | Comando Inferido |
|---|---|
.sh | bash script.sh |
.py | python3 script.py |
.js | node script.js |
.ts | npx ts-node script.ts |
.rb | ruby script.rb |
| Outros | ./script (execução direta) |
exec do @coder e seus resultados retornam ao worker para processamento.
Skill Frontmatter Avançado
Além dos campos básicos (name, description, allowed-tools), skills suportam frontmatter avançado para controle fino de comportamento. Todos os campos avançados são opcionais e retrocompatíveis — skills existentes continuam funcionando normalmente.
Ativação Automática: triggers
Keywords que ativam a skill automaticamente quando detectadas na mensagem do usuário. Case-insensitive, match por substring.
pkg/persona/manager.go#FindTriggeredSkills. A detecção roda em todo turno no chat mode e uma vez no início do agent/coder mode.
Ativação Automática: paths
Globs de arquivos que ativam a skill quando os arquivos correspondentes estão sendo discutidos. Suporta *, ** (doublestar recursivo) e ?.
@file path/..., @path/to/file.go, ou tokens bare como pkg/foo/bar_test.go e main.go) e casa cada um contra os padrões paths: de todas as skills instaladas.
Exemplos que disparam *_test.go:
"rode os testes em pkg/foo/bar_test.go""@file pkg/foo/bar_test.go""@pkg/foo/bar_test.go"
pkg/persona/types.go#MatchesPath (com matcher doublestar próprio, sem dependência externa) e pkg/persona/manager.go#FindPathMatchedSkills. A extração de paths do input está em cli/skill_activation.go#extractFilePaths.
Propagação de model e effort
Quando uma skill é auto-ativada (via triggers ou paths), fixada (/skill pin) ou invocada manualmente, seus campos model: e effort: são propagados para o turno atual:
model:— o dispatcher/resolver troca o client da LLM para este turno. Funciona dentro do mesmo provider (ex.:sonnet→opusno Claude) ou cross-provider (ex.: usuário em Claude, skill quergpt-5em OpenAI). Se o provider-alvo não estiver configurado, cai de volta no client do usuário com aviso visível.effort:— mapeado parathinking.budget_tokens(Anthropic, modelos Opus 4.x / Sonnet 4.x / 3.7) oureasoning_effort/reasoning.effort(OpenAI, modelos o1/o3/o4/gpt-5). Modelos sem suporte ignoram silenciosamente.
model: não-vazio na ordem acima ganha; conflitos subsequentes são logados como warning mas não forçam swap adicional.
Invocação Manual via /<skill-name>
Skills com user-invocable: true ficam disponíveis como comandos slash diretos:
/<skill-name> antes do router padrão, valida que a skill existe e tem user-invocable: true, carrega o conteúdo, mostra o argument-hint (se os args estiverem vazios) e dispara o turno injetando a skill como bloco ”# Manually Invoked Skill” no system prompt — com precedência sobre skills auto-ativadas.
A lista de comandos protegidos (/agent, /coder, /run, /switch, /help, /skill, etc.) nunca pode ser shadowed por uma skill — mesmo que exista uma skill chamada agent, o comando built-in sempre vence.
O autocomplete do /<...> também inclui todas as skills user-invocable: true, mostrando o description e o argument-hint lado a lado.
Controle de Invocação
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
user-invocable | bool | false | Habilita invocação via /skill-name |
disable-model-invocation | bool | false | Bloqueia ativação automática por triggers/paths (o usuário ainda pode invocar manualmente se user-invocable: true) |
argument-hint | string | — | Texto exibido no autocomplete e como dica ao invocar sem args |
disable-model-invocation: true e user-invocable: true juntos = a skill só roda quando o usuário digitar /skill-name, nunca por detecção automática. Útil para skills destrutivas ou específicas demais para auto-ativar.Fixar uma Skill na Sessão (/skill pin)
Quando você precisa que uma skill se aplique a todos os turnos da sessão — não só os que casam com triggers:/paths: — fixe ela:
# Pinned Skills separado no system prompt, cacheável via cache_control: ephemeral. Em conflito de hints, pinned ganha de auto-activation mas perde para /<skill-name> manual.
Skills com disable-model-invocation: true não podem ser fixadas — o flag existe pra proibir injeção automática. Use /<skill-name> manual nesses casos.
Detalhes completos, exemplos e a tabela de precedência: Pin Skills no Skill Registry.
Comando /agent sem Contexto
Antes: digitar /agent sozinho entrava em modo agente imediatamente e enviava uma mensagem vazia à LLM.
Agora: digitar /agent (ou /run) sem um task inline imprime o help do persona handler mais um hint de uso e não inicia o ReAct loop. O mesmo vale para /coder. Isso evita burns de tokens em mensagens vazias e torna a UX mais previsível.
Skills de Registries Remotos
Além de criar skills manualmente, você pode buscar e instalar skills de registries remotos com o comando/skill:
Skills instaladas via registry são salvas em
~/.chatcli/skills/<name>/SKILL.md como pacotes V2 e ficam imediatamente disponíveis para uso com agentes. O ChatCLI suporta múltiplos registries simultaneamente (ChatCLI.dev, ClawHub, registries corporativos) com busca paralela fan-out. Veja Skill Registry para detalhes completos.Despacho como Worker (Multi-Agent)
Ao iniciar o/coder ou /agent, todos os agents customizados são automaticamente registrados no sistema de orquestração multi-agent. O LLM orquestrador pode então despachá-los via <agent_call>:
O que o worker recebe
Quando despachado, o CustomAgent executa com:System prompt personalizado
Inclui o conteúdo do agent (markdown body), skills carregadas, caminhos de subskills, comandos de scripts e instruções de tool_call.
Client resolvido por turno
Se o agent declarar
model:, o dispatcher chama ResolveModelRouting para obter o client correto antes de cada turno do mini-ReAct.Effort aplicado ao ctx
Se o agent declarar
effort:, o ctx do worker recebe WithEffortHint, que o provider lê dentro do SendPrompt.Exemplo End-to-End
Comandos de Gerenciamento
Todos os comandos de gerenciamento estão integrados ao/agent:
| Comando | Descrição |
|---|---|
/agent | Mostra status do agente ativo e ajuda (não entra em modo agente sem task) |
/agent list | Lista todos os agentes disponíveis |
/agent status | Lista apenas os agentes anexados (resumido) — alias: attached, list-attached |
/agent load <nome> | Carrega um agente específico |
/agent attach <nome> | Anexa um agente adicional à sessão |
/agent detach <nome> | Remove um agente anexado |
/agent skills | Lista todas as skills disponíveis |
/agent show [--full] | Mostra o agente ativo com exemplo de prompts (use --full para exibir tudo) |
/agent off | Desativa todos os agentes atualmente ativos |
/agent <tarefa> | Executa uma tarefa no modo agente |
Ordem de Montagem do Prompt
Quando um agente é carregado, o system prompt é montado na seguinte ordem:
Essa ordem garante que a IA receba o contexto de forma estruturada, com intenção explícita do usuário (manual) tendo precedência sobre auto-ativação.
Exemplo Prático Completo
1. Criar um agente
Crie o arquivo~/.chatcli/agents/python-data.md:
2. Usar o agente
Precedência de Agents e Skills (Projeto > Global)
Tanto agents quanto skills suportam diretórios por projeto com precedência sobre os globais. O ChatCLI detecta a raiz do projeto automaticamente buscando um diretório.agent/ ou .git/ a partir do diretório atual.
Ordem de Busca
| Recurso | 1. Projeto (prioridade) | 2. Global (fallback) |
|---|---|---|
| Agents | ./.agent/agents/*.md | ~/.chatcli/agents/*.md |
| Skills | ./.agent/skills/ | ~/.chatcli/skills/ |
Estrutura do Projeto
Integração com /coder
Quando um agente está carregado:
/agent <tarefa>— Usa a persona do agente./coder <tarefa>— Combina a persona do agente com o prompt do coder.
@coder para editar arquivos, executar testes etc. As preferências model: e effort: do agente são honradas em ambos os modos.
Dicas
Comece Simples
Crie agentes com poucas skills e vá adicionando conforme necessário.
Versione no Git
Mantenha seus agentes e skills em um repositório.
Compartilhe com a Equipe
Skills de coding style garantem consistência.
Use Descrições Claras
Ajuda a entender o propósito de cada agente/skill.
Teste o Prompt
Use
/agent show para ver como o prompt ficou montado.Atribua `effort` com Cuidado
effort: high custa mais tokens. Reserve para agentes que realmente precisam de raciocínio profundo (revisores, planners, diagnostics).Exemplos de Skills Úteis
- clean-code — Princípios de código limpo
- error-handling — Padrões de tratamento de erros
- testing-patterns — Padrões de testes automatizados
- docker-master — Best practices para Dockerfiles
- clean-scripts — Padrões para scripts Bash seguros
- aws-security — Regras de segurança para AWS
- team-conventions — Convenções específicas da equipe
Agents e Skills Remotos
Quando conectado a um servidor ChatCLI viachatcli connect, o client descobre automaticamente os agents e skills disponíveis no servidor. Eles são transferidos ao client e compostos localmente, permitindo merge com resources locais.
Desde a atualização recente, o wire gRPC (pb.AgentInfo) carrega todos os campos avançados — model, effort, category, version, author, tags — então agents remotos têm exatamente o mesmo comportamento de roteamento que os locais.
Provisionamento via Kubernetes
- Helm
- Operator
Os ConfigMaps são montados em
/home/chatcli/.chatcli/agents/ e /home/chatcli/.chatcli/skills/, e ficam disponíveis para descoberta remota automaticamente. Campos avançados de frontmatter (model, effort, category, etc.) são lidos pelo chatcli dentro do pod — o CRD e o operator não precisam ser alterados para suportá-los.Próximos passos
Multi-Agent Orchestration
Como múltiplos agents customizados rodam em paralelo via
<agent_call>.Skill Registry
Publique e descubra skills compartilhadas entre equipes.
Subagent Delegation
Delegação focada para análises concentradas em um payload grande.
Modo Servidor
Distribua agents via ConfigMap para toda a equipe.