Curso / Lição 02
Lição 02 · O sistema com que aprendemos

Engenharia reversa do Hermes

O Hermes Agent é o "agente de IA auto-aperfeiçoável" da Nous Research — uma base de código Python de mais de um milhão de linhas. Você não pode fundir o que não entende, então a fusão começou com um mapa. Esta lição é o núcleo desse mapa: o que o Hermes é, a única ideia estrutural que o torna extensível, e o ciclo fechado de aprendizado que se tornou a razão inteira da fusão.

Leia primeiro (fonte primária)
docs/hermes-complete-map.md — o mapa de engenharia reversa do Hermes

Esta lição destila esse mapa (§1, §5, §6) + os repos satélites. Todos os números têm fonte (rodapé). Por que importa pra missão: é o degrau que decide o que do Hermes vale clonar para dentro do Alembic — assunto da Lição 03.

Objetivos desta lição
  • Descrever o que o Hermes é: um núcleo de agente único rodando em várias superfícies (CLI, gateway, TUI, desktop).
  • Explicar as duas restrições de design das quais tudo decorre — cache de prompt sagrado e cintura estreita.
  • Reconhecer o linchpin portável: tools que se auto-registram no import via registry.register(...).
  • Separar os três números (87 / 30 / 64) e dizer o que cada um mede de fato.
  • Traçar o ciclo fechado de aprendizado (§1.10) peça a peça — e por que ele é um fork.
0
≈ arquivos Python
~1,18M
linhas de código
0
arquivos de tool em tools/
0
chaves de toolset

Realidade de escala: o mapa não é uma leitura linha-a-linha de todas as 1,18M LOC — ele aprofunda as prioridades e cataloga a cauda longa, com a fronteira de cobertura declarada explicitamente. Fonte: docs/hermes-complete-map.md §1, §6.

01 · O que é o Hermes

Antes de mapear peças, fixe a forma do todo. Em uma frase: o Hermes é um agente de IA pessoal que roda o mesmo núcleo de agente em várias superfícies — uma CLI, um gateway de mensagens (Telegram, Discord, Slack e ~20 outras plataformas), uma TUI Ink/React e um app desktop Electron. Construído pela Nous Research, licença MIT.

A analogia: um cérebro, muitas bocas

Pense num atendente que é a mesma pessoa esteja você falando com ele pelo telefone, pelo balcão ou por carta. O "cérebro" (o núcleo de agente) é um só; o que muda é a superfície por onde você chega até ele. É esse desenho — núcleo único, muitas bordas — que vai ecoar no Alembic.

UM NÚCLEO, VÁRIAS SUPERFÍCIES · o mesmo agente atrás de CLI, gateway, TUI e desktop
CLI gateway de mensagensTelegram/Discord/Slack… TUI (Ink/React) desktop (Electron) núcleo de agente (um só) cintura estreita · tools enviadas a cada chamada providers de modelo (Portal/OpenRouter/proxy) 6 backends de terminal (1 ABC)

Seus diferenciais de destaque, nas próprias palavras dele:

O "roda em qualquer lugar" tem a mesma estrutura do núcleo único: uma interface abstrata (ABC) esconde seis implementações de terminal. O agente fala com a ABC; trocar de execução (local → Docker → nuvem) não muda o código que a usa.

UMA ABC, SEIS BACKENDS · o agente não sabe onde o comando roda
Terminal (ABC) uma interface · run(cmd) local Docker SSH Singularity Modal Daytona ↗ trocar de backend não muda o código do agente — é o mesmo padrão "núcleo único, muitas implementações"

02 · As duas restrições de design das quais tudo decorre

Quase toda decisão estranha no Hermes faz sentido quando você conhece duas restrições. Elas não são detalhes — são o motivo de o sistema ter a forma que tem. Veja as duas primeiro em linguagem simples, depois no nível preciso.

1 · Não mexa no que já está em cache. Uma conversa longa é cara; o sistema guarda em cache tudo o que já foi dito e reaproveita a cada turno. Se você alterar o passado no meio do caminho, joga o cache fora e paga tudo de novo.

