Homebrew
Native macOS binarybrew install --cask iagorithm/tap/worqer-cliUpgrade later with brew upgrade --cask worqer-cli.Every command the terminal client accepts, with its arguments and options. The CLI acts as you, not as an administrator: login signs you in with your own account, and the same rules that gate the dashboard decide what you may do from there.
Choose the native Homebrew cask on macOS or the minimal Linux image on any host with Docker. Both are production builds of the same CLI.
worqer-cli login
worqer-cli status
worqer-cli --help
worqer-cli versiondocker pull cjarn/worq3r-cli:latest
mkdir -p "$HOME/data"
docker run -d --name worqer-cli-container --restart unless-stopped \
--user "$(id -u):$(id -g)" \
-v "$HOME/data:/data" \
cjarn/worq3r-cli:latestAccess it with docker exec -it worqer-cli-container worqer-cli <command>. The Alpine image contains the static CLI, Docker CLI + Compose, TLS certificates and /bin/sh, but no compiler, source tree or runtime env file.
Mounting /var/run/docker.sock gives the CLI container administrative control of Docker on this host. It is required for worqer-cli install and worqer-cli update runner.
docker exec -it worqer-cli-container worqer-cli login
docker exec -it worqer-cli-container worqer-cli install
docker exec -it worqer-cli-container worqer-cli status
docker exec -it worqer-cli-container worqer-cli --help
docker exec -it worqer-cli-container worqer-cli version
docker exec -it worqer-cli-container /bin/shConfirm what you ended up with — worqer-cli version prints the release, compiled profile, commit and build date. Published Homebrew and Docker packages show Profile production; local binaries showProfile development.
The repository still generates native binaries: option 4 uses the local development config and option 18 uses the production config. Option 17 packages that CLI in the production image.
Neither distribution contains a service account. Approval creates a renewable per-user Firebase Auth session, while all projects, workers, jobs and updates travel through worq3r-api.
The macOS distribution is a native binary published as a Cask in the public iagorithm/tap tap. Homebrew automatically selects Apple Silicon or Intel.
brew install --cask iagorithm/tap/worqer-cli
worqer-cli version
worqer-cli loginCurrent releases print a short-lived worqer.app activation URL. Review the machine and workspace in the browser, then press Authorize this CLI. The CLI does not open a localhost callback port.
brew update
brew upgrade --cask iagorithm/tap/worqer-cli
worqer-cli versionCompare the reported version whenever Docker and Homebrew appear to behave differently. The Docker latest image and an old local Cask can otherwise execute different login implementations.
Version 0.1.0 used the retired Google callback login. Refresh the tap and reinstall the Cask to receive the current worqer.app device-confirmation flow.
brew untap iagorithm/tap
brew tap iagorithm/tap
brew reinstall --cask worqer-cli
worqer-cli versionbrew uninstall --cask worqer-cli
# Also remove the saved CLI session
brew uninstall --cask --zap worqer-cliKeep the container running and execute each CLI operation through docker exec. Use this pattern:
docker exec -it worqer-cli-container worqer-cli <command> [arguments]Common examples:
docker exec -it worqer-cli-container worqer-cli login
docker exec -it worqer-cli-container worqer-cli status
docker exec -it worqer-cli-container worqer-cli projects
docker exec -it worqer-cli-container worqer-cli deploy my-app --follow
docker exec -it worqer-cli-container worqer-cli versionDo not start a new temporary container for every command. The $HOME/data bind mount preserves and exposes the approved login session and unique client identity to both the CLI and Runner.
Enter the minimal Alpine Linux environment of the running CLI container with:
docker exec -it worqer-cli-container /bin/shThe shell runs as the same unprivileged user as the CLI. The persistent login session and client identity are stored under /data, which maps to $HOME/data on the host. Exit with exit or Ctrl+D.
From an empty machine to a running deployment, in the order the commands are meant to be run.
docker exec -it worqer-cli-container worqer-cli login
# Create and sign in the runner with the direct Docker block in /docs#create-worker
docker exec -it worqer-cli-container worqer-cli claim 8f3aQ2...
docker exec -it worqer-cli-container worqer-cli workers
docker exec -it worqer-cli-container worqer-cli projects
docker exec -it worqer-cli-container worqer-cli deploy my-app
docker exec -it worqer-cli-container worqer-cli logs my-appsync, deploy and logs take the alias shown by worqer-cli projects — the same name the dashboard displays.
worqer-cli loginAuthorize the CLI through worqer.app.
Prints a short-lived worqer.app URL and activation code. Approve it with an operator or admin account; no browser callback or local port is needed. The saved Firebase Auth session identifies every request sent directly to worq3r-api.
worqer-cli loginworqer-cli logoutSign out and remove the local session.
Deletes the stored session file. Nothing on the server changes: this only removes this machine's ability to act as you.
worqer-cli logoutworqer-cli whoamiShow who you are signed in as and what you may do.
Prints the account, user id, workspace and role carried by your session. Every refusal from the database traces back to one of those four values, so this is the first thing to check when a command is denied rather than failing.
worqer-cli whoamiworqer-cli installInstall and run worqer-runner on this machine via Docker.
Native-binary-only helper that pulls cjarn/worq3r-runner:latest and runs it with persistent data under ~/data. CLI and Runner share ~/data/firebase-session.json, so only the first one needs authorization. The minimal CLI container intentionally has no Docker client; container users start the Runner with the direct Docker command in the worker documentation.
worqer-cli install
worqer-cli install --image cjarn/worq3r-runner:latestworqer-cli update runnerReinstall the Runner with its most recent image.
Pulls cjarn/worq3r-runner:latest and force-recreates only the Runner container. Its saved login, claim identity, clones and persistent data remain mounted. The previous spelling, upgrade runner, remains available as an alias.
worqer-cli update runner
worqer-cli update runner --image cjarn/worq3r-runner:latestworqer-cli reset-token runnerAuthorize a fresh Runner login token.
Opens a new confirmation in worqer.app, saves the fresh Firebase session and then recreates the Runner. It preserves the claim token, worker identity, clones and data; a failed authorization leaves the existing container untouched.
worqer-cli reset-token runnerworqer-cli claim <token>Claim a worker using its claim token.
Ties the worker to your account, so you — and nobody else, until you share it — can sync and deploy on it. Claiming writes to the worker record, which needs the operator or admin role; a viewer is refused here with an explanation rather than a bare permission error.
worqer-cli claim AbCdEfGhIjKlMnOpQrStUvWxworqer-cli workersList workers connected to this workspace.
Shows each worker you are allowed to see, with its id, status and capacity. A worker only appears once it has checked in and its access rules admit you — private workers belonging to someone else are absent, not listed as denied.
worqer-cli workersworqer-cli projectsList projects in this workspace.
The ALIAS column is the name every other command takes as <project>. It is the same name the dashboard shows, so the two never disagree.
worqer-cli projectsworqer-cli sync <project>Pull the latest changes for a project on its worker.
Pulls the repository to the latest commit on its configured branch. Git only: it does not rebuild the image or restart the running containers. Use deploy when the running application has to change.
worqer-cli sync my-app
worqer-cli sync my-app --follow
worqer-cli sync my-app --worker <worker-id>worqer-cli deploy <project>Deploy a project on its worker.
A full rebuild and restart: it pulls, builds and recreates the project's containers. Deploy is idempotent — running it again replaces the current containers rather than requiring a manual stop first. It queues the job and returns immediately unless you ask it to wait.
worqer-cli deploy my-app
worqer-cli deploy my-app --follow
worqer-cli deploy my-app --commit 9f2c1ab --follow
worqer-cli deploy my-app --worker <worker-id>worqer-cli history <project>Show a project's deployment history, with the commit each one shipped.
Past deploys and builds for one project, newest first — the same view as the Historial tab in the project's settings. The commit column is what `deploy --commit` takes, so this is where a rollback starts. Syncs are left out: they pull code without rebuilding, so they never changed what was running.
worqer-cli history my-app
worqer-cli history my-app --limit 10worqer-cli logs <project>Show the latest logs for a project's containers.
A snapshot of whatever the worker last reported, not a live tail. Sync or deploy the project, or refresh logs from the dashboard, to pull more recent output.
worqer-cli logs my-appworqer-cli deploymentsList recent deployment jobs.
Every queued, running and finished job you can see, newest first, with its action, project, worker and result.
worqer-cli deployments
worqer-cli deployments --project my-app --limit 10worqer-cli statusOne-command summary of the workspace.
Workers, projects and recent jobs in a single view — the fastest way to answer whether anything is wrong before opening the dashboard.
worqer-cli statusAccepted by the CLI itself and by every subcommand.
| Flag | What it does |
|---|---|
--help, -h | Help for the CLI or for any single command. `worqer-cli <command> --help` shows that command's own options. |
--version | Print the version of the binary you are running. |
Never required for normal use. Every value is compiled into the binary; these variables override one of them at runtime, which is useful for pointing a development build at a different project without rebuilding it.
| Variable | Overrides |
|---|---|
WORQER_DATA_BACKEND | Must remain api; direct Firebase data access is rejected. |
WORQ3R_API_URL | Point a development binary at a different worq3r-api endpoint. |
WORQ3R_API_KEY | Override the API transport credential in a development build. |
WORQER_FIREBASE_API_KEY | Override the compiled-in Firebase Web API key. |
WORQER_WORKSPACE_ID | Operate on a workspace other than the compiled-in default. |
| Path | What it holds |
|---|---|
~/data/firebase-session.json | The shared CLI and Runner login. The first login creates it; both reuse and refresh it. |
~/data/client-id | The stable identity used to audit this CLI installation. |
~/data/runner | The Compose file `install` writes, and the directory it runs from. |
~/data | The worker's visible persistent state, including worker-token and worker-id. |
~/data/clones | Where the worker clones your repositories on this machine. |
~/data/nginx | Persistent .conf files for the optional Nginx service managed by this worker. |
~/data holds the worker's identity. Copying it to a second machine gives two workers the same identity, and they will fight over the same record — install a fresh worker instead.
| Message | What to do |
|---|---|
| Homebrew login redirects to a host instead of showing a worqer.app confirmation | Run worqer-cli version. If it reports 0.1.0, run brew update and brew upgrade --cask iagorithm/tap/worqer-cli. If it remains stale, untap, tap and reinstall using the commands in Homebrew on macOS. |
| Permission denied on any command | Run worqer-cli whoami. A missing workspace means the account was never provisioned; a viewer role can list things but cannot claim, sync or deploy. |
| Your role changed but the CLI still refuses you | Claims are frozen into a token when it is minted. The CLI refreshes a stale-looking token by itself; if it persists, run worqer-cli login again. |
docker was not found on PATH | install needs Docker and the Compose v2 plugin on this machine. Install Docker, then run it again. |
The worker never appears in workers | Check the container is running, then re-read its token from ~/data/worker-token and claim it again. A worker only appears once it has checked in. |
project not found for a name you can see in the dashboard | Use the alias from worqer-cli projects, not the repository name or the display title. |
| A deploy stays queued | The target worker is offline or busy with another job for the same project. Confirm with worqer-cli workers and worqer-cli deployments. |