Skip to content

fix: remove explicit root User from agent container config#79

Open
marianomb82 wants to merge 1 commit into
helmcode:mainfrom
marianomb82:fix/remove-root-user-agent-container
Open

fix: remove explicit root User from agent container config#79
marianomb82 wants to merge 1 commit into
helmcode:mainfrom
marianomb82:fix/remove-root-user-agent-container

Conversation

@marianomb82
Copy link
Copy Markdown

AgentCrew was launching agent containers with User: '0:0' (root). Claude Code 2.1.92+ blocks --dangerously-skip-permissions when running as root, causing agents to exit silently with code 0 and no output.

The entrypoint.sh already handles user switching via gosu by detecting the workspace owner uid. Removing the explicit User field lets the entrypoint manage privileges correctly, making Claude Code 2.1.92+ work without downgrading or workarounds.

Fixes: silent exit 0 with no stdout when using Claude Code 2.1.92+

AgentCrew was launching agent containers with User: '0:0' (root).
Claude Code 2.1.92+ blocks --dangerously-skip-permissions when running
as root, causing agents to exit silently with code 0 and no output.

The entrypoint.sh already handles user switching via gosu by detecting
the workspace owner uid. Removing the explicit User field lets the
entrypoint manage privileges correctly, making Claude Code 2.1.92+
work without downgrading or workarounds.

Fixes: silent exit 0 with no stdout when using Claude Code 2.1.92+
Copy link
Copy Markdown
Contributor

@barckcode barckcode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La PR no resuelve el problema — se necesita un enfoque diferente

Hola! He revisado la PR en detalle y el bug report, y el cambio propuesto no modifica el comportamiento real del container. Te explico por qué:

Por qué quitar User: "0:0" no cambia nada

El Dockerfile base (build/agent/Dockerfile) no tiene directiva USER, lo que significa que Docker siempre arranca el container como root (UID 0) por defecto. Quitar User: "0:0" del código Go simplemente elimina una declaración explícita de algo que ya es el default:

Con User: "0:0" Sin User: "0:0"
Container arranca como root (explícito) Container arranca como root (default del Dockerfile)
entrypoint.sh detecta root → gosu → non-root entrypoint.sh detecta root → gosu → non-root

El flujo es idéntico en ambos casos. El entrypoint.sh siempre entra en la rama if [ "$(id -u)" = "0" ] y ejecuta gosu para hacer drop de privilegios.

Esto también aplica a imágenes custom basadas en la imagen base, ya que la documentación indica que no se necesitan directivas USER en los Dockerfiles custom.

El Problema 2 del bug report no es un bug separado

Revisé todo el pipeline del sidecar (ParseStreamOutput → m.events → convertEvents → c.events → forwardEvents → processEvent → publishLeaderResponse) y funciona correctamente. El canal no se cierra entre mensajes por diseño — se reutiliza entre múltiples llamadas a SendInput.

El "Problema 2" es consecuencia del Problema 1: si Claude Code sale silenciosamente sin producir output (porque detecta root), no hay eventos para que el sidecar procese → la UI queda en "Thinking..." para siempre.

Fix propuesto: anclar Claude Code a 2.1.90

En vez de intentar resolver la detección de root (que probablemente involucra variables de entorno como $HOME o $USER después del gosu), la solución más pragmática es anclar la versión de Claude Code en el Dockerfile:

# En build/agent/Dockerfile, línea 22:
# Antes:
RUN npm install -g @anthropic-ai/claude-code skills

# Después:
RUN npm install -g @anthropic-ai/claude-code@2.1.90 skills

Esto evita el breaking change de 2.1.92+ que bloquea --dangerously-skip-permissions como root, sin necesidad de tocar el entrypoint ni el código Go.

Acción solicitada

¿Podrías reemplazar el cambio de esta PR por el pin de versión en el Dockerfile? Si prefieres, también puedes incluir la eliminación de User: "0:0" como limpieza (es código innecesario), pero el fix real es el pin de versión.

Gracias por el bug report detallado — fue muy útil para diagnosticar el problema!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants