ctx install --agent <name> configura dois mecanismos no agente de codificação, juntos no mesmo settings.json:
- Hook
PreToolUseque redireciona comandos Bash cobertos paractx execautomaticamente (compressão de output). - MCP server
ctxexpondo 10 tools (ctx_exec,ctx_search,ctx_map,ctx_list, mais seis de grafo) como chamadas explícitas pelo agente.
Os dois coexistem: o hook captura Bash calls existentes, o MCP server permite que o agente invoque tools por nome quando faz sentido (ex: ctx_search para busca semântica em docs indexadas).
Resultado prático: o agente roda git status normalmente; o hook reescreve para ctx exec git status antes da execução. Quando o agente quer buscar na wiki, chama ctx_search direto via MCP.
| Agente | Status | Escopo padrão |
|---|---|---|
| Claude Code | ✅ disponível | ~/.claude/settings.json |
| Claude Desktop | ✅ disponível | Ver caminhos por SO abaixo |
| Cursor | 🚧 próxima entrega | — |
| Codex CLI | 🚧 próxima entrega | — |
| opencode | 🚧 próxima entrega | — |
# Instala no escopo de usuário (~/.claude/settings.json) — afeta todos os projetos
ctx install --agent claude-code
# Instala apenas no projeto atual (.claude/settings.json)
ctx install --agent claude-code --project
# Remove a instalação
ctx uninstall --agent claude-code
# Remove só do projeto
ctx uninstall --agent claude-code --project# Instala no aplicativo Claude Desktop
ctx install --agent claude-desktop
# Remove do aplicativo Claude Desktop
ctx uninstall --agent claude-desktopO installer escreve apenas o bloco mcpServers (Claude Desktop não suporta hooks PreToolUse).
Caminhos do config (claude_desktop_config.json), resolvidos por dirs::config_dir():
| SO | Caminho |
|---|---|
| Linux | ~/.config/Claude/claude_desktop_config.json |
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
Após instalar: feche e reabra o app Claude Desktop (ou reinicie o processo) para recarregar o MCP. Não é necessário “nova sessão de chat” como no Claude Code — basta o app reler o JSON.
| Agente | O que fazer após ctx install |
|---|---|
| Claude Code | Inicie uma nova sessão de chat para o hook PreToolUse e o MCP entrarem em vigor |
| Claude Desktop | Reabra o app para recarregar claude_desktop_config.json (só MCP, sem hook) |
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "ctx __hook claude-code-pre-tool-use",
"_installer": "ctx"
}
]
}
]
},
"mcpServers": {
"ctx": {
"command": "ctx",
"args": ["mcp", "serve"],
"_installer": "ctx"
}
}
}O campo _installer: "ctx" é o marcador de propriedade: o uninstall remove apenas entradas marcadas assim. Hooks e MCP servers que você ou outras ferramentas tenham configurado ficam intactos.
Quando o agente cliente conecta via MCP, vê estas 10 tools:
| Tool | Função |
|---|---|
ctx_exec |
Executa comando shell com filtro de compressão (mesma cobertura do hook PreToolUse) |
ctx_search |
Busca semântica em acervo do catalog (collection, query, top_k) |
ctx_map |
Gera repo map curado (title, dirs, max_tokens…) |
ctx_list |
Lista acervos catalogados disponíveis |
ctx_graph_index |
Indexa diretórios populando o grafo de símbolos |
ctx_callers |
Busca chamadores de um símbolo com relevância e budget de tokens |
ctx_callees |
Busca símbolos chamados a partir de um identificador qualificado |
ctx_trace |
Retorna a cadeia de callers até depth níveis |
ctx_impact |
Lista código impactado por mudanças (callers diretos e indiretos) |
ctx_node |
Localiza as definições de um símbolo no grafo |
Schemas de input são gerados automaticamente via schemars (validados no cliente antes da chamada).
Para listar via CLI: ctx mcp tools. Para subir o server standalone: ctx mcp serve (stdio long-running).
Para cada Bash tool call, o hook (rodando como ctx __hook claude-code-pre-tool-use):
- Lê JSON do stdin (
{"tool_name":"Bash","tool_input":{"command":"..."}}). - Faz parse robusto do comando respeitando aspas (
shell-words). - Consulta
exec::registry::matches— fonte única de verdade sobre comandos cobertos. - Se cobre → devolve
{"hookSpecificOutput":{"hookEventName":"PreToolUse","modifiedToolInput":{"command":"ctx exec <original>"}}}. - Se não cobre → devolve
{}(passthrough).
- Comandos sem filtro registrado (ex:
echo,cat) - Comandos que já começam com
ctx execouctx __hook(evita loop infinito) - Tool calls que não são
Bash - Input malformado (degradação silenciosa)
O handler do hook sempre sai com exit 0. Qualquer erro interno (parse falho, registry sem resposta, JSON malformado) vira passthrough silencioso ({}). Isso garante que uma sessão do Claude Code nunca quebre por causa do ctx — no pior caso, comandos rodam sem filtragem.
Se algo der errado e o uninstall não resolver, abra ~/.claude/settings.json e remova manualmente entradas que tenham _installer: "ctx". Não toque em outros hooks.
Ver docs/competitors/ para a análise completa.
- RTK usa
rtk init -gpara escrever em arquivos por agente — mesma ideia do hook, mas RTK é proxy CLI separado e cobre 100+ comandos com regras hardcoded. - Context Mode roda como MCP server e intercepta no protocolo, não via PreToolUse hook. Nosso
ctxfaz os dois (hook + MCP) coexistindo. - CodeGraph é MCP-only com tools focadas em grafo de símbolos (callers/callees/trace) — eixo adjacente ao nosso.