MÓDULO 3.3

🪝 Hooks Customizados & ReasoningBank

Implementar hooks próprios e mergulhar no ReasoningBank pipeline.

6
Tópicos
75
Minutos
Avançado
Nível
Prático
Tipo
1

🪝 Anatomia de um hook

Um hook em Ruflo é um interceptor de eventos no lifecycle de tools, sessões e tasks. Sua estrutura mínima: name, description, handler async e lifecycle stage. Registra-se no HookRegistry.

🔧Anatomia básica

interface Hook {
  name: string;
  description: string;
  lifecycle: 'pre-edit' | 'post-edit' | 'pre-task' | ...;
  handler: (ctx: HookContext) => Promise<HookResult>;
}

📊Categorias disponíveis

  • Core (6) — pre/post edit, command, task
  • Session (4) — start, end, restore, notify
  • Intelligence (5) — route, explain, pretrain, build-agents, transfer
  • Agent Teams (2) — teammate-idle, task-completed
2

🛠️ Implementando custom hook

Do scaffold ao registro: vamos criar um hook que loga toda edição em arquivos sensíveis (auth, payment, etc).

🛠️Exemplo TypeScript

export const sensitiveFileGuard: Hook = {
  name: 'sensitive-file-guard',
  description: 'Audita edits em arquivos sensíveis',
  lifecycle: 'pre-edit',
  handler: async (ctx) => {
    const sensitivePatterns = [/auth/, /payment/, /token/];
    if (sensitivePatterns.some(p => p.test(ctx.filePath))) {
      await audit.log({ action: 'edit', file: ctx.filePath });
    }
    return { proceed: true };
  }
};

💡Registro

Registre via HookRegistry.register(sensitiveFileGuard). O hook passa a ser executado a cada pre-edit. Para desabilitar temporariamente, HookRegistry.disable('sensitive-file-guard').

3

🛤️ Trajetórias

Trajetórias são sequências de (state, action, reward, outcome). São a matéria-prima do ReasoningBank — o que permite o agente aprender com sua própria experiência.

1

State

Snapshot do contexto

Arquivo, função, dependências relevantes, prompt do usuário, histórico recente.

2

Action

Decisão tomada

Qual tool foi chamada, parâmetros usados, qual abordagem foi escolhida (e qual rejeitada).

3

Reward & Outcome

Feedback

Testes passaram? Build verde? User aprovou? O reward é numérico, o outcome qualitativo.

4

🔄 RETRIEVE — busca via HNSW

A primeira fase do ReasoningBank é recuperar padrões relevantes. Usa HNSW (Hierarchical Navigable Small Worlds) para buscar top-K vizinhos mais próximos em milissegundos, mesmo entre milhões de embeddings.

🔄Como funciona

  • Embedding do contexto atual via ONNX MiniLM (384 dim)
  • HNSW search retorna top-K (default: 5) mais similares
  • Filtragem por verdict (success/failure) e recência
  • 150x-12.500x mais rápido que busca linear

📊Numeros reais

  • 1k embeddings → ~150x speedup vs linear
  • 100k embeddings → ~5.000x speedup
  • 1M embeddings → ~12.500x speedup
5

⚖️ JUDGE & DISTILL

Após RETRIEVE, o pipeline JULGA os padrões recuperados (success/failure/partial) e DESTILA learnings em uma representação mais compacta via LoRA.

✓ JUDGE — verdicts

  • success — testes verdes, user aprovou
  • failure — testes falharam, rollback
  • partial — funcionou em alguns casos
  • uncertain — sem signal claro

✗ Sem JUDGE

  • Aprende padrões ruins junto com os bons
  • Repete erros sistematicamente
  • Memória vira lixo
  • Confiança decresce com uso

🎚️DISTILL via LoRA

Após JUDGE, padrões aprovados viram training data para um adaptador LoRA. Em poucos minutos, o expert correspondente aprende o novo comportamento sem retraining completo.

6

🧠 CONSOLIDATE

Etapa final: consolidar o aprendizado sem destruir conhecimento prévio. EWC++ entra aqui — calcula importância dos pesos antigos e protege os críticos durante o update.

🧠O ciclo completo do RB

  1. RETRIEVE — HNSW busca top-K padrões
  2. JUDGE — verdicts classificam o que aprender
  3. DISTILL — LoRA extrai learnings em adaptador leve
  4. CONSOLIDATE — EWC++ aplica sem catastrophic forgetting
  5. PERSIST — AgentDB armazena para próxima sessão

💡Resultado prático

Após semanas de uso, seu Ruflo conhece seus padrões pessoais: estilo de testes preferido, convenções de naming, quais bibliotecas você gosta. Isso vem do ciclo RETRIEVE → JUDGE → DISTILL → CONSOLIDATE rodando em background.

📋Resumo do Módulo

Anatomia hook — name, description, lifecycle, handler async
Custom hook — Scaffold, implementação, registro via HookRegistry
Trajetórias — state, action, reward, outcome
RETRIEVE — HNSW top-K, 150x-12.500x speedup
JUDGE & DISTILL — Verdicts + LoRA extraction
CONSOLIDATE — EWC++ previne catastrophic forgetting

Próximo Módulo:

3.4 - Plugin Development: scaffold ao publish em IPFS