Dukk Dukk CLI dukk · referência
Referência da linha de comando

CLI do Dukk — referência completa

O Dukk é um agente de IA para o terminal (harness Rust, antigo "Elai Code"). Ele roda como uma REPL/TUI interativa, mas também tem um modo inline não-interativo (dukk prompt) e subcomandos para autenticação, sessões, modelo e inicialização de projeto. Esta página documenta todas as flags globais, subcomandos e slash commands.

binário: dukk subcomandos: prompt, login, init, stats, … flags globais reais 39 slash commands (+2 ocultos)

Visão geral

O CLI é distribuído como um único binário chamado dukk. Sem nenhum subcomando, dukk abre a TUI interativa (REPL); com um subcomando ou com dukk prompt, ele executa uma ação e sai. O parsing de argumentos é hand-rolled (não usa clap): as flags globais (--model, --permission-mode, --output-format, --dangerously-skip-permissions, --no-tui, --swd, flags de budget, etc.) vêm antes do subcomando.

Instalação

# macOS / Linux
curl -fsSL https://get.nexcode.live | sh

# Windows (PowerShell)
irm https://get.nexcode.live/ps | iex

O instalador coloca o binário em /usr/local/bin/dukk (ou equivalente no PATH).

Invocação

# Abre a TUI interativa (sem subcomando)
$ dukk

# Ajuda geral e por subcomando
$ dukk --help
$ dukk prompt --help

# Versão
$ dukk --version
Primeiro acesso: autentique-se com dukk login (ou importe credenciais do Claude Code com dukk login --import-claude-code) e, opcionalmente, inicialize o projeto com dukk init. Hoje o init cria o diretório .dukk/ e o arquivo de instruções ELAI.md (legado, em migração — ainda não DUKK.md), e indexa o código para RAG.

Modo inline (prompt)

dukk prompt "<texto>" roda um prompt único de forma não-interativa e sai — ideal para scripts, pipelines e automações. Combine com as flags globais para controlar modelo, permissões e formato de saída.

Exemplos básicos

# Prompt simples (texto na saída padrão)
$ dukk prompt "explique o que faz a função main do projeto"

# Várias palavras viram um único prompt (não precisa de aspas, mas recomenda-se)
$ dukk prompt resuma o README em 3 bullets

Escolhendo modelo e formato de saída

# Saída JSON estruturada (ótimo para parsear em scripts)
$ dukk --output-format json prompt "liste os endpoints da API"

# Saída em texto (default)
$ dukk --output-format text prompt "gere testes para o módulo de auth"

# Trocar o modelo só para esta execução (nome completo ou alias)
$ dukk --model claude-haiku-4-5-20251001 prompt "revise este diff em busca de bugs"

--output-format aceita apenas text ou json (não há ndjson). A opção -p/--print também força saída não-interativa.

Permissões em automações

# Modo somente-leitura: o agente não modifica arquivos
$ dukk --permission-mode read-only prompt "audite a segurança do crate server"

# Workspace-write: permite escrita dentro do workspace
$ dukk --permission-mode workspace-write prompt "aplique o lint fix sugerido"

# Pula TODAS as confirmações de permissão (acesso total — use com cuidado)
$ dukk --dangerously-skip-permissions prompt "renomeie a variável foo para bar em todo o projeto"

# Forma curta de prompt one-shot (compat Elai Code): -p
$ dukk -p "explique a arquitetura do crate server"
Todas as flags globais (--model, --permission-mode, --output-format, --dangerously-skip-permissions, --swd, flags de budget, etc.) vêm antes do subcomando. Não existem as flags --yes, --no nem --config no runtime atual (o parser real é o parse_args() hand-rolled em main.rs, não o parser clap legado).

Flags globais

Aplicáveis a qualquer invocação do dukk, antes do subcomando. Extraídas do parser real (parse_args() em main.rs).

