MODULO 4.2

⌨️ Commands System

Como slash commands funcionam dentro do Claude Code, incluindo seus tipos, pipeline de registro, processamento de input e integracao com o REPL.

6
Topicos
~45
Minutos
Deep
Nivel
Source
Tipo
1

📦 Tres Tipos de Comandos

Local Commands

Funcoes TypeScript puras, sincronas. Exemplos: /clear, /compact, /cost

Local JSX Commands

Renderizam componentes React/Ink. Exemplos: /help, /model, /config, /memory

Prompt Commands

Expandem para blocos de conteudo enviados ao modelo. Exemplos: /commit, /review, /init

🗺️ Arvore de Decisao de Tipos

flowchart TD
    A[User types /cmd] --> B{Does it need\nto render UI?}
    B -- Yes --> C[local-jsx\ne.g. /model, /help]
    B -- No --> D{Does it call\nthe AI model?}
    D -- Yes --> E[prompt\ne.g. /commit, /review]
    D -- No --> F[local\ne.g. /clear, /compact, /cost]
                    
2

🔧 Pipeline de Registro

Static COMMANDS() + Skills dirs + Plugins + Workflows
-> loadAllCommands(cwd)
-> filter(availability + isEnabled)
-> getCommands(cwd)

Quatro Fontes de Skills

skillDirCommands
.claude/skills/
pluginSkills
Plugins instalados
bundledSkills
Compilados no binario
builtinPluginSkills
Plugins built-in sempre ativos
3

🔒 Dois Gates Independentes

availability

Verificacao estatica de auth-provider (claude-ai ou console)

isEnabled()

Verificacao runtime de feature-flag

💡 Conceito-chave

Nenhum dos gates e memoizado -- mudancas de autenticacao fazem efeito imediatamente. Lazy loading via load: () => import('./cmd.js') evita carregar codigo de comandos nao utilizados.

4

🐚 Shell Command Substitution

Prompt commands podem embutir saida de shell ao vivo nos prompts usando backtick com prefixo !:

const PROMPT = `
- Current git status: !`git status`
- Current git diff: !`git diff HEAD`
`
5

🌐 Bridge & Remote Mode

Tipo Bridge Mode Razao
local-jsx Sempre bloqueado Renderiza UI no terminal
prompt Sempre seguro Expande para texto
local Lista explicita Deve estar em BRIDGE_SAFE_COMMANDS
6

🔄 Sequencia de Despacho

sequenceDiagram
    participant U as User Input
    participant R as REPL
    participant LC as LocalCommand
    participant LJ as LocalJSX
    participant PC as PromptCommand
    participant M as Model
    U->>R: /compact "focus on DB"
    R->>R: findCommand("compact")
    R->>LC: load() then call(args, ctx)
    LC-->>R: {type:'compact', ...}
    R->>R: update messages state
    U->>R: /model
    R->>LJ: load() then call(onDone, ctx, args)
    LJ-->>R: ReactNode (renders picker UI)
    R->>R: onDone() resume input
    U->>R: /commit
    R->>PC: getPromptForCommand(args, ctx)
    PC-->>R: ContentBlockParam[]
    R->>M: send as user turn
    M-->>R: streaming response
                    

📋 Resumo do Modulo

Tres tipos de execucao: local, local-jsx, prompt
Lazy loading via load: () => import('./cmd.js')
Dois gates independentes (availability + isEnabled) controlam visibilidade
Shell substitution embute output ao vivo em prompts
Comandos internal-only sao eliminados por dead-code-elimination do Bun
Modulo Anterior Proximo Modulo