Skip to content
Back to skills

Handover

ASecurity

Prepara a saída LIMPA de uma sessão que inchou com uma TAREFA AINDA NÃO CONCLUÍDA, para um /reset sem perder o fio. Escreve UM documento enxuto e SELETIVO em documentacao/ (só o que git+código+memória NÃO contam - porquê das decisões, estado pendente, próximo passo exato, riscos), atualiza o breadcrumb na memória (linha RETOMADA + 1 project_*) e libera o /reset. O handover declara seu MODO DE RETOMADA - "rapida" (próximo passo não toca runtime - decisão, edição, análise; a retomada confia no ...

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 17, 2026
ai-agentspythongosqlgitapibackend

Works with

  • claude code
  • terminal
  • api

Security analysis

A100/100

Scanned October 17, 2026

npx -y skills add thiagobluhm/o1mem --skill handover --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Handover?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Handover
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thiagobluhm-handover/badge)](https://www.skillsdirectory.com/skills/thiagobluhm-handover)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: handover
description: Prepara a saída LIMPA de uma sessão que inchou com uma TAREFA AINDA NÃO CONCLUÍDA, para um /reset sem perder o fio. Escreve UM documento enxuto e SELETIVO em documentacao/ (só o que git+código+memória NÃO contam - porquê das decisões, estado pendente, próximo passo exato, riscos), atualiza o breadcrumb na memória (linha RETOMADA + 1 project_*) e libera o /reset. O handover declara seu MODO DE RETOMADA - "rapida" (próximo passo não toca runtime - decisão, edição, análise; a retomada confia no escrito e fecha com "PRONTO E OPERANTE!") ou "verificada" (próximo passo MEXE NO RUNTIME - gate contra backend de pé, deploy de diff, env flag, store/processo; o handover inclui "Caveat de estado vivo" e a retomada REVERIFICA o runtime ANTES de afirmar ou agir, porque a memória diz o que era verdade quando foi escrita, não o estado presente). Use para qualquer saída de sessão inacabada. NÃO use se a tarefa está concluída e verificada (aí basta memória).
---

Você vai preparar a **saída limpa** de uma sessão: destilar o estado de uma tarefa inacabada em artefatos duráveis para que uma sessão NOVA retome sem reexplicação. Esta skill tem **um fluxo com dois modos de retomada** — a decisão do modo é interna (Passo 0.5) e fica **gravada no próprio handover**, não na sua memória.

## Princípio central: as 3 camadas têm funções diferentes

| Camada | Carrega quando? | Função |
|---|---|---|
| **Resume** | usuário retoma *esta* conversa | continua tudo — mas morre no `/reset` |
| **Memória** (`MEMORY.md` + `memory/*.md`) | **toda** sessão nova, automático | breadcrumb: fatos duráveis + "onde estamos + próximo passo + `[[link]]`" |
| **Handover** (`documentacao/HANDOVER_*.md`) | só quando alguém o **abre** | arquivo: detalhe profundo que não cabe na memória — inclusive o MODO de retomada |

> **A memória é o ÍNDICE; o handover é o ARQUIVO.** A memória garante que a próxima sessão saiba qual handover abrir. Detalhe mora só no handover. Nunca duplique.

### No ecossistema Hermes

O Hermes tem memória persistente nativa (`memory` tool) e busca FTS5 em sessões passadas (`session_search`). O `MEMORY.md` do projeto **complementa** essa memória — ele é o índice que aponta para handovers, não substitui a memória do Hermes. Se o projeto não tiver um `MEMORY.md`, crie um. Se preferir usar a `memory` tool do Hermes como índice, faça o breadcrumb lá — mas o handover sempre é um arquivo em disco (`documentacao/HANDOVER_*.md`), porque a memória do Hermes é compacta por design e não cabe um handover inteiro nela.

## Segundo princípio: nunca afirme runtime pela memória

O handover diz o que era verdade **quando foi escrito**. O processo pode ter sido morto, reiniciado com código velho, o env pode ter mudado. Por isso existe o modo `verificada` — e por isso a promoção de modo na retomada (Passo 4) é sempre permitida, nunca o rebaixamento.

## Passo 0 — TRAVA DE VALOR (não pule)

Handover **só vale a pena** se a tarefa tem pelo menos UM de:
1. **estado pendente que importa** (algo meio-feito, plano não executado);
2. **raciocínio caro de reconstruir** (investigação, hipóteses, trade-off decidido);
3. **plano de vários passos ainda não executado**.

Se a tarefa está **concluída e verificada** e o fato durável cabe na memória → **NÃO escreva handover**. Grave só a memória (via `memory` tool ou `MEMORY.md`) e diga que basta.

## Passo 0.5 — DECIDA O MODO DE RETOMADA

Pergunte: **o próximo passo da retomada toca o runtime?**

- **NÃO toca** (decisão, edição de código/doc, análise, escrita — algo que a próxima sessão faz "do zero"): modo **`rapida`**. A retomada confia no escrito e não verifica nada.
- **TOCA** (rodar gate contra backend de pé, deployar um diff, conferir env flag, estado de store/cache/processo): modo **`verificada`**. O handover DEVE incluir a seção "Caveat de estado vivo" e a retomada a EXECUTA.

**Na dúvida → `verificada`.** Verificar a mais nunca quebrou nada; confiar cego já quebrou.

O modo escolhido vai na **primeira linha do handover** (ver template). É o artefato que carrega o protocolo — a retomada não depende de lembrar qual decisão foi tomada.

## Passo 1 — Escreva o handover (SELETIVO, não dump)

Arquivo: `documentacao/HANDOVER_<slug-da-tarefa>_<YYYYMMDD>.md`.

Crie o diretório `documentacao/` no cwd do projeto se não existir (use `terminal` com `mkdir -p documentacao/`).

**Regra de ouro:** só entra o que **git + código + memória NÃO contam sozinhos**.
- ❌ NÃO liste "arquivos/funções tocados" como corpo — `git diff` já mostra. Aponte `arquivo:linha` só para achar rápido.
- ❌ NÃO cole blocos de código — aponte a localização.
- ✅ Entra o **porquê**, a **decisão + alternativa descartada**, o **que falta**, o **próximo passo exato**, os **riscos/colaterais**.

Use `write_file` para criar o arquivo do handover.

Template:
```markdown
# HANDOVER — <tarefa> (<data>)
> retomada: rapida | verificada

## Onde paramos
1 parágrafo. O estado atual em linguagem de quem vai retomar.

## Próximo passo EXATO
A PRIMEIRA ação concreta da retomada (comando, arquivo, decisão). Sem ambiguidade.

## Decisões + porquê
As escolhas feitas e a RAZÃO (não o quê — o porquê). Inclua a alternativa descartada e por quê.

## Estado pendente
O que falta, com o critério de "pronto". No modo verificada: gates não rodados, deploy não aplicado, validação ao vivo faltando.

## Riscos / colaterais em backlog
Problemas conhecidos NÃO resolvidos (separados da tarefa principal). Severidade.

## Caveat de estado vivo (SÓ no modo verificada — REVERIFICAR antes de afirmar)
O que a retomada PRECISA conferir no runtime antes de agir: backend de pé? qual PID/porta? o patch está no processo rodando (mtime do arquivo vs. start do processo)? env flags no estado esperado? git diff bate? store/cache limpo? Liste itens concretos e checáveis — a retomada vai EXECUTAR isto.

## Refs — arquivo:linha
Pontos de entrada para achar rápido. NÃO é o diff.
```

> **Coerência modo × caveat:** no modo `verificada`, o "Caveat de estado vivo" é **obrigatório** — se você não consegue listar nada checável, o caso é `rapida`. No modo `rapida`, a seção é **omitida** — se você sentiu necessidade de escrevê-la, o caso é `verificada`. A presença/ausência da seção deve sempre bater com a linha `retomada:`.

## Passo 2 — Breadcrumb na memória (o índice)

O índice pode viver em dois lugares no Hermes — escolha conforme o projeto:

### Opção A: `MEMORY.md` no projeto (recomendado para projetos com handovers frequentes)

1. **Atualize a linha `RETOMADA`** no topo do `MEMORY.md`: estado atual + próximo passo + `[[link-da-memoria]]`. Cada linha (a atual e as `(Anterior ...)`) **carrega a data** no rótulo (`YYYY-MM-DDx`) — é o que o decay lê. Ao promover a atual para o histórico entre parênteses, aplique os **dois critérios de saída, que compõem (sai quem violar QUALQUER um):**
   - **CAP** — mantenha no máximo **2** linhas `(Anterior ...)`; dropa a mais antiga além disso. Limita o pior caso (vários handovers no mesmo dia).
   - **IDADE (decay)** — dropa qualquer `(Anterior ...)` com **mais de 30 dias**, mesmo que caiba no cap. Filtra relevância: projeto que dormiu não deve arrastar breadcrumb velho como se fosse fresco.

   O cap é teto O(1); a idade é filtro de relevância — **um complementa o outro**, não substitui. O histórico completo já vive nos `project_*` listados abaixo (cada linha "Anterior" termina em `Ver [project_*]`, que persiste); a linha `RETOMADA` guarda só o pulo atual + os 2 imediatos como ponte, nunca a cadeia inteira. Deixar acumular re-cria o monólito que a memória existe para evitar. **(30 dias é o MESMO limiar reusado no Passo 4 — não invente um segundo número.)**
2. **Crie/atualize 1 arquivo `project_*`** em `memory/` com o fato durável (decisão + estado + próximo label livre), apontando para o handover e linkando `[[nome]]`.
3. Ajuste a linha-índice no `MEMORY.md`.

### Opção B: `memory` tool do Hermes (recomendado para projetos leves)

Use `memory` tool com `target: "memory"` para salvar o breadcrumb como uma entrada compacta:
- Content: `RETOMADA [YYYY-MM-DD]: <estado atual + próximo passo>. Handover: documentacao/HANDOVER_<slug>_<data>.md. Modo: <rapida|verificada>. Ver [project_*].`
- Mantenha o histórico de RETOMADAs anteriores limitado a 2 entradas (mesma regra de cap + decay de 30 dias).
- O fato durável completo pode virar outra entrada `memory` ou um arquivo `memory/project_*.md`.

O breadcrumb é TERSO — aponta, não repete. O modo NÃO precisa ir no breadcrumb: ele está na primeira linha do handover.

> **Invariante ao editar/comprimir o `MEMORY.md` (índice-ponteiro):** densifique a prosa (sintaxe `Gatilho → Ação`, flags `❌🚀✅⚠️`, imperativos curtos), mas **nunca drope um link nem um estado buscável**. Cada `[texto](arquivo.md)` é load-bearing — o protocolo de save consulta o índice por esses links para achar o arquivo que cobre um fato; órfã-lo quebra a memória. Para economizar, encurte o TEXTO do link (`[↗](arquivo.md)`), não o remova. Preserve 100% dos IDs/labels, datas e pendências. (Regra completa de compressão de índice: skill `organizador-mem` → "Compressão de índice-ponteiro".)

## Passo 3 — Libere o /reset

- Diga ao usuário, explicitamente, que está **seguro dar `/reset`** (ou `/new`) e o que foi gravado (handover + memória + modo de retomada).
- Em uma frase, diga qual será a **primeira ação da retomada**.
- Termine com o **Bloco de fechamento padrão** (abaixo) — ele é OBRIGATÓRIO.

## Bloco de fechamento padrão (SEMPRE — Passo 3 e Passo 4)

Todo fechamento desta skill — tanto ao escrever o handover (saída, Passo 3) quanto ao devolver o fio na retomada (Passo 4) — termina com a assinatura seguida, **SEM EXCEÇÃO**, das duas instruções ao usuário. **Você NÃO executa nenhuma das duas** — só as explica:

> PRONTO E OPERANTE!
>
> **Para limpar a sessão:** você digita `/reset` (ou `/new`). Isso zera o contexto desta conversa — mas o handover e a memória já estão salvos em disco, então nada se perde.
> **Para retomar depois:** abra uma sessão NOVA e peça *"retomar o handover"* (ou rode `/skill handover`). A nova sessão lê a linha `RETOMADA` do `MEMORY.md` (ou da memória do Hermes), abre o handover indicado e segue o modo gravado.

Os dois comandos aparecem **sempre**, mesmo que a conversa já tenha falado deles antes — o fechamento é autocontido. (A assinatura é personalizável, ver nota no Passo 4.)

## Passo 4 — (na retomada, sessão nova) O MODO ESTÁ NO ARQUIVO

Quando voltar (usuário pede "retomar", "voltar para o handover"):

1. Leia a linha `RETOMADA` do `MEMORY.md` (use `read_file`) ou busque na memória do Hermes (use `session_search` se não houver `MEMORY.md`). Abra o `documentacao/HANDOVER_*.md` indicado (ou o mais recente — use `search_files` com padrão `HANDOVER_*.md` para encontrar).
   - **Checagem de dormência (decay, mesmo limiar de 30 dias do Passo 2):** se a data da linha `RETOMADA` tiver **mais de 30 dias**, sinalize que o breadcrumb pode estar dormente — reconfira o estado antes de tratá-lo como "atual" (vale para os dois modos; o `git log`/mtime dos arquivos citados diz se algo mudou desde então).
2. Leia o handover inteiro e **cheque a linha `retomada:`** na primeira linha.
3. **REGRA DE PROMOÇÃO (vale sempre, antes de seguir o modo escrito):** se o próximo passo — como está escrito OU como evoluiu desde a escrita — envolve agir sobre runtime, trate como `verificada` **mesmo que o arquivo diga `rapida`**. Promoção é sempre permitida; rebaixamento nunca (se o arquivo diz `verificada`, a retomada verifica, ponto).

> A **assinatura de fechamento** (`PRONTO E OPERANTE!`) é um toque pessoal e um sinal inequívoco de "terminei o protocolo". Personalize à vontade — inclua seu nome, troque a frase — desde que a retomada sempre feche com a MESMA assinatura, para o sinal ser reconhecível.

**Se `rapida` (e a promoção não se aplica):**
- Devolva o fio conciso: onde paramos + próximo passo exato + pendências.
- **NÃO valide estado vivo** — nada de `netstat`, `git diff`, env, restart, gate.
- Feche com o **Bloco de fechamento padrão** (assinatura + os dois comandos: limpar e retomar).

**Se `verificada` (ou promovida):**
- Leia com atenção o "Caveat de estado vivo" e as "Refs — arquivo:linha".
- **EXECUTE o caveat** — reverifique cada item no runtime (use `terminal` para comandos de verificação): backend de pé? porta/PID? o código rodando TEM o patch (mtime vs. start do processo, ou force restart)? env flags certas? `git diff --stat` bate? store/cache no estado assumido?
- **Reporte o estado verificado** com sinais claros (✅ / ⚠️ / ❌) — o que você ENCONTROU, não o que o handover afirmava. Destaque **divergências** ANTES de propor agir.
- Se há divergência que afeta a integridade (ex.: backend sem o patch antes de um gate), **proponha corrigir primeiro** (restart, setar env, aplicar diff) em vez de seguir cego.
- Só então feche com o **Bloco de fechamento padrão** (assinatura + os dois comandos: limpar e retomar).

## Mapeamento de ferramentas (Claude Code → Hermes)

| Claude Code | Hermes equivalente |
|---|---|
| `Write` | `write_file` |
| `Read` | `read_file` |
| `Grep` | `search_files` (target='content') |
| `Glob` | `search_files` (target='files') |
| `AskUserQuestion` | `clarify` |
| `/clear` | `/reset` ou `/new` |
| `~/.claude/skills/` | `~/AppData/Local/hermes/skills/` |
| `CLAUDE.md` | `AGENTS.md` ou `.hermes.md` |
| `~/.claude/` | `~/AppData/Local/hermes/` |
| Transcript JSONL | `session_search` (FTS5 na SQLite do Hermes) |

## Nudge watchdog (o gatilho do ciclo)

No Claude Code original, um hook `UserPromptSubmit` mede o crescimento da conversa a cada turno e sugere `/handover` ao cruzar um limiar (80k tokens). O Hermes não tem hooks `UserPromptSubmit`, então a adaptação usa um **cron job watchdog** — um script Python que roda a cada 10 minutos, lê o `state.db` do Hermes, e quando o limiar é cruzado produz um aviso factual sugerindo `/skill handover`.

- **Script:** `~/AppData/Local/hermes/scripts/hermes_handover_nudge.py`
- **Config:** `~/AppData/Local/hermes/handover-nudge.config.json` (threshold: 80000, step: 70000)
- **Cron job:** criado via `cronjob` tool com `no_agent=True` (padrão watchdog — stdout vazio = silencioso, stdout não-vazio = delivered)
- **Fail-open absoluto:** qualquer erro sai 0 sem imprimir nada

Diferença vs. Claude Code: o cron é assíncrono (a cada 10 min) e não bloqueia a conversa. A compressão automática nativa do Hermes (`compression.enabled: true`, `threshold: 0.50`) funciona como rede de segurança adicional.

Detalhes técnicos do script (queries do state.db, proxy de tokens, estado por sessão): `../nudge-watchdog/README.md`.

## O que esta skill NÃO é

- Não é dump de conversa — é destilação seletiva.
- Não executa `/reset` nem apaga contexto.
- Não substitui a memória — trabalha com ela (índice + arquivo).
- Não roda para tarefa concluída/verificada — aí é só memória.
- Não confia na memória para afirmar runtime — no modo `verificada` (ou promovido), sempre reverifica.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.