FlagDefaultDescrição
--model <MODEL> dinâmico Modelo a usar nesta execução. Aceita nome completo ou alias. O default não é fixo: vem de suggested_default_model() — escolhe conforme a credencial ativa (Anthropic → claude-haiku-4-5-20251001; OpenAI → gpt-4o-mini/gpt-5.5; xAI → grok-3; etc.).
--permission-mode <MODE> config Política de permissão de escrita. Valores: read-only, workspace-write, danger-full-access.
--dangerously-skip-permissions off Atalho para danger-full-access: pula todas as confirmações de permissão. Use com cuidado.
--output-format <FMT> text Formato da saída. Valores aceitos: text, json (não existe ndjson).
-p, --print off -p "<texto>" = prompt one-shot não-interativo (compat Elai Code). --print apenas força saída em text não-interativa.
--no-tui off Não abre a TUI ratatui; usa o REPL inline (modo texto) mesmo sem subcomando.
--no-cache off Desabilita o cache de respostas nesta execução.
--orchestrate off Liga o modo de orquestração (define ELAI_ORCHESTRATE=1).
--swd <LEVEL> full Nível do Strict Write Discipline: off, partial ou full. Ver seção SWD.
--budget-tokens <N> Teto de tokens para a execução. Avisa em 80% do limite.
--budget-usd <F> Teto de custo em USD.
--budget-turns <N> Teto de turnos do agente.
--no-budget off Ignora qualquer teto de budget (sobrepõe as flags --budget-*).
--allowedTools, --allowed-tools <CSV> Restringe as tools permitidas (lista separada por vírgula). Repetível — os valores são acumulados.
--system-prompt <TEXT> Substitui o system prompt por completo nesta execução.
--append-system-prompt <TEXT> Acrescenta texto ao final do system prompt padrão.
--version, -V off Imprime a versão e sai.
--help, -h off Mostra a ajuda e sai.
--resume <SESSION.json> Retoma uma sessão salva a partir do snapshot JSON.

Subcomandos

Use dukk <subcomando> --help para o texto autoritativo de cada um.

dukk prompt inline

Roda um prompt não-interativo e sai.

Argumentos

ArgDescrição
<prompt>...Texto do prompt (uma ou mais palavras; são unidas em um único prompt).
$ dukk prompt "qual a arquitetura do crate server?"
$ dukk --output-format json prompt "liste as migrations pendentes"

dukk login

Autentica com a Anthropic ou um provedor de terceiros. Os métodos abaixo são mutuamente exclusivos.

Flags

FlagDescrição
--consoleLogin via Anthropic Console (cria uma API key).
--claudeaiLogin via claude.ai (OAuth de assinante Pro/Max/Team/Enterprise).
--ssoLogin via SSO (fluxo claude.ai com login_method=sso).
--email <EMAIL>Pré-preenche o e-mail na página de OAuth (login_hint).
--api-keyCola uma API key da Anthropic (sk-ant-...). Use --stdin para pipe; senão pergunta de forma segura.
--tokenCola um ANTHROPIC_AUTH_TOKEN (Bearer token). Use --stdin para pipe.
--use-bedrockMuda para AWS Bedrock (define CLAUDE_CODE_USE_BEDROCK=1; credenciais AWS via cadeia padrão).
--use-vertexMuda para Google Vertex AI (define CLAUDE_CODE_USE_VERTEX=1).
--use-foundryMuda para Azure Foundry (define CLAUDE_CODE_USE_FOUNDRY=1).
--no-browserImprime a URL de OAuth sem abrir o navegador (CI / shells remotos).
--stdinLê o valor secreto do stdin (para --api-key e --token).
--legacy-elaiUsa o fluxo OAuth legado da elai.dev (deprecated).
--import-claude-codeImporta credenciais do Claude Code (~/.claude/credentials.json) sem interação.
--codex-oauthLogin OAuth via Codex/OpenAI (codex login) e importa credenciais.
--import-codexImporta OAuth do Codex/ChatGPT de ~/.codex/auth.json (ou $CODEX_HOME/auth.json).
$ dukk login --claudeai
$ dukk login --import-claude-code
$ echo "sk-ant-..." | dukk login --api-key --stdin

