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