Dibbla CLI
The dibbla CLI scaffolds projects and manages applications, databases, secrets, and workflows on the Dibbla platform. Deployed apps are available at https://<alias>.dibbla.com.
Prerequisites
Install the CLI if it isn't already on the user's PATH:
| Platform | Command | |
|---|---|---|
| macOS (Homebrew) | brew install dibbla-agents/tap/dibbla | |
| macOS / Linux (shell installer) | `curl -fsSL https://install.dibbla.com/install.sh \ | sh` |
| Windows (PowerShell) | `powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://install.dibbla.com/install.ps1 \ | iex"` |
| Verify | dibbla --version |
The shell installer drops the binary into ~/.local/bin and adjusts PATH if needed. Self-update is available inside task files via the same installer URL.
Deploying requires a Dockerfile at the root of the directory you pass to dibbla deploy. The CLI does not auto-detect languages or generate a Dockerfile — if it's missing, the backend rejects the build with log output. All bundled templates in dibbla-agents/dibbla-public-templates ship a working Dockerfile you can copy (typically multi-stage: Node → JS build → Go → binary → small runtime image, EXPOSE 80).
Commands at a glance
| Area | Commands | ||
|---|---|---|---|
| Run | `run [path\ | url], run --preview, run --env KEY=VAL, run --env-file <file>, run --work-dir <dir>, run --format plain\ | gh` |
| Template | template list [--refresh] [-v], template install <id> [<dir>] [--force] | ||
| Skills | skills list, skills install <id> (--user, --force, --no-agents) — install AI-agent guidance into .claude/skills/ + AGENTS.md + GEMINI.md | ||
| Login | login [api_url], login --browser, login --api-key <token>, login --api-url <url>, login --write-env, login --no-keychain, logout | ||
| Feedback | feedback <message>, feedback list, feedback delete <id> | ||
| Deploy | deploy [path] -m "<msg>" [--alias name] [--update] [--require-login] [--access-policy] [--google-scopes] — deploy from directory; -m becomes the VCS commit subject | ||
| Apps | apps list, apps update <alias>, apps delete <alias> | ||
| Db | db list, db create, db delete, db dump, db restore, db connect | ||
| Secrets | secrets list, secrets set, secrets get, secrets delete (global or -d <alias>) | ||
| Workflows | workflows list, get, create, update, delete, validate, execute, url, api-docs | ||
| Nodes | nodes add <wf>, nodes remove <wf> <id> | ||
| Edges | edges add <wf> "<edge>", edges remove, edges list | ||
| Inputs | inputs set <wf> <node> <input> <value> | ||
| Tools | tools add <wf> <agent> <tool>, tools remove | ||
| Revisions | revisions list <wf>, revisions create, revisions restore | ||
| Functions | functions list, functions get <server> <name> |
Agent guidelines
Interactive prompts: The following commands prompt for confirmation and will block if run non-interactively. Always pass --yes (or -y) when running these as an agent:
dibbla apps delete <alias> --yesdibbla db delete <name> --yesdibbla secrets delete <name> --yesdibbla workflows delete <name> --yesdibbla nodes remove <wf> <id> --yesdibbla feedback delete <id> --yes
Deploying an app for the first time:
- Check if the app already exists:
dibbla apps list - If it does not exist, deploy with all required environment variables included in the deploy command — there is no app to attach them to yet:
dibbla deploy. --alias my-app -m "feat: initial deploy" \ -e DATABASE_URL=postgres://... -e API_KEY=secret -e NODE_ENV=production - If it already exists, use
--updatefor a zero-downtime rolling update:dibbla deploy. --alias my-app -m "fix: resolve 500 on /search" --updateTo change env vars on an existing app, useapps updateinstead:dibbla apps update my-app -e NEW_VAR=value
Key rules:
- Every
dibbla deploymust include-m "<message>". The value becomes the git commit subject in the app's Dibbla-managed VCS history (and on the GitHub mirror, if configured). Treat it like a git commit: present-tense imperative, under ~72 chars, covering what changed and why — e.g.-m "fix: handle null org in /api/me",-m "feat: add nightly db backup workflow",-m "chore: bump node to 20.14". For retries or mechanical redeploys, still say so explicitly:-m "redeploy: retry after CF 524". Max 500 chars. Never rundibbla deploywithout-m; a blank deploy history is a bug, not a default. --forcecauses downtime (tears down and redeploys). Prefer--updatefor existing apps.--forceand--updateare mutually exclusive.- Environment variables set via
deploy -eorapps update -epersist across updates — you only need to pass them once. - Login guard: Use
--require-loginto require authentication. Combine with--access-policy invite_onlyto restrict to invited users, orall_membersfor org-wide access. Use--google-scopesto request additional Google OAuth scopes (e.g. Drive, Calendar). - Use
--quiet/-qondb list,db delete,db connectfor machine-readable output in scripts. db create --deployment <alias>scopes the database and its auto-created secret to a specific deployment. The scoped secret is namedDATABASE_URL_<UPPERCASED_UNDERSCORED_NAME>(e.g.DATABASE_URL_MY_DBfor databasemy_db), not a plainDATABASE_URL— app code must read the suffixed env var.db connectprints a psql-compatible connection string via the Dibbla database proxy. Use-qfor scripting:psql $(dibbla db connect mydb -q).- 524 on deploy ≠ failure.
dibbla deployholds a single HTTP connection during the backend build; builds over ~100s may return a Cloudflare 524 on the client even when the backend succeeds. Wait 2–5 minutes, then rundibbla apps listto check. Do not retry with--force— use--updateif you must retry. .dibblaignorecontrols Dibbla's managed VCS history, not what the Docker build sees. The backend always strips.env,node_modules/,dist/,*.pem,*.keyand similar from VCS and reports each hit inDeployResponse.vcs_filteredas a warning. Adding those paths (or any generated/large artifact) to.dibblaignoreat the deploy root silences the warning and keeps VCS clean. Per-file and per-commit size caps are hard rejections — committing a large build artifact will fail the deploy withErrCodeVCSFiltered; the fix is to add the path to.dibblaignore. Full details inreference.md→ deploy →.dibblaignore.- Managed Postgres uses a self-signed TLS cert. App clients (pg, psycopg2, Prisma) need explicit SSL handling — see
reference.md"TLS for application database clients" for working snippets.
Pre-deploy guardrails: Before calling dibbla deploy, you MUST complete the pre-deploy checklist and present findings to the user. Always wait for explicit user confirmation before deploying or fixing issues — never deploy autonomously. The guardrails workflow also writes a REVIEW.md file to the project root — the platform reads this and displays a review status indicator in the dashboard. See guardrails.md for the full checklist.
Non-TTY / agentic invocation:
- When running from inside Claude Code's
!prefix, an agent shell, CI with a browser, or any other non-TTY context, usedibbla login --browserinstead of baredibbla login. The interactive flow needs stdin for the survey picker;--browserskips that and goes straight to browser-based OAuth via a localhost callback. - For true headless (SSH sessions, cloud VMs, CI runners with no local browser), use
dibbla login --api-key <token>or setDIBBLA_API_TOKEN(and optionallyDIBBLA_API_URL) env vars — the CLI reads env vars in CI automatically. - Cloud VMs / SSH / Docker (no keyring):
dibbla login --api-key=<t> --api-url=<url> --write-env --no-keychainvalidates the token against the API and writesDIBBLA_API_TOKEN+DIBBLA_API_URLto./.env(patching.gitignoreif needed), without touching the OS keyring. Use this on fresh Ubuntu/EC2/GCE/Docker images where libsecret/gnome-keyring/pass isn't installed. Every subsequentdibbla *command in that directory reads credentials from.env. Requires CLI ≥ v1.2.4. .envin CWD is read by every command, includinglogin. PutDIBBLA_API_TOKEN=…andDIBBLA_API_URL=https://api.dibbla.netin./.envand everydibblainvocation from that directory targets that server and token — nologincall needed. Shell-exported vars still win over.env(godotenv does not overwrite). Requires CLI ≥ v1.2.4.DIBBLA_AUTH_SERVICE_URLis an internal compat alias forDIBBLA_API_URL, injected by the steprunner into child processes launched bydibbla run. Users should putDIBBLA_API_URLin.env;DIBBLA_AUTH_SERVICE_URLexists so child processes see the same server via the desktop/steprunner convention name.
Running task files and templates:
dibbla run <path>executes adibbla-task.yamlpipeline locally. Tool checks, shell commands, background dev servers, and browser-open side effects are all possible — the task file becomes shell under the user's account.dibbla run <https-url>fetches and executes a yaml from the network. This is equivalent tocurl | bash— only run yamls from sources the user trusts (e.g.github.com/dibbla-agents/*). Work-dir defaults to the user's invocation CWD, so bootstrap clones land in the expected directory rather than in a temp dir.dibbla template install <id>is ergonomic sugar overmkdir./<template-path> && cd./<template-path> && dibbla run <bootstrap-url>. It refuses if the destination directory exists; pass--forceto reuse. Usedibbla template listto see available ids.- Prefer
dibbla run --previewordibbla template listbefore actually running, so the user can see what will execute.
Installing this skill into a project (so other agents see it too):
dibbla skills install dibblawrites the skill files into./.claude/skills/dibbla/plusAGENTS.mdandGEMINI.mdpointers at the project root. Every major coding agent then picks up the guidance automatically — Claude Code via its native skill path, Cursor/Opencode/Codex/Copilot/Windsurf/Aider viaAGENTS.md(the 2026 open standard), Gemini CLI viaGEMINI.md.- The skill content is embedded in the CLI binary (
go:embed), so no network is required and the skill version is locked to the CLI version the user has installed. Rundibbla --versionto see which one. - Flags:
--userinstalls into$HOMEfor machine-wide coverage instead of the current directory;--no-agentsskipsAGENTS.mdandGEMINI.md(Claude Code only);--forceoverwrites skill files that have been edited locally. Unknown files inside.claude/skills/<id>/are always preserved. - The AGENTS.md / GEMINI.md pointer block is marker-delimited (
<!-- >>> dibbla skill >>> -->…<!-- <<< dibbla skill <<< -->) so existing AGENTS.md content outside the markers is preserved byte-for-byte across reruns. - Re-running is idempotent — if nothing changed, nothing is rewritten (no mtime bump). Use
dibbla skills listto see what skills the current CLI ships.
Additional resources
- Full command and flag reference: see reference.md for usage, arguments, and all flags.
- Usage examples: see examples.md for copy-paste examples and scripting patterns.
- Pre-deploy guardrails: see guardrails.md for the mandatory pre-deploy checklist.
When suggesting or generating dibbla commands, use the reference for exact syntax and the examples for typical workflows.