dukk logout

Limpa as credenciais de autenticação salvas.

$ dukk logout

dukk auth

Mostra ou lista métodos de autenticação.

Subcomandos

ComandoDescrição
auth status [--json]Mostra o método ativo, validade e escopos. --json para saída estruturada.
auth listLista todos os métodos de login disponíveis.
$ dukk auth status --json
$ dukk auth list

dukk send

Envia uma mensagem diretamente, sem abrir a TUI.

Argumentos e flags

Arg/FlagDescrição
<message>...Mensagem a enviar. Use - ou --stdin para ler do stdin.
--waitAguarda a resposta completa antes de retornar (default: streaming).
--jsonSaída da resposta em JSON.
--stdinLê a mensagem do stdin.
$ dukk send "como rodar os testes do workspace?"
$ dukk send --wait --json "explique isto"
$ cat erro.log | dukk send --stdin

dukk chat

Visualiza o histórico de chat.

Subcomandos

ComandoDescrição
chat show [--last N] [--json]Mostra o histórico recente. --last define o número de mensagens (default 20); --json para saída estruturada.
$ dukk chat show --last 5
$ dukk chat show --json

dukk model

Gerencia o modelo ativo.

Subcomandos

ComandoDescrição
model getMostra o modelo atualmente ativo.
model set <model>Define o modelo ativo. Nome ou alias (ex.: opus, sonnet, claude-opus-4-6).
$ dukk model get
$ dukk model set claude-opus-4-6

dukk reply

Responde a uma pergunta pendente do modelo.

Argumentos e flags

Arg/FlagDescrição
<answer>...A resposta a fornecer.
--stdinLê a resposta do stdin.
$ dukk reply "sim, pode prosseguir"
$ echo "opção 2" | dukk reply --stdin

dukk status

Mostra o status da sessão atual.

Flags

FlagDescrição
--jsonSaída em JSON.
$ dukk status
$ dukk status --json

dukk init

Inicializa o projeto: cria .dukk/ e o arquivo ELAI.md (legado, em migração), e indexa o código para RAG.

Flags

FlagDefaultDescrição
--backend <B>sqliteBackend de armazenamento vetorial: sqlite ou qdrant.
--qdrant-url <URL>env / 127.0.0.1:6334URL gRPC do Qdrant (apenas --backend qdrant). Fallback: env DUKK_QDRANT_URL.
--embed-provider <P>localProvedor de embeddings: local, ollama, jina, openai, voyage.
--embed-model <M>Modelo de embedding (override do default por provider).
--ollama-url <URL>URL do Ollama (apenas --embed-provider ollama).
--no-watcherfalseNão roda o watcher em background após o init.
--no-indexfalsePula a indexação (apenas cria arquivos básicos + template ELAI.md).
--reindexfalseApaga o índice existente e reindexa do zero.
--start-qdrantfalseSobe (ou inicia) um container Qdrant local via Docker.
--qdrant-port <P>6333Porta HTTP do Qdrant quando --start-qdrant está ativo.
--qdrant-container <N>elai-qdrantNome do container Docker do Qdrant quando --start-qdrant está ativo.
$ dukk init
$ dukk init --embed-provider ollama --ollama-url http://localhost:11434
$ dukk init --backend qdrant --start-qdrant --qdrant-port 7333

dukk stats

Mostra estatísticas de uso de tokens e custo.

Flags

FlagDescrição
--days <N>Janela de dias a considerar.
--by-modelAgrupa o uso por modelo.
--by-projectAgrupa o uso por projeto.
$ dukk stats --days 30 --by-model
$ dukk stats --by-project

dukk agents

Lista (ou inspeciona) os agents configurados. Aceita argumentos livres repassados ao subsistema de agents.

$ dukk agents
$ dukk agents <args>

dukk skills

Lista (ou inspeciona) as skills disponíveis. Aceita argumentos livres.

$ dukk skills

dukk system-prompt