2 · O centro é pequeno de propósito. Toda ferramenta do centro viaja em toda chamada ao modelo — então pôr coisa nova lá custa caro pra sempre. Capacidade nova entra pela borda (um comando + skill, ou um plugin), não pelo miolo.
As duas restrições, no detalhe

1 · O cache de prompt por conversa é sagrado. Uma conversa longa reusa um prefixo em cache a cada turno; qualquer coisa que mute o contexto passado ou reconstrua o system prompt no meio da conversa invalida o cache e multiplica o custo. A única exceção sancionada é compressão de contexto. 2 · O núcleo é uma cintura estreita; capacidade vive nas bordas. Toda tool de modelo é enviada em toda chamada de API, então a barra para uma nova tool de núcleo é alta — nova capacidade chega como um comando de CLI + skill ou um plugin, não como superfície de núcleo.

POR QUE O CACHE É SAGRADO · turno estável (prefixo reusado) vs turno que muta o passado
turno estável (✓) prefixo em cache (reusado) + novo turno custo: só o delta · barato muta o passado (✗) prefixo alterado → cache morto tudo precisa recomputar custo: a conversa inteira · caro A exceção sancionada é a compressão de contexto — tudo o mais que muta o passado é proibido.

Note a rima com a Lição 1: Hermes e Alembic chegaram independentemente a "uma cintura estreita + prompt estável de cache". Esse instinto compartilhado é exatamente por que a fusão compõe em vez de brigar — e é o fio que puxamos na Lição 3.

03 · O linchpin: a arquitetura de auto-registro de tools

Esta é a ideia estrutural mais importante e mais portátil do Hermes — a peça que mais vale clonar. Em uma linha: as tools se auto-registram no momento do import; nada mantém uma lista central de imports.

A analogia: cada funcionário se apresenta ao chegar

Imagine uma recepção onde, em vez de o gerente manter uma lista de quem trabalha lá, cada funcionário assina o livro de ponto ao entrar. Para saber quem está no prédio, basta abrir a porta de cada sala — ninguém precisa atualizar uma lista mestre. É exatamente assim que as tools entram no registro do Hermes.

No concreto: cada arquivo de tool chama registry.register(...) no nível de módulo; um passo de descoberta faz glob no diretório e importa cada arquivo, e o side-effect do import popula o registro. Acompanhe a pilha de baixo para cima:

