Skip to content

deploy: container image for a Dockerfile-based PaaS (v0.434.0) - #808

Open
rosinghal wants to merge 6 commits into
vikasprogrammer:mainfrom
rosinghal:feat/dokku-deploy
Open

deploy: container image for a Dockerfile-based PaaS (v0.434.0)#808
rosinghal wants to merge 6 commits into
vikasprogrammer:mainfrom
rosinghal:feat/dokku-deploy

Conversation

@rosinghal

Copy link
Copy Markdown

Adds a Dockerfile, .dockerignore, CHECKS and docker-entrypoint.sh so Agentric deploys to a Dockerfile-based PaaS (Dokku/Heroku-style). Multi-stage build of both bundles, shipping the full session runtime — tmux, ttyd, git, gh, claude — on node:22-bookworm-slim.

Three constraints the image has to hold, each documented inline: it runs as uid 1000, not root (--dangerously-skip-permissions is refused under root); $HOME is a real writable volume (a failed ~/.claude.json trust seed hangs every session); and en_US.UTF-8 is generated, since session-backend.ts hardcodes it into every tmux pane. AOS_UID_ISOLATION stays off, so the app's own /terminal/ proxy keeps one published port enough.

No host, tenant, email or token is baked in — deployment identity stays runtime config.

Verified: npm run build, cd web && npm run build, npm run test:governance all pass, and the image builds and boots healthy on a Dokku host with /health reporting 0.433.0.

🤖 Generated with Claude Code

rosinghal and others added 6 commits August 19, 2026 23:46
Ships the full session runtime — tmux, ttyd, git, gh and the claude CLI — on
node:22-bookworm-slim, with both bundles built in a builder stage.

Runs as uid 1000, not root: the unattended lane launches claude with
--dangerously-skip-permissions, which the CLI refuses under root. $HOME is a
real writable directory (the deploy mounts it) because claude-launch.sh seeds
~/.claude.json in the home root to accept the folder-trust dialog, and because
the credential dir and transcripts the console reads back both live there.
en_US.UTF-8 is generated since session-backend.ts hardcodes it into every pane.

No host, tenant or token appears here — deployment identity is runtime config.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Multi-stage Dockerfile plus .dockerignore, CHECKS and docker-entrypoint.sh,
building both bundles and shipping the full session runtime (tmux, ttyd, git,
gh, claude) on node:22-bookworm-slim.

Three constraints the image has to hold, all load-bearing:
 - it runs as uid 1000, not root — the unattended lane launches claude with
   --dangerously-skip-permissions, which the CLI refuses under uid 0;
 - $HOME is a real writable directory the deploy mounts as a volume, because
   claude-launch.sh seeds ~/.claude.json to pre-accept the folder-trust dialog
   and a failed seed hangs every session on it; the credentials and the
   transcripts the console reads back live under the same home;
 - en_US.UTF-8 is generated, since session-backend.ts hardcodes it into every
   tmux pane and tmux string-matches it to decide UTF-8 mode.

AOS_UID_ISOLATION stays off, so the app's own /terminal/ proxy keeps one
published port enough. No host, tenant, email or token is baked in — all
deployment identity stays runtime config.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rosinghal rosinghal changed the title deploy: container image for a Dockerfile-based PaaS (v0.433.0) deploy: container image for a Dockerfile-based PaaS (v0.434.0) Sep 10, 2026
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.

1 participant