allin / Public guide
English
WORKER DEPLOYMENT

Install an Allin worker

Deploy your worker with Coolify or Docker Compose, then sign in to Claude Code, Codex and GitHub on the server.

Public guideMarkdown

Public page, no account or credentials required. Share the Markdown version with your assistant to prepare the installation.

Before deploying

This guide installs a worker connected to your Allin workspace, not a new Allin server. The public image includes the Allin package, Claude Code, Codex and GitHub CLI.

  • Prepare a Linux amd64 server with Docker and SSH access. If using Coolify, the server must already be connected to Coolify.
  • In Allin → Workers, create a Container worker, select its agents and copy its key. Check queued jobs: they may start as soon as an engine is authenticated.
  • ALLIN_URL is your Allin instance address, reachable from the container. ALLIN_WORKER_API_KEY is this worker’s key. Do not run two containers with the same key.
  • The server must reach Allin, GHCR, the selected engine’s services and GitHub if used. Remote MCP integrations are called by the Allin server.

Replace USER, WORKER_HOST, WORKER_CONTAINER and PASTE_YOUR_WORKER_KEY_HERE. Do not ask the user to paste secrets into chat: use Coolify’s private variables. The user must complete browser sign-in.

Obtain the user’s approval before creating a paid resource or running a billable job. This guide does not authorize spending.

Deploy the worker on Coolify

Create a Docker Compose resource in Coolify and paste the dedicated file below. It includes the security profile; no additional file needs to be created on the server.

Download Coolify Compose

In Coolify, set ALLIN_URL and ALLIN_WORKER_API_KEY as runtime variables.

Configure worker
ALLIN_URL=https://tryallin.com
ALLIN_WORKER_API_KEY=PASTE_YOUR_WORKER_KEY_HERE

Keep the four persistent volumes. This worker needs no domain, public port or HTTP health check.

  • /workspace
  • /home/node/.claude
  • /home/node/.codex
  • /home/node/.config/gh

Deploy. The container waits for a Claude Code or Codex sign-in before claiming jobs.

Where should I run these commands?

If the worker runs on a remote server, connect to that server over SSH first. Run all Claude, Codex and GitHub commands below in that remote terminal, not on your computer.

Connect to the worker server
ssh USER@WORKER_HOST
docker ps --format "table {{.Names}}\t{{.Image}}"

Replace WORKER_CONTAINER with the container name deployed by Coolify. Use docker exec to use those exact volumes; do not start a separate Compose project to sign in.

Open sign-in links in your computer’s browser. Enter the displayed code if requested, then return to the worker terminal. Credentials stay on the worker server. For a local worker, simply use its local terminal.

Connect GitHub first if your agents use it. Jobs can start as soon as an engine is signed in.

Sign in to Claude Code and/or Codex according to the engines selected for your agents. Restart the worker after adding an account so it recognizes the new engine.

GitHub for cloning repositories

The gh sign-in is used by Git to clone repositories. It does not replace the GitHub MCP connector credentials in Allin.

GitHub sign-in
docker exec -it WORKER_CONTAINER gh auth login --hostname github.com --git-protocol https --web
docker exec -it WORKER_CONTAINER gh auth setup-git --hostname github.com
docker exec -it WORKER_CONTAINER gh auth status --hostname github.com

GitHub CLI is installed in the image. Sign in using the code displayed in the terminal; the github-config volume preserves your sign-in.

If GH_TOKEN or GITHUB_TOKEN is set in the container or machine, gh prioritizes that token. Check that it belongs to the intended account without displaying or sharing it.

To use gh in a job, enable “Run commands” in the agent profile, then create a new job.

Worker Claude account

Claude sign-in
docker exec -it WORKER_CONTAINER claude auth login --claudeai
docker exec -it WORKER_CONTAINER claude auth status
docker exec -it WORKER_CONTAINER allin-worker doctor claude

Open the link shown in the terminal, sign in to Claude, then paste the returned code into the terminal if prompted. Wait for “Login successful”.

The claude-config volume stores the login and sessions. Keep it when recreating the container.

Worker Codex account

Sign in to the engine selected for your agents. For Codex, enable device code login in ChatGPT security settings, then open the link shown in the terminal.

Codex sign-in
docker exec -it WORKER_CONTAINER codex login --device-auth
docker exec -it WORKER_CONTAINER codex login status
docker exec -it WORKER_CONTAINER allin-worker doctor codex

The codex-config volume preserves Codex authentication and sessions. It stays private and is never part of the published image.

Official documentation

GitHub for MCP tools and reviews

Jobs use the GitHub connection authorized in Allin. Update its credentials in Connections, then check enabled tools and those permitted on the agent profile.

Open Allin connections

  • The account and token must have access to the relevant repositories. For a fine-grained token, select the correct resource owner and repositories.
  • Contents: Read to read code. Pull requests: Read to read PRs and their files, Read and write to create or submit a review, including PENDING reviews.
  • If required by the organization, obtain approval for the token or app and authorize its SSO access.

Reading code does not prove the token can read PRs or create reviews. Fix the permissions of the connection in use, then try reading the PR again. A successful read does not verify write access.