A PILHA DE REGISTRO DE TOOLS · entry points no topo, registry sem deps embaixo
run_agent.py · cli.py · batch_runner.py entry points disparam a descoberta model_tools.py importa o registry + roda discover_builtin_tools() tools/*.py  — 87 arquivos cada um chama registry.register(...) no import (side-effect) tools/registry.py sem deps — possui schema, dispatch, disponibilidade, limites
Lista central de imports (o jeito frágil): um arquivo único importa cada tool à mão. Adicionar uma tool = editar esse arquivo. Esquecer de editá-lo = a tool some sem erro. É um ponto único de manutenção e de bug.
Auto-registro no import (o jeito do Hermes): a tool se anuncia sozinha; a descoberta acha o arquivo por glob. Adicionar uma tool = criar o arquivo. Nada mais precisa saber dela de antemão — é o que torna o catálogo extensível.
Preveja antes de continuar
A auto-descoberta importa cada arquivo em tools/*.py e cada um chama registry.register(...). Logo, todas as 87 tools ficam disponíveis para o agente conversar, certo? Pense antes de revelar.
Não. Registrar ≠ expor. A descoberta registra o schema das 87, mas a tool só é oferecida a um agente se o nome dela aparecer num toolset em toolsets.py (são 30 chaves). Vários dos 87 arquivos são infra — registry.py, scanners de segurança, helpers — e nem são tools voltadas ao agente. Se você respondeu "sim, 87", caiu na confusão mais comum do mapa — desfeita na seção 05.

Por que o registry.py fica embaixo da pilha, sem dependências? Porque ele é o contrato: tudo o mais depende dele, e ele não depende de nada. São quatro responsabilidades concentradas num único lugar — é isso que permite que cada tool seja só um arquivo que se anuncia.

O QUE O registry.py POSSUI · quatro responsabilidades, zero dependências
schemaforma de cada tool dispatchchama a tool certa disponibilidadeo que está ligado limitesquotas/guardas zero dependências externas → todo o resto pode depender dele sem ciclos. É o "balcão" onde as tools se registram.

04 · O catálogo de tools (mapa por toolset)

Como o Hermes empacota capacidade? Pelas chaves de toolset de toolsets.py — bundles nomeados que uma plataforma herda. O mapa cita explicitamente browser, memory, skills e web como exemplos dessas chaves; somados aos diferenciais que nomeiam capacidades concretas (transcrição, subagentes, busca de sessão), eles desenham o catálogo. Use o mapa abaixo como índice — cada caixa é uma família, com as portagens que cada uma rende ao Alembic na Lição 03.

CATÁLOGO DE CAPACIDADES DO HERMES · famílias de toolset → o que cada uma faz
tools/registry.py 87 arquivos · 30 chaves de toolset browserdirige um navegador real webbusca + extração de páginas memoryMEMORY.md / USER.md skillscriar/atualizar skills subagentesforks isolados em paralelo transcriçãoáudio-memo → texto busca de sessão (FTS5)recall entre sessões + resumo LLM + ~26 outras chavesa cauda longa do toolsets.py

As chaves browser, memory, skills e web são nomeadas explicitamente no mapa (§1.9); transcrição, subagentes e busca de sessão FTS5 vêm dos diferenciais de §1.1. As "+ ~26 outras" são o restante das 30 chaves de toolset — [uncertain] o mapa não lista as 30 por nome, então só rotulamos as citadas.

Família (toolset)O que fazVira no Alembic (Lição 03)
memoryLê/escreve a memória durável (MEMORY.md / USER.md).MemoryStore (Lição 07)
skillsCria e atualiza skills do agente.SkillStore (Lição 12)
webBusca e extrai conteúdo de páginas.webSearch / webExtract (Lição 11)
transcriçãoConverte áudio-memo em texto.transcribe / analyzeImage (Lição 13)

05 · 87 / 30 / 64 — três números, três significados

Há uma nuance crucial em que o mapa insiste — e é a fonte de um número que é mal-citado. A auto-descoberta registra o schema de uma tool, mas a tool só é exposta a um agente se seu nome aparecer num toolset. Então três contagens diferentes descrevem três coisas diferentes — não as colapse num número só.

FUNIL DE EXPOSIÇÃO · de 87 arquivos a ~64 tools voltadas ao agente
87 arquivos em tools/*.py filtra por 30 chaves de toolset (expõem) resulta em ~64 tools voltadas ao agente (orange-book) 87 inclui infra (registry, scanners, helpers) — por isso o número exposto é menor, não maior. As três medidas são reais; um mapa fiel declara as três em vez de escolher a mais redonda.
ContagemO que realmente mede
87arquivos de tool em tools/*.py (verificado ls | wc -l). Inclui arquivos de infra como registry.py, scanners de segurança e helpers compartilhados — nem todos são tools voltadas ao agente.
30chaves de toolset em toolsets.py (browser, memory, skills, web, …) — os bundles nomeados que uma plataforma herda.
"64 tools"O número que o material de aprendizado orange-book cita para tools voltadas ao agente. Mantemos a distinção arquivo/tool explícita em vez de colapsar os três num número só.
Por que isso importa para o mapa. "Quantas tools o Hermes tem?" não tem resposta única — depende se você conta arquivos, chaves de toolset ou tools expostas. Uma engenharia reversa fiel declara as três e o que cada uma mede, em vez de escolher a mais redonda.

Sinta o funil você mesmo

Arraste para ver como a fração exposta muda. Mesmo registrando todos os arquivos, só os que estão num toolset chegam ao agente — a barra mostra a fração que de fato aparece para ele:

0 arquivos registrados ───────────────────────────────── 87 64 expostas A diferença entre a barra e o total são os arquivos de infra/helper que existem em tools/ mas nunca viram tool de agente.

Resolva você: "essa tool chega ao agente?"

Você já viu a regra (registrar ≠ expor). Agora aplique-a passo a passo a um caso concreto — depois um exercício é seu. Recuperar o procedimento (não só ver o veredito) é o que fixa de verdade.

Exemplo resolvido · uma nova tool browse_pdf.py está disponível para o agente?
1
Existe o arquivo? Você criou tools/browse_pdf.py. O passo de descoberta faz glob em tools/*.py e o importa — então o import roda.
2
Ele se registra? O arquivo chama registry.register(...) no nível de módulo. Logo o schema entra no registry (engrossa a contagem dos 87 arquivos).
3
O nome está num toolset? Aqui está o pulo: registrar não basta. Procure o nome da tool em toolsets.py. Se ele não está em nenhuma das 30 chaves → não é exposta, o agente não a vê.
4
Veredito. Registrada, sim; exposta, só se estiver num toolset. Para o agente usá-la, você adiciona o nome a uma chave de toolset (ex.: browser ou web).
Agora você: o arquivo tools/registry.py aparece nos 87. Um agente pode chamar registry como uma tool? Decida antes de revelar.
Não. registry.py é infra — ele é o balcão de registro, não uma tool voltada ao agente, e seu nome não está em nenhum toolset. Por isso ele conta nos 87 arquivos mas não nas ~64 tools do orange-book. Dica: o procedimento é sempre o mesmo — arquivo → registra → está num toolset? — e é exatamente a diferença entre 87 e 64.
A TRILHA DE UMA TOOL · do arquivo ao agente (browse_pdf.py vs registry.py)
tools/*.pyglob + import registry.register()schema registrado (87) nome numtoolset? SIM ✓ chega ao agenteex.: browse_pdf (≈64) NÃO ✗ para aqui · ex.: registry.py (infra)

06 · O ciclo fechado de aprendizado — o "auto-aperfeiçoável", mecanicamente (§1.10)

A propriedade de destaque é concreta no código, não marketing. Após um turno, o agente pode forkar a si mesmo para revisar o que acabou de acontecer e decidir se algo vale a pena lembrar — e as escritas caem em stores duráveis que a próxima sessão lê.

A analogia: um estagiário que toma notas depois da reunião

Pense num estagiário que, depois que a reunião acaba, relê a ata e anota no caderno da equipe o que valeu aprender — sem nunca interromper a reunião em si. A reunião (a conversa viva) segue intocada; as notas (memória durável) só são lidas na próxima reunião. É literalmente assim que o Hermes "se aperfeiçoa": de forma diferida, num fork.

O CICLO FECHADO · um turno forka um revisor que escreve em stores duráveis (a conversa NUNCA é tocada)
um turno do usuário run_conversation() fork de revisão de fundo thread daemon, AIAgent forkado whitelist: só memória + skill stores duráveis MEMORY.md / USER.md + skills criadas pelo agente curador ciclo de vida a próxima sessão carrega o snapshot atualizado — a conversa principal + cache de prompt NUNCA são tocados

As peças, cada uma concreta na fonte:

Por que "congelar no início da sessão"? Porque a memória mora dentro do system prompt — e o system prompt é justamente o prefixo que o cache reusa. Veja onde o snapshot fica e por que ele tem de ficar imóvel durante a sessão:

ONDE A MEMÓRIA MORA · o tier volatile fica DENTRO do prefixo em cache
prefixo em cache (imóvel durante a sessão) instruções estáveisregras do sistema tier volatilesnapshot MEMORY.md + USER.mdcongelado no início da sessão turno correntefora do cache (muda) Mexer no tier volatile no meio da sessão = mexer no prefixo = cache morto. Por isso o snapshot é frozen, e a memória nova do revisor só é lida quando a PRÓXIMA sessão monta um prefixo novo.

E como o fork escreve memória sem invalidar o cache que ele próprio usa? Ele herda o mesmo prefixo: o revisor reaproveita o system prompt em cache do pai, então acerta o mesmo cache e suas escritas vão para o disco, não para a conversa.

O FORK COMPARTILHA O CACHE · pai e revisor leem o mesmo prefixo; só o revisor escreve no disco
prefixo em cachelido pelos dois, igual conversa principalsegue · NÃO escreve memória fork de revisãoescreve no disco (durável)

O ciclo de vida do curador, como autômato

O curador nunca deleta — ele move skills entre estados. Acompanhe as transições; repare que dois estados são protegidos (skills pinadas e as não criadas pelo agente nunca entram no ciclo):

CICLO DE VIDA DA SKILL · active → stale → archived (nunca deleta; pinadas isentas)
active em uso recente stale sem uso por um tempo archived guardada, não deletada sem uso → persiste → usar de novo → reativa para active fora do ciclo: pinadas + não created_by:"agent"
A única frase para levar à Lição 3

Para o Alembic, este ciclo inteiro — fork-após-turno → auto-revisão sob uma whitelist só de memória/skill → escrever em stores duráveis → ciclo de vida do curador → próxima sessão lê o snapshot atualizado — é o CLONE conceitual de maior valor, e compõe limpo com o pipeline de validador/portão existente do Alembic.

07 · A disciplina do mini-loop (§5)

O repo hermes-mini-loop é uma implementação de referência mínima da mesma ideia, e declara a disciplina como três regras — as regras que impedem um ciclo de auto-aperfeiçoamento de se afogar no próprio ruído. Sem elas, um loop que aprende de tudo rapidamente se envenena.

RegraO que previne
Aprender só de vitórias (score ≥ 0.7)Sedimentar lições de turnos falhos ou de baixa confiança. Só sucessos validados viram memória durável.
Reforçar, não duplicarRever o mesmo fato deve fortalecer a entrada existente, não anexar uma quase-cópia que incha o store limitado.
Recombinar átomos provadosNovas skills são compostas de peças já validadas em vez de inventadas do zero — melhoria por recombinação.
FLUXOGRAMA · um turno termina — vira memória durável? (o piso 0.7 decide)
um turno termina score ≥ 0.7? (vitória validada) NÃO descarta não aprende SIM fato já existe na memória? SIM reforça a entrada não duplica NÃO anexa nova entrada à memória durável

Segure o limite 0.7 e o "reforçar-não-duplicar" — ambos reaparecem, portados literalmente, como o portão padrão e o comportamento de dedup do ciclo do Alembic na Lição 4.

08 · Confusões comuns

Três armadilhas que aparecem sempre que alguém descreve o Hermes de memória. Cada uma vira uma das questões da revisão — guarde-as.

"O Hermes é um gateway de modelo." O gateway dele é um gateway de mensagens (Telegram/Discord/…), não de modelo. O papel de provedor de modelo é distribuído por providers/ + plugins/model-providers/ + um proxy local compatível com OpenAI — um subsistema inteiramente diferente.
"O revisor de fundo muda a conversa atual." Não — é um fork. Ele escreve em stores duráveis; a conversa viva e seu cache de prompt nunca são mutados. "Auto-aperfeiçoável" é literal mas diferido: a melhoria aparece no load da próxima sessão.
"87 = o número de tools." 87 é o número de arquivos em tools/. A exposição é controlada pelas 30 chaves de toolset; o orange-book conta ~64 tools voltadas ao agente. Três números, três significados.

Como isso se encaixa

Esta lição não é um beco sem saída — é o primeiro elo de uma cadeia que termina em código rodando dentro do Alembic. O método de engenharia reversa (esta lição) produz dois mapas; os mapas alimentam a matriz de fusão; a matriz decide o que clonar; e o que foi clonado virou os subsistemas de @alembic/hermes que você vai abrir um a um nas Lições 07–13. Siga a cadeia — clique para iluminar cada degrau.

O LUGAR DESTA LIÇÃO NO PIPELINE · método → mapas → matriz → subsistemas embarcados
degrau 0/5
o método (aqui) eng. reversa · Lição 02 + aprofundado na 20 mapa do Hermes hermes-complete-map.md mapa do Alembic alembic-complete-map.md matriz de fusão Lição 03 · framework 21 CLONE @alembic/hermes MemoryStore · reviewAndLearn UsageStore · ClarifyGateway web · SkillStore · mídia Lições 07–13 prova: pnpm --filter @alembic/hermes test o subsistema embarcado, verde Cada degrau só existe porque o anterior aconteceu: sem o método, não há mapa; sem mapa fiel, a matriz erra o alvo.

Os elos concretos — cada um leva à lição que aprofunda aquele degrau:

Onde você está na metodologia

No motor todo do Alembic (contratos → adapters → council → swarm → harness → gates → loop de aprendizado), esta lição vive antes do código: é a fase LEARN do loop-engineering aplicada a um sistema externo. Você está mapeando um agente alheio para decidir, com prova, o que merece entrar no nosso. O resultado dessa fase é exatamente o que as Lições 07–13 mostram já rodando. Para ver o motor inteiro de uma vez, comece pelo hub do curso. [uncertain] não existe um mapa interativo ../metodologia.html no diretório course/ (só index.html e galeria.html) — então apontamos para o hub real e para a Lição 20, que é a lição-método do curso.

Na prática

Mapa é teoria; o subsistema embarcado é executável. Aqui você inspeciona com as próprias mãos o que esta lição mapeou — primeiro provando que o subsistema clonado passa nos testes, depois vendo o loop de aprendizado escrever e ler de uma store durável real. Tudo offline, $0, determinístico.

1 · Prove o subsistema embarcado

O ciclo fechado de aprendizado da seção 06 não ficou no papel — virou o pacote @alembic/hermes. Rode a suíte dele:

# a partir da raiz do repositório
pnpm --filter @alembic/hermes test
# exercita os subsistemas que este mapa decidiu clonar:
#   memory/  learning/  curator/  clarify/  web/  skills/  media/
# saída esperada (vitest):
#   ✓ src/memory/memory-store.test.ts
#   ✓ src/learning/review.test.ts
#   ✓ src/curator/curator.test.ts
#   Test Files  N passed (N)

Os arquivos de teste existem em packages/hermes/src/<subsistema>/*.test.ts (verificado). [uncertain] o número exato de testes/arquivos varia com a versão do repo — por isso não fixamos um total aqui; rode e leia a linha Test Files.

2 · Veja o loop de aprendizado escrever e ler

A peça-âncora desta lição é o ciclo fechado: escrever em stores duráveis que a próxima sessão lê. O CLI expõe exatamente essas stores via alembic memory — cinco substores append-only (episodic, semantic, procedural, decision, transcript). Anexe um aprendizado e depois liste-o:

# anexa um registro à store "semantic" (offline, append-only JSONL)
alembic memory semantic add --agent cli --record '{"text":"87 = arquivos, 30 = chaves de toolset"}'
# saída esperada:
#   memory semantic: appended <id> (agent cli)
#     <dataDir>/memory/semantic.jsonl

# lê de volta — newest-first — o que a "próxima sessão" enxergaria
alembic memory semantic list --agent cli
# saída esperada:
#   memory semantic: 1 record(s) under <dataDir>/memory/semantic.jsonl
#     <id> [agent cli] at <timestamp>

Sinopse real (de apps/cli/src/args.ts + index.ts): alembic memory <substore> <add|list> [--agent <id>] [--dir <path>] [--record <json>] [--limit <n>]. add exige --record <json>; list aceita --agent/--limit; a store padrão é <dataDir>/memory/<substore>.jsonl. É o mesmo "MemoryStore" da Lição 07, pela borda da CLI.

Experimente · do clone ao registro durável, em 4 passos
1
Entre no repo e instale. cd no clone do Alembic e rode pnpm install (uma vez). Os comandos abaixo rodam da raiz.
2
Prove o subsistema. Rode pnpm --filter @alembic/hermes test e confirme a linha Test Files … passed — é o ciclo da seção 06 já embarcado e verde.
3
Escreva no loop. Rode o alembic memory semantic add … acima. Procure na saída o appended <id> e o caminho do arquivo semantic.jsonl.
4
Leia o que ficou. Rode alembic memory semantic list e veja o registro voltar, newest-first — é literalmente o "a próxima sessão carrega o snapshot" da seção 06, do disco. Abra o semantic.jsonl para ver a linha JSON crua que você acabou de escrever.
Conecte de volta: você acabou de exercitar, pela borda, o mesmo CLONE conceitual que a seção 06 nomeou como "o de maior valor". O mapa apontou; o pacote entregou; o CLI deixou você tocar. Esse é o arco inteiro desta lição em quatro comandos.

Fixe os conceitos (flashcards)

Clique pra virar. Tente lembrar a resposta antes de virar — recuperação ativa fixa mais que reler.

Forma
O que é o Hermes, em uma frase?
clique pra virar ↻
Resposta
Um agente pessoal com um único núcleo rodando em várias superfícies: CLI, gateway de mensagens, TUI Ink/React e desktop Electron.
Restrições
As duas restrições de design?
clique pra virar ↻
Resposta
1) cache de prompt por conversa é sagrado (não mutar o passado); 2) cintura estreita — toda tool viaja em toda chamada, capacidade nova entra pela borda.
Linchpin
Como as tools entram no registro?
clique pra virar ↻
Resposta
Auto-registro: cada arquivo chama registry.register(...) no import; a descoberta faz glob e importa, e o side-effect popula o registro. Nada mantém lista central.
§1.10
Por que o revisor de fundo é um fork?
clique pra virar ↻
Resposta
Para escrever em memória/skills duráveis sem tocar a conversa viva nem seu cache. Herda o prompt em cache; a melhoria aparece só na próxima sessão.

Revisão cumulativa — recupere de memória

Antes de clicar: responda de cabeça. As quatro opções têm o mesmo tamanho de propósito — sem pista pela forma.

1. No Hermes, qual é a relação entre o 87 e o 30?
Correto: b. A auto-descoberta registra o schema de uma tool (87 arquivos, muitos deles infra/helpers), mas uma tool só é exposta se seu nome está num toolset (30 chaves). As "64 tools" do orange-book são ainda um terceiro número — tools voltadas ao agente. a inverte os papéis: 87 são arquivos, não toolsets, e não contêm 30 cada. c confunde dois conceitos distintos — registrar (87) e expor (30) são passos diferentes do mesmo pipeline. d troca a direção: a descoberta importa os 87 arquivos; as 30 chaves filtram o que chega ao agente, não o contrário.
2. Por que a revisão de fundo roda num agente forkado numa thread daemon, com uma whitelist de tools só de memória/skill?
Correto: d. A restrição #1 (o cache de prompt é sagrado) proíbe mutar a conversa viva. Um fork herda o prompt em cache literalmente, escreve em stores duráveis e deixa o turno principal intocado. a inventa uma razão de hardware — o fork é sobre isolamento de estado, não sobre GPU. b é falso sobre Python (I/O não exige threads) e não explica o fork. c contradiz a whitelist: o revisor só pode mexer em memória/skill, justamente para não falar com o usuário nem agir na conversa.
3. A regra do mini-loop "aprender só de vitórias (score ≥ 0.7)" existe para prevenir o quê?
Correto: c. Um ciclo de auto-aperfeiçoamento que aprende de tudo rapidamente se envenena. O piso 0.7 (mais "reforçar, não duplicar" e "recombinar átomos provados") mantém só vitórias validadas — e esse limite exato é portado no portão do Alembic na Lição 4. a confunde a regra com um limite de armazenamento; é o "reforçar-não-duplicar" que cuida do tamanho do store, não o piso de score. b descreve as cutucadas de skill (_iters_since_skill), outra parte do loop. d é trabalho do curador (ciclo de vida das skills), não do piso de aprendizado.
💬 Travou em algo? Eu sou seu professor neste curso — pergunte. "Por que registrar e expor são passos separados?", "O que o curador faz com uma skill pinada?", "Como o piso 0.7 vira código no Alembic?". É só dizer.