---
name: failover-crossover
description: >-
  Acionamento MANUAL de failover cross-provider — LADO CODEX (GPT). Use quando o Opus/Claude está
  indisponível e o GPT está UP: o Codex ASSUME a sessão interrompida do Claude e a continua
  (event=opus-down); ou quando o Opus volta e o Codex reconcilia/devolve (event=opus-up). Espelho
  INVERSO da skill homônima do lado Claude (claude/skills/failover-crossover), que trata
  gpt-down/gpt-up. Quem aciona é sempre o lado que está UP. Trigger: "failover manual",
  "opus caiu"/"claude caiu"/"opus down", "assumir a sessão do claude", "recuperar sessão",
  "reconciliar failover", "opus voltou". Parâmetro canônico de mudança de estado OBRIGATÓRIO:
  event ∈ {opus-down, opus-up}. NÃO use para o gatilho AUTOMÁTICO (script failover-orchestrator.codex.sh),
  nem com ambos os lados UP, nem para os eventos gpt-* (lado Claude).
  Complementa um padrão de handoff entre sessões e a higiene de verificar de 1ª mão.
---

# failover-crossover — lado CODEX (GPT)

Skill **crossover** de failover **manual**, espelho inverso de `claude/skills/failover-crossover`
(lado Claude). **Quem aciona é o lado UP**: esta skill roda **no Codex**, quando o **Opus/Claude caiu**
e o GPT está vivo.

**Fontes (ler de 1ª mão ao acionar):** `docs/contract.md` (§4 failover, §5 isolamento — o Codex lê
`~/.claude` no disco) · a fronteira de propriedade dos diretórios (`~/.codex/AGENTS.md`) ·
`docs/adr/0001` e `docs/adr/0002`. **Gate de reconciliação** (contexto separado): para
`scope=harness-meta` (governança), um **subagente revisor adversarial do lado Codex**; para
`scope=project` (código), revisão em instância/sessão distinta apropriada ao código. Em
`event=opus-up`, o Codex prepara a devolução e cede a reconciliação ao Claude primário (runbook **P2**).

> **Convenção de instalação:** ao instalar no seu harness, copie este `SKILL.md` para
> `~/.agents/skills/failover-crossover/` (skills do Codex CLI). Os paths `~/.claude`, `~/.codex` e
> `~/.agents/skills` são as localizações padrão dos harnesses; as branches `failover`/`harness` são
> nomes de exemplo — ajuste aos da sua topologia.

## Parâmetros canônicos (mudança de estado)

Invocação: `failover-crossover <event> [scope=<project|harness-meta>] [context="<...>"]`

- **`event`** — OBRIGATÓRIO, canônico; a transição de estado observada. Vocabulário crossover
  compartilhado = `{opus-down, opus-up, gpt-down, gpt-up}`. **Esta skill (Codex) trata apenas:**
  - **`opus-down`** — Opus/Claude indisponível, GPT UP → **Codex ASSUME** a sessão do Claude e continua (runbook **P1**).
  - **`opus-up`** — Opus/Claude voltou → **Codex prepara a devolução**: registra handoff e cede a reconciliação ao Claude (runbook **P2**).
  - (`gpt-down`/`gpt-up` pertencem ao lado Claude — recusar com ponteiro à skill espelho.)
- **`scope`** — canônico; fixa a invariante §5 (destino do trabalho):
  - **`project`** → trabalho vai ao repo/branch do **projeto**.
  - **`harness-meta`** → meta-trabalho no harness → branch **`failover`** — **NUNCA a `harness`**.
- **`context`** — texto livre; o que a sessão interrompida fazia / objetivo / onde parou.

## Exemplos de uso

Cada caso dá a frase de gatilho (linguagem natural, como você aciona) e a linha de invocação canônica equivalente.

- Opus/Claude caiu no meio de trabalho de projeto → Codex assume e conclui.
  - Gatilho: "o opus caiu enquanto implementava a feature Y — assume e termina."
  - Canônico: `failover-crossover opus-down scope=project context="Claude implementava a feature Y, parou no passo 3"`
- Opus/Claude caiu no meio de meta-trabalho do harness → Codex assume (trabalho vai p/ branch failover, NUNCA harness).
  - Gatilho: "claude down — ele editava o harness, assume."
  - Canônico: `failover-crossover opus-down scope=harness-meta context="Claude editava o harness, faltava fechar o passo"`
- Opus/Claude voltou → Codex prepara a devolução e cede a reconciliação ao Claude (P2).
  - Gatilho: "o opus voltou — prepara a devolução."
  - Canônico: `failover-crossover opus-up scope=harness-meta context="trabalho concluído na branch failover, pronto p/ o Claude reconciliar"`

## Procedimento — `event=opus-down` (Codex assume)

1. **Ler** o contrato §4/§5 (em `~/.claude/docs/`, no disco) + estado de 1ª mão: `git status`/`git log`,
   working tree, handoffs em `~/.claude/handoffs/` e `~/.codex/handoffs/`.
2. **Recuperar** a sessão: a partir de `context` + estado observável, reconstruir o que o Claude conduzia.
3. **Continuar e concluir** a ação, com **qualidade peer** (`docs/adr/0002`: você é o substituto à altura, não degradação).
4. **Destino** conforme `scope` (§5): `project` → repo do projeto; `harness-meta` → branch **`failover`**.
   Ao sair do failover, a reconciliação dos artefatos do `harness` cabe ao Claude no retorno (runbook **P2**), porque o Codex **NUNCA escreve em `~/.claude`**.
5. **Registrar handoff** em `~/.codex/handoffs/[AAAA-MM-DD]-[tema].md`: escopo, estado git, validações, pendências.

## Procedimento — `event=opus-up` (preparar devolução)

1. Garantir que o handoff está completo e o estado coerente (self-tests/gates aplicáveis).
2. **Não reassumir nem reescrever** o que o Claude vai reconciliar — ceder a reconciliação ao primário (runbook **P2**).
3. Disponibilizar tudo via os artefatos versionados/handoff para o Claude verificar de 1ª mão.

## Invariantes herdadas (não-negociáveis — lado Codex)
- **NUNCA escrever em `~/.claude`** (regra de propriedade dos diretórios, `~/.codex/AGENTS.md`).
- **§5:** meta-trabalho de failover → branch **`failover`**, nunca `harness`.
- Sem degradar modelo (`docs/adr/0002`: peer, não substituto inferior).
- Verificar de 1ª mão; não confiar em relato. · Handoff com escopo fechado e retorno verificável.

## Espelho
Lado Claude: `claude/skills/failover-crossover`, eventos `gpt-down`/`gpt-up` (inverso desta).