Imprime o system prompt efetivo (útil para depurar overrides).

Flags

FlagDescrição
--cwd <PATH>Calcula o prompt como se o cwd fosse este caminho.
--dateInclui a data corrente na renderização do prompt.
$ dukk system-prompt --cwd . --date

dukk verify

Verifica arquivos do código contra as entradas de memória registradas.

$ dukk verify

dukk update

Verifica e instala a última release do Dukk.

$ dukk update

dukk uninstall

Remove o binário e os arquivos instalados (e, no Windows, as linhas inseridas no shell RC).

$ dukk uninstall

dukk --resume sessão

Retoma uma sessão salva a partir de um snapshot JSON.

$ dukk --resume sessao.json

dukk dump-manifests dev

Lê as fontes TS upstream e imprime as contagens extraídas (ferramenta de desenvolvimento).

$ dukk dump-manifests

dukk bootstrap-plan dev

Imprime o esqueleto da fase atual de bootstrap (ferramenta de desenvolvimento).

$ dukk bootstrap-plan

Modo interativo (TUI)

Sem subcomando, o dukk abre uma TUI ratatui (REPL interativa). Use --no-tui para forçar o REPL em modo texto. Os atalhos abaixo valem na entrada principal da TUI (fonte: tui.rs, input.rs, app.rs).

AtalhoAção
Paleta & edição
Ctrl+K · /Abre a paleta de slash commands (/ abre quando a entrada está vazia).
TabAbre a paleta / completa o slash command em digitação.
@Insere @ e abre o seletor de file-mention (referenciar arquivos).
Shift+EnterInsere uma quebra de linha (multilinha).
EnterEnvia a mensagem (ou enfileira se há turno em andamento).
Ctrl+LLimpa a tela / histórico visível do chat.
Ctrl+YCopia a última mensagem do assistente para o clipboard.
Shift+↑ · Shift+↓Navega no histórico de comandos.
Modos & pickers
Ctrl+REntra no modo de leitura ("leitura").
Ctrl+TCicla o tema (Elai → Sunset → Dracula → Cyber → Matrix → Corp → Amber → Crimson).
Ctrl+BAbre o seletor de buddy (mascote).
F2Abre o seletor de modelo.
F3Abre o seletor de modo de permissão.
F4Abre o seletor de sessão.
Rolagem & saída
PageUp · PageDownRola o chat 10 linhas para cima / baixo.
Ctrl+U · Ctrl+DRola meia página (5 linhas) para cima / baixo.
Ctrl+HAlterna o cabeçalho entre completo e compacto.
Ctrl+CCancela a geração; ou limpa a entrada; ou sai (com entrada vazia).

Modo vim do REPL inline

A entrada do REPL tem um modo vim opcional (fonte: input.rs), alternado pelo comando /vim (mostra "Vim mode enabled/disabled"). Quando ativo, o prompt exibe o modo entre colchetes (ex.: [INSERT] ›). Modos: INSERT, NORMAL, VISUAL e COMMAND (ex-mode com :).

SWD (Strict Write Discipline)

Camada de disciplina de escrita do Dukk (fonte: swd.rs). Controlada pela flag global --swd off|partial|full. O default é full.

NívelComportamento
offTools de escrita rodam normalmente, sem wrapping. Sem snapshots, sem rollback, sem audit log.
partialTools de escrita rodam, mas são envolvidas: snapshot SHA-256 antes/depois de cada escrita, rollback disponível em falha, e cada transação é registrada no audit log. Blocos [FILE_ACTION] não são interpretados.
fullTools de escrita são bloqueadas: o modelo deve emitir blocos [FILE_ACTION:Write] / [FILE_ACTION:Delete], que são interpretados e executados transacionalmente (snapshot de tudo → executa → faz rollback de tudo se qualquer ação falhar). Cada ação pode declarar um content_hash validado após a escrita.

Os estados de resultado registrados são Verified (mudou e o hash confere), Noop (sem mudança), Drift (hash divergente), Failed e RolledBack. Cada transação é gravada em JSON Lines no audit log:

# Audit log (relativo ao cwd)
.dukk/swd.log

# Uma linha JSON por ação
{"ts":1234567890,"tool":"swd_full","path":"src/foo.rs","outcome":"Verified","before":"abc123…","after":"def456…"}
Em full, um system prompt dedicado instrui o modelo sobre o formato dos blocos [FILE_ACTION]. Snapshots usam SHA-256 do conteúdo do arquivo; o rollback restaura o estado anterior (ou apaga o arquivo se ele não existia antes).

Variáveis de ambiente

Principais variáveis lidas pelo runtime. Muitas existem em par DUKK_* / ELAI_* (ver nota de aliasing abaixo).

VariávelPara quê
Anthropic / Claude
ANTHROPIC_API_KEYAPI key da Anthropic.
ANTHROPIC_AUTH_TOKENBearer token (auth alternativa à API key).
ANTHROPIC_BASE_URLEndpoint customizado (default: https://api.anthropic.com).
CLAUDE_CODE_USE_BEDROCK · _USE_VERTEX · _USE_FOUNDRYToggles que roteiam o cliente Anthropic para AWS Bedrock / Google Vertex / Azure Foundry (sem cliente HTTP próprio — ver Providers).
OpenAI / xAI
OPENAI_API_KEYAPI key da OpenAI.
XAI_API_KEY · XAI_BASE_URLCredencial e endpoint do xAI (Grok).
OpenCode
OPENCODE_API_KEY · OPENCODE_BASE_URLOpenCode Zen.
OPENCODE_GO_API_KEY · OPENCODE_GO_BASE_URLOpenCode Go.
Providers locais
OLLAMA_BASE_URLServidor Ollama (presença também influencia o modelo default).
LMSTUDIO_BASE_URLServidor LM Studio.
Modelos & comportamento
DUKK_DEFAULT_*_MODEL · ELAI_DEFAULT_*_MODELOverride do modelo default por provider (ANTHROPIC, OPENAI, OPENCODE_ZEN, OPENCODE_GO, OLLAMA, LMSTUDIO).
MAX_THINKING_TOKENSOrçamento de extended thinking (defina 0 para desabilitar).
ELAI_ORCHESTRATE (via --orchestrate)Liga o modo de orquestração.
DUKK_TELEMETRY · ELAI_TELEMETRYTelemetria; defina off para desativar.
Aliasing DUKK_*ELAI_*. Variáveis com prefixo de produto são lidas como DUKK_<NOME> or-else ELAI_<NOME> — o prefixo DUKK_ tem precedência; se ausente, cai no ELAI_ (legado, em migração).

Ordem de resolução de credenciais (Anthropic). CLAUDE_CODE_API_KEY_FDANTHROPIC_API_KEYANTHROPIC_AUTH_TOKEN (ou CLAUDE_CODE_OAUTH_TOKEN) → AuthMethod salvo (~/.dukk/auth.json, com refresh de OAuth) → OAuth legado em credentials.json (import do Claude Code). O keychain usado é dukk-credentials / Elai Code-credentials (legado).

Providers

São 7 clientes HTTP reais (fonte: api/src/providers/). Anthropic tem cliente próprio; os demais usam a camada OpenAI-compat.

ProviderBase URL defaultCredencial
Anthropichttps://api.anthropic.comANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN
OpenAIhttps://api.openai.com/v1OPENAI_API_KEY
xAI (Grok)https://api.x.ai/v1XAI_API_KEY
Ollamahttp://localhost:11434/v1OLLAMA_BASE_URL
LM Studiohttp://localhost:1234/v1LMSTUDIO_BASE_URL
OpenCode Gohttps://opencode.ai/zen/go/v1OPENCODE_GO_API_KEY
OpenCode Zenhttps://opencode.ai/zen/v1OPENCODE_API_KEY
Bedrock, Vertex e Foundry não são clientes HTTP separados. São toggles de ambiente (CLAUDE_CODE_USE_BEDROCK / _USE_VERTEX / _USE_FOUNDRY) que se apoiam sobre o cliente Anthropic: a camada HTTP não envia auth própria — as credenciais são resolvidas pela infra do respectivo provider (AWS SDK, etc.).

Slash commands

Disponíveis dentro da REPL/TUI interativa, digitando / seguido do comando. O sufixo [resume] indica que o comando também funciona com --resume SESSION.json. Catálogo completo (39 comandos), agrupado por categoria.

ComandoArgumentoResumo
Session
/helpLista os slash commands disponíveis.
/statusMostra o status da sessão atual.
/compactCompacta o histórico local da sessão.
/clear[--confirm]Inicia uma nova sessão local.
/costMostra o uso cumulativo de tokens desta sessão.
/resume<caminho-da-sessão>Carrega uma sessão salva no REPL.
/export[arquivo]Exporta a conversa atual para um arquivo.
/buddy[pick|show]Gerencia o mascote (escolha, exibição).
Behavior
/model[modelo]Mostra ou troca o modelo ativo.
/permissions[somente-leitura|workspace-write|acesso-total]Mostra ou troca o modo de permissão ativo.
/budget[tokens] [usd] | offLimitador de orçamento (tokens/custo em USD).
/tools[why]Inspeciona a seleção de tools da sessão atual.
/cache[clear|stats]Gerencia o cache de respostas.
/locale[pt-BR|en]Mostra ou troca o idioma da interface.
Project
/config[env|hooks|model|plugins]Inspeciona arquivos de config do Elai ou seções mescladas.
/memoryInspeciona arquivos de memória do Elai carregados.
/initCria um ELAI.md inicial para este repositório.
/verifyVerifica arquivos do código contra entradas de memória.
/deepresearch<query> (alias /dr)Pesquisa profunda com agente de IA.
Git
/diffMostra o git diff das alterações atuais do workspace.
/branch[list|create <nome>|switch <nome>]Lista, cria ou troca branches do git.
/worktree[list|add <caminho> [branch]|remove <caminho>|prune]Lista, adiciona, remove ou limpa worktrees do git.
/commitGera uma mensagem de commit e cria um commit git.
/commit-push-pr[contexto]Faz commit, push da branch e abre um PR.
/pr[contexto]Esboça ou cria um pull request a partir da conversa.
/issue[contexto]Esboça ou cria uma issue no GitHub a partir da conversa.
Analysis
/bughunter[escopo]Inspeciona o código em busca de bugs prováveis.
/ultraplan[tarefa]Roda um plano profundo com raciocínio multi-etapas.
/teleport<símbolo-ou-caminho>Salta para um arquivo ou símbolo pesquisando o workspace.
/debug-tool-callReexecuta a última chamada de tool com detalhes de debug.
System
/versionMostra a versão do CLI e informações de build.
/updateVerifica e instala a última release do Elai Code.
/run<script> [--update] [args...]Executa um script com suporte a atualização via LLM.
Plugins
/plugin[list|install <caminho>|enable <nome>|disable <nome>|uninstall <id>|update <id>]Gerencia plugins do Elai Code. Aliases: /plugins, /marketplace.
/agentsLista os agents configurados.
/skillsLista as skills disponíveis.
/dream[--force]Comprime entradas antigas de memória em um resumo.
/stats[--days N] [--by-model] [--by-project]Mostra estatísticas de uso de tokens e custo.
/session[list|switch <id-da-sessão>]Lista ou troca sessões locais gerenciadas.
Avançado / oculto
/collection oculto[ação]Comando avançado de collection. Não aparece em /help nem no catálogo público (SLASH_COMMAND_SPECS); existe só no enum/parser de slash commands.
/unlock oculto[ação]Comando avançado de unlock. Igualmente fora do catálogo público — disponível apenas via digitação direta na REPL.

Os 39 comandos acima são os registrados em SLASH_COMMAND_SPECS. /collection e /unlock são extras ocultos (não listados no catálogo).