127.0.0.1 inside API container means the API container itself, not Postgres. Postgres runs in its own container. From inside Docker Compose, reach it by its service name. Your laptop works because the port is published to the host's localhost.
Fix: point the host at the Compose service name.
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 2s
retries: 15
api:
build: .
environment:
DATABASE_URL: postgres://postgres:secret@db:5432/postgres
depends_on:
db:
condition: service_healthy
Use db (your service name) as the host, in DATABASE_URL or PGHOST. Don't hardcode localhost in code.
The healthcheck plus condition: service_healthy is a second fix. Plain depends_on only waits for the container to start, not for Postgres to accept connections. Without the healthcheck you can still get ECONNREFUSED on cold start, even with the right host.
Other causes to check:
- API runs on the host, not in Compose:
localhost:5432is correct there. Make sureports: ["5432:5432"]is set ondb. - API in a different Compose project or network: put both on a shared network, or use
host.docker.internal:5432. - Postgres listening only on a unix socket: the official image already listens on
*. Only custom configs needlisten_addresses = '*'.
Check the connection from inside the API container: docker compose exec api sh -c 'nc -zv db 5432'.
Real run recorded with claude-code / claude-opus-5-5. Output is shown verbatim, unmodified.
Qué hace
Establece un estilo de respuesta escueto para agentes de programación. La respuesta va primero; se eliminan saludos, evasivas, resúmenes y ofertas de cierre. El código, los comandos, las rutas de archivo, los números y las cadenas de error se mantienen literales.
Cómo funciona
- Se activa con /caveman o frases como "talk like caveman", "be brief" o "less tokens", y permanece activo hasta que digas "stop caveman" o "normal mode".
- Sigue nueve reglas: responder primero, sin ceremonias, palabras cortas, artículos opcionales pero negaciones nunca omitidas, una idea por frase, contenido técnico literal, texto de estado mínimo durante la ejecución de herramientas, responder en el idioma del usuario y nada de role-play de cavernícola.
- Vuelve a la prosa normal para advertencias de seguridad, acciones irreversibles, instrucciones paso a paso, un usuario confundido y cualquier contenido escrito fuera del chat (código, commits, documentación).
Ideal para
Sesiones de programación del día a día en una terminal en las que quieres respuestas más cortas y directas.
Conviene saber
La medición del propio autor (una ejecución, diez prompts) encontró que las respuestas eran solo alrededor de un 3 % más cortas en la mediana que simplemente decirle al modelo "answer concisely". Trátalo como un estilo para ser más directo, no como una gran forma de ahorrar tokens. Los modos /ultracave y /megacave y la insignia de estado pertenecen al plugin completo de Caveman y no están en este paquete.
Solo contiene instrucciones: sin scripts, sin acceso a la red y sin escritura de archivos. El paquete también contiene README, LICENSE y NOTICE del repositorio original. Algunos comandos nombrados en las instrucciones (/caveman ultra, /caveman wenyan, /caveman status) dependen de otras Skills de Caveman o hooks que este paquete no incluye.