GitHub review permissions

The agent profile also lets you choose the model, reasoning effort, file access and subagents.

Check connection

The doctor command checks the engine and sign-in; doctor codex also executes real commands in the read-only and workspace-write sandboxes. No model or Allin API is called. The Connected badge in Allin confirms the worker heartbeat.

Connected does not mean every engine is available. In preview.4, a failed Codex startup check excludes that engine: Claude may run while Codex jobs remain queued. Check the logs and restart the worker after fixing the issue, once running jobs have finished.

Complete sign-in before starting. If the worker already has running jobs, wait for them to finish before restarting it.

Run these commands on the server over SSH, not inside the container terminal. You can also restart the service and view its logs in Coolify.

Start and follow logs
docker restart WORKER_CONTAINER
docker logs --tail=50 -f WORKER_CONTAINER

Once started, the worker can execute queued jobs using authorized accounts and tools. Allin MCP is configured automatically.

In Allin → Workers, check the Connected badge and assigned agents. Check each engine with doctor and the worker logs. Configure repositories on the worker page. A test job then validates the full flow, with your approval for its usage costs.

Codex on Ubuntu: host AppArmor restriction

On recent Ubuntu releases, apparmor=unconfined in Compose may not be sufficient. If bwrap reports “loopback: Failed RTM_NEWADDR: Operation not permitted”, check the host for unprivileged_userns profile denials for setpcap or net_admin. A successful unshare -U test does not validate the entire sandbox.

Diagnose from the server over SSH
sysctl kernel.apparmor_restrict_unprivileged_userns kernel.apparmor_restrict_unprivileged_unconfined
sudo journalctl -k --since "10 minutes ago" | grep -Ei 'apparmor="DENIED"|userns'
docker exec WORKER_CONTAINER sh -c 'id; cat /proc/self/attr/current'
docker exec WORKER_CONTAINER codex sandbox -- true
docker exec WORKER_CONTAINER find /usr/local/lib/node_modules/@openai/codex -type f -path '*/codex-resources/bwrap'

Replace WORKER_CONTAINER with the actual container name. With Codex 0.160.0, use codex sandbox -- true, without adding linux. The worker must run as node (uid 1000). Check the bundled bwrap path before applying the profile below.

If the logs confirm this restriction, an administrator can install this targeted profile on the Ubuntu host, outside the container. It permits userns for the bwrap bundled with Codex; it does not disable the restriction across the host. This exception was validated with the preview.4 image on Ubuntu; recheck the path and diagnostics after an update.

Host profile /etc/apparmor.d/codex-bwrap
abi <abi/4.0>,
include <tunables/global>
profile codex-bwrap /usr/local/lib/node_modules/@openai/codex/**/codex-resources/bwrap flags=(unconfined) {
  userns,
  include if exists <local/codex-bwrap>
}
Load the profile and check Codex
sudo apparmor_parser -r /etc/apparmor.d/codex-bwrap
docker exec WORKER_CONTAINER codex sandbox -- true
docker exec WORKER_CONTAINER allin-worker doctor codex

After the checks pass and Codex is signed in, restart the worker once its running jobs have finished: available engines are detected at startup. Keep seccomp, cap_drop: ALL, no-new-privileges and the Codex sandbox. Document the AppArmor exception; do not globally disable the host userns restriction.

Official Codex sandbox documentation

Job files and persistent storage

Place repositories, documents and data shared between jobs under /workspace, backed by a volume in the official Compose. Use /tmp for temporary files. Access to paths under /home/node depends on the sandbox and permissions: do not use it for agent work documents.

Persistence and sandbox access are separate. A volume preserves files when the container is recreated, but does not grant Codex additional permissions. Files outside volumes are lost on redeployment. /home/node/.cache is not persistent in the official Compose.

Optional cache volume: merge into the existing Compose
services:
  worker:
    volumes:
      - worker-cache:/home/node/.cache
volumes:
  worker-cache:

Add this mount and volume declaration without replacing existing volumes. Back up any cache you need before recreating the container: a new volume does not recover data from the old container. Keep caches and authentication data private, never in a published image.

Updates and troubleshooting

Keep the volumes and the same worker when updating: they contain sessions and repositories. Do not use docker compose down -v, docker volume prune or docker commit on an authenticated container.

After rotating a key, replace ALLIN_WORKER_API_KEY in Coolify’s private variables and redeploy, or update .env and recreate the Compose container. A simple restart does not reload environment variables.

  • Worker waiting: complete Claude Code or Codex sign-in in the correct container and its volumes.
  • Worker offline or 401 error: check ALLIN_URL, the active worker key and network access from the server without exposing secrets.
  • GitHub 403 error: check the account, allowed repositories, PR permissions and SSO approval. gh and the GitHub MCP use separate connections.
  • Codex sandbox error: use the official Compose, its seccomp profile and apparmor=unconfined on a dedicated host. Recreate the container after jobs finish, preserving volumes, then run allin-worker doctor codex over SSH. Do not disable the Codex sandbox.