Sobre el proyecto

## Qué es postbag postbag es un pequeño puente que permite que dos sesiones de agentes de codificación de IA que se ejecutan en la misma máquina se escriban cartas entre sí. Las sesiones pueden ser del mismo proveedor o de diferentes: una sesión de Claude Code y una de Codex, dos de Claude Code, o dos de Codex. Cada carta se entrega a través del mecanismo de activación ("puerta") del proveedor receptor, se anexa a un único libro mayor compartido y se contabiliza contra un presupuesto de cartas establecido por un humano. Los usos típicos que sugiere el README incluyen: hacer que un agente revise el diff del otro, dividir una tarea entre dos agentes y acordar la interfaz mediante cartas, o obtener una segunda opinión sin pegar el contexto manualmente. El README define la división del trabajo como "el texto viaja por postbag, el código viaja por git". ## Cómo funciona - `join` registra la puerta de una sesión en el libro mayor bajo un nombre. Para Claude Code, se trata de su socket de mensajería y token por sesión; para Codex, es el ID del hilo. - `send` llama a la puerta registrada (el socket o `codex queue`), luego anexa la carta bajo un bloqueo de archivo, de modo que las cartas simultáneas obtengan números distintos y compartan un mismo presupuesto. - `open` inicia el siguiente intercambio desde una terminal normal, fuera de cualquier sesión. Las cartas se numeran dentro de un intercambio y el presupuesto es compartido por todos en la bolsa. Sin `--limit`, un intercambio contiene 12 cartas. - `read` imprime los nombres actuales en la bolsa, el intercambio abierto y los registros. - El libro mayor en `~/.postbag/ledger.jsonl` es el único estado. No hay demonio, sondeo, hooks, servidor ni archivo de configuración. Establecer el mismo `POSTBAG_LEDGER` en ambas sesiones y en la terminal crea una bolsa separada. El receptor se activa con una carta numerada, el recuento restante, el cuerpo y el comando único que la responde (un `send` con la respuesta en stdin). La última carta de un intercambio indica que no se debe responder, y el siguiente envío es rechazado, indicando al agente que se detenga y pregunte al humano. ## Requisitos Python 3.10 o posterior, solo librería estándar; instalable vía `pipx install postbag`. Una sesión de Claude Code necesita su socket de mensajería por sesión exportado a través de `CLAUDE_CODE_MESSAGING_SOCKET` y `CLAUDE_CODE_MESSAGING_TOKEN`. Una sesión de Codex necesita el comando `queue` introducido en Codex 0.149, `CODEX_SESSION_ID` exportado y un `codex queue --help` funcional; `POSTBAG_CODEX` puede apuntar a un binario no estándar. Dos sesiones de Claude no necesitan el binario de Codex, y dos de Codex no necesitan el socket de Claude. ## Verificación y soporte de plataforma El README informa de una verificación en vivo en macOS: versión 1.0.2 con Claude Code 2.1.263 y Codex 0.153.4 de la aplicación de escritorio de ChatGPT, y versión 1.1.0 con dos sesiones reales de Claude Code 2.1.263, incluyendo un intercambio bidireccional y el rechazo por presupuesto agotado. Linux pasa el CI pero la entrega en vivo se describe como no verificada, y Windows no es compatible. ## Límites y notas de seguridad - El libro mayor contiene cada token de sesión de Claude así como las cartas. Las escrituras mantienen el archivo en `0600` y los nuevos directorios de estado en `0700`; un directorio personalizado existente se deja intacto. `read` oculta los campos de la puerta, `cat` no lo hace, por lo que el archivo bruto debe mantenerse fuera de git, logs y capturas de pantalla. - Una carta se convierte en un turno de usuario en la sesión receptora, por lo que ambas sesiones deben ser confiables para la tarea. postbag en sí mismo no envía nada fuera de la máquina, pero las sesiones del proveedor reenvían la carta a sus servicios de modelo como cualquier prompt. - Un nombre es una dirección, no una autenticación. `open` se niega a ejecutarse dentro de una sesión. Estas comprobaciones leen las variables de sesión de los proveedores: una barrera contra roles confundidos, no una protección contra otro proceso que se ejecute como el mismo usuario. - Se observó entrega desatendida a Claude con permisos de bypass en las versiones probadas; otros modos pueden retener la carta para aprobación. Codex necesita permiso para escribir en el libro mayor y conectarse al socket de Claude. - "Entregado" significa enviado a través de la puerta, no leído. Un tiempo de espera agotado o un fallo entre el envío y el registro deja una carta en duda, y no hay acuses de recibo ni reintentos. ## Alcance y compatibilidad Dos sesiones son la configuración soportada. Tres o más se describen como experimentales; `read` así lo indica y cada carta enumera entonces los nombres registrados. Los libros mayores escritos por la 1.0 se leen sin reescritura, con pares de proveedores heredados leídos como `@claude` y `@codex`. No se admite la mezcla de una sesión 1.0 con una sesión 1.1, ya que un `send` de la 1.0 acepta solo `claude` o `codex` desnudos y, por lo tanto, no puede ejecutar el comando de respuesta transportado en una carta de la 1.1; ambas sesiones deben actualizarse y volver a ejecutar `join`. Después de un reinicio, una sesión debe ejecutar `join` nuevamente bajo el nombre que tenía, y un comando de respuesta llegará a quien posea el nombre cuando se ejecute. El repositorio tiene licencia MIT e incluye un documento de concepto en forma de `CONCEPT.md`, un registro de cambios, guía de contribución y un documento de investigación que enumera otras herramientas en el espacio.