Pular para conteúdo

Agentes

O Aru é construído em torno de agentes — instâncias de LLM com prompt, conjunto de ferramentas e papel específicos. Os agentes nativos são declarados como AgentSpec em aru/agents/catalog.py e construídos por um factory único (agent_factory.create_agent_from_spec), que resolve o modelo, aplica hooks de plugin e anexa o compression manager.

Agentes nativos

Agente Modo Papel Ferramentas
build (General) primary Conversa e execução direta. Invoca enter_plan_mode sozinho quando detecta tarefas multi-arquivo Conjunto completo (write, edit, bash, delegate, plan/task tracking)
plan (Planner) primary Análise read-only → plano em Markdown (## Summary + ## Steps) Apenas read/search (read_file, read_files, glob_search, grep_search, list_directory)
executor primary Executa os passos de um plano armazenado, com tracking obrigatório de subtarefas Conjunto completo
explorer subagent Pesquisa rápida e read-only em codebase. Invocado apenas via delegate_task(task, agent_name="explorer") Read/search + bash read-only + rank_files

Explorer agora é subagent

O explorer não é mais invocável diretamente pela REPL. Ele é chamado pelo build via delegate_task quando a tarefa envolve explorar muitos arquivos — seu contexto isolado protege o contexto principal de ruído.

build — agente geral

É o agente padrão da REPL. Resolve perguntas, edits pequenos e refatorações localizadas sem precisar de plano explícito. Tem acesso ao conjunto completo de ferramentas e segue duas heurísticas importantes:

  • Delega pesquisa ampla. Para entender sistemas ou analisar vários arquivos, spawna múltiplos delegate_task(..., agent_name="explorer") em paralelo e sintetiza os retornos.
  • Entra em plan mode sozinho. Para tarefas que exigem 3+ mudanças coordenadas, chama enter_plan_mode(task) antes de começar a editar.

plan — planner

Ativado via /plan <tarefa> ou automaticamente pelo build através de enter_plan_mode. Lê o código em modo read-only e produz um plano estruturado:

## Summary
- 1-3 bullets descrevendo a mudança

## Steps
- [ ] Step 1: [verbo] [o quê] em [arquivo] — [detalhe essencial]
- [ ] Step 2: ...

O plano é armazenado no estado da sessão (session.plan_steps) e reaparece a cada turno como um <system-reminder> com status ( pendente / ~ em progresso / concluído / falhou / · pulado).

Reviewer (escopo)

aru/agents/planner.py expõe review_plan(request, plan) — um reviewer one-shot que roda no modelo pequeno, sem ferramentas, e corta passos que ultrapassam o escopo pedido. Preserva a redação dos passos mantidos. Ative com plan_reviewer: true no aru.json.

executor — execução estruturada

Implementa os passos gerados pelo planner. Obriga o uso de duas ferramentas de tracking:

  • create_task_list([...]) — primeira chamada obrigatória. Declara 1–10 subtarefas concretas para o passo atual.
  • update_task(index, status) — atualiza cada subtarefa (in_progress / completed / failed).
  • update_plan_step(index, status) — marca o passo macro do plano como concluído antes de seguir para o próximo.

Isso mantém a execução disciplinada e visível: enquanto roda, um painel Rich atualiza o status das subtarefas no terminal.

explorer — subagent read-only

Agente rápido e read-only para pesquisa de codebase. Como roda em contexto isolado, retorna apenas o resumo ao agente que o invocou. É registrado como mode: subagent, o que significa:

Invocação Disponível?
/explorer ... (slash) ❌ (bloqueado com warning)
@explorer ... (mention)
delegate_task(..., agent_name="explorer") ✅ (uso padrão)

Usa por padrão o modelo pequeno (small_model_ref), que costuma ser Haiku — o factory respeita small_model=True no spec.

Agentes customizados

Fora do catálogo nativo, qualquer arquivo Markdown em .agents/agents/ vira um agente customizado com seu próprio modelo, prompt e ferramentas. Eles seguem um caminho separado de instanciação (create_custom_agent_instance) e podem ser primary ou subagent.

Próximo passo

  • Agentes Customizados — Criar seus próprios agentes com .agents/agents/
  • Planejamento — O fluxo completo de plan mode (manual e autônomo)
  • Subagentes — Como registrar e invocar subagentes via delegate_task