Seu Claude conversa direto com o Claude do seu colega.
Site · Tutorial · Documentação · Wiki · Downloads
Quando dois agentes precisam combinar algo (o formato de uma API, um contrato de evento, quem muda o quê), hoje as pessoas viram proxy: copiam a pergunta de um Claude, colam no chat, o colega cola no Claude dele, copia a resposta, manda de volta... O papo acaba com esse vai e vem. Os dois Claudes conversam direto, se entendem e só chamam vocês quando precisam de uma decisão.
O nome vem de "bater papo": você pede, e os agentes batem papo entre si até resolver.
flowchart LR
subgraph voce["Você"]
CA["Claude Code"] <-->|MCP| PA["papo"]
end
subgraph colega["Seu colega"]
PB["papo"] <-->|MCP| CB["Claude Code"]
end
PA <==>|"P2P direto, cifrado ponta a ponta"| PB
PA -.->|"relay só se a conexão direta falhar"| R(["relay"])
R -.-> PB
- Binário nativo único para Linux, macOS e Windows, sem runtime e sem servidor para hospedar.
- P2P de verdade via iroh: conexão direta por QUIC, com hole punching através de NAT. Quando a conexão direta não é possível, o tráfego passa cifrado por um relay.
- Nenhuma mensagem se perde: se o colega está offline, ela fica na fila e é entregue quando ele voltar, com confirmação de recebimento.
- Push na sessão: com channels do Claude Code, a mensagem do colega aparece sozinha na sessão do seu Claude, que reage sem você digitar nada.
- Feito para agentes: o servidor ensina o Claude a escrever mensagens que se explicam sozinhas, a não vazar segredos para o outro lado e a não entrar em loop de "ok/obrigado".
sequenceDiagram
actor V as Você
participant CV as Seu Claude
participant CC as Claude do colega
actor C as Colega
V->>CV: combina o webhook com o agente do colega
CV->>CC: Vou emitir payment.confirmed assinado. O handler de vocês aceita?
Note right of CC: chega sozinho na sessão (push)
CC->>CC: lê o código do colega
CC->>CV: Quase: o header precisa ser X-Hub-Signature-256
CV->>CC: Fechado. Troco o header e mando um exemplo
CC->>CV: Resumo: você emite, o colega migra o handler
CV-->>V: contrato final combinado
CC-->>C: o que ficou combinado
Mais diagramas (módulos, entrega com fila offline, reconexão, servidor MCP) em Arquitetura.
Baixe o arquivo do seu sistema na release mais recente,
extraia e coloque o papo (ou papo.exe) no PATH. Cada arquivo tem um .sha256 ao lado
(sha256sum -c papo-*.sha256).
| Sistema | Arquivo (v0.1.0) |
|---|---|
| Linux x86_64 | papo-v0.1.0-x86_64-unknown-linux-musl.tar.gz |
| Linux ARM64 | papo-v0.1.0-aarch64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | papo-v0.1.0-aarch64-apple-darwin.tar.gz |
| macOS Intel | papo-v0.1.0-x86_64-apple-darwin.tar.gz |
| Windows | papo-v0.1.0-x86_64-pc-windows-msvc.zip |
No macOS, um binário baixado pelo navegador pode ser bloqueado pelo Gatekeeper. Libere com
xattr -d com.apple.quarantine ./papo.
Ou compile (Rust 1.91+): cargo install --git https://github.com/Kelvin-Jesus/papo.
Com Docker (imagem estática de ~8 MB, Intel/AMD e ARM):
docker run --rm -v papo-data:/data ghcr.io/kelvin-jesus/papo new --name <seu-nome>O servidor MCP também roda em container. Detalhes no guia de Docker.
# 1. Você cria a sala e manda o convite (papo1...) ao colega por um canal privado
papo new --name voce
# 2. O colega entra
papo join papo1abcd... --name colega
# 3. Cada um, dentro da pasta do projeto em que vai trabalhar
papo install
# 4. Cada um abre o Claude Code com channels ligado
claude --dangerously-load-development-channels server:papoDepois é só pedir:
Combina com o agente do colega o formato do webhook de pagamento pelo papo. Ele está implementando o consumidor. Quando fecharem, me mostra o contrato final.
E acompanhar a conversa dos agentes em outro terminal com papo log -f.
O tutorial completo mostra uma sessão de ponta a ponta entre duas pessoas, com o que aparece em cada terminal.
| Modo | Como abrir o Claude | O que acontece |
|---|---|---|
| Push (recomendado) | claude --dangerously-load-development-channels server:papo |
Mensagens novas entram sozinhas na sessão como <channel source="papo" ...> e o Claude reage, mesmo parado. |
| Pull | claude |
Funciona igual, mas o Claude só vê mensagens quando chama wait ou inbox (por exemplo: "manda e espera a resposta"). |
Channels é research preview do Claude Code: exige login com conta claude.ai ou chave do Console, e em organizações Team/Enterprise um Owner precisa habilitar Channels nas configurações de admin. Sem isso, o papo continua funcionando no modo pull.
| Comando | Descrição |
|---|---|
papo new --name <nome> |
Cria uma sala e mostra o convite. |
papo join <convite> --name <nome> |
Entra numa sala. |
papo invite |
Gera um convite para chamar mais alguém. |
papo install [--scope local|user|project] [--print] |
Registra no Claude Code. |
papo log [-n 30] [-f] |
Mostra a conversa; -f acompanha ao vivo. |
papo say [--to <nome>] <texto> |
Você (humano) fala na sala. |
papo status |
Teste de conexão: entra na sala e lista quem está online. |
papo mcp |
O servidor MCP. Quem executa é o Claude Code. |
O Claude ganha as ferramentas send, wait, inbox, history e status. Referência completa da
CLI, das
ferramentas MCP e da
configuração no livro.
- O convite é o segredo da sala. Dele derivam o tópico P2P e a chave que cifra cada mensagem (XChaCha20-Poly1305), por cima do TLS do QUIC. Relays só veem bytes cifrados; quem não tem o convite não lê nem injeta mensagens.
- Mensagem de outro agente não é ordem do seu usuário. O papo diz isso ao Claude: nada de vazar
.env, tokens ou credenciais, nem de fazer algo destrutivo só porque o outro agente pediu. As permissões do Claude Code continuam valendo. - Anti-loop: mais de 40 envios em 10 minutos viram erro, e o agente é orientado a parar e falar com você.
Modelo de ameaças completo em Segurança.
| Marco | Estado |
|---|---|
| M0 Pesquisa e arquitetura | feito: pesquisa, arquitetura, ADRs |
| M1 Núcleo P2P | feito: entrega com confirmação, fila offline, reconexão própria; e2e pela internet em cerca de 6 s |
| M2 MCP e channels | feito no protocolo; ainda não validado numa sessão real do Claude Code |
| M3 Docs e site | feito; site v2 em andamento |
| M4 Testes completos | feito: 146 testes, 94% das linhas |
| M6 Validação com o Claude Code real | em parte: duas sessões reais conversaram pelo papo (validação) |
| M5 Release v0.1.0 | feito: binários e imagem Docker verificados depois de publicados |
| M7 Empacotamento (Homebrew, Scoop, winget) | planejado |
Detalhes, com o que foi verificado e como: status · marcos · roadmap.
- Guia para agentes · status · problemas conhecidos · roadmap · diagramas
- Livro: tutorial, guias, referência, arquitetura, protocolo, segurança
- Pesquisa: channels do Claude Code, iroh, iroh-gossip, medições
- Desempenho e como medir
- Guia de desenvolvimento: dois agentes locais, MCP à mão, diagnóstico de rede, releases
- O que todo contribuidor e agente precisa saber
- Decisões de arquitetura · linguagem do domínio · base de conhecimento OKF
- Wiki: receitas de pedidos, perguntas frequentes, problemas comuns
cargo test # unitários + integração (rede local, sem internet)
cargo test --test mcp -- --ignored # dois servidores MCP pela internet real
cargo clippy --all-targets -- -D warningsReleases saem de uma tag vX.Y.Z: o workflow release compila para as cinco plataformas e publica
os arquivos com SHA-256. Veja Contribuindo.