{"record":{"id":"241ca0e84b46cf2b","repo":"basecamp/kamal","slug":"passbolt-cli-is-not-installed","errorCode":null,"errorMessage":"Passbolt CLI is not installed","messagePattern":"Passbolt CLI is not installed","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"lib/kamal/secrets/adapters/passbolt.rb","lineNumber":122,"sourceCode":"      found_paths = all_folders.map { |f| get_folder_path(f, all_folders) }\n      missing_paths = folder_paths.map { |path| path.join(\"/\") } - found_paths\n      raise RuntimeError, \"Could not find the following folders in Passbolt: #{missing_paths.join(\", \")}\" if missing_paths.any?\n\n      all_folders\n    end\n\n    def get_folder_path(folder, all_folders, path = [])\n      path.unshift(folder[\"name\"])\n      return path.join(\"/\") if folder[\"folder_parent_id\"].to_s.empty?\n\n      parent = all_folders.find { |f| f[\"id\"] == folder[\"folder_parent_id\"] }\n      return path.join(\"/\") unless parent\n\n      get_folder_path(parent, all_folders, path)\n    end\n\n    def check_dependencies!\n      raise RuntimeError, \"Passbolt CLI is not installed\" unless cli_installed?\n    end\n\n    def cli_installed?\n      `passbolt --version 2> /dev/null`\n      $?.success?\n    end\nend\n","sourceCodeStart":104,"sourceCodeEnd":130,"githubUrl":"https://github.com/basecamp/kamal/blob/eee0083b38661c3707c6b6052cc89e85038a096c/lib/kamal/secrets/adapters/passbolt.rb#L104-L130","documentation":"Kamal calls check_dependencies! before using the Passbolt adapter; it probes `passbolt --version` and raises this error (passbolt.rb:122) when the exit status is non-zero, i.e. no working `passbolt` executable is on PATH. It is a hard precondition: no passbolt secret can be fetched until the CLI is installed and invocable by the same environment that runs Kamal.","triggerScenarios":"Using any `passbolt/...` secret reference (kamal secrets fetch, kamal deploy, kamal env push) on a machine where the passbolt CLI binary is absent, not executable, or not on PATH for the invoking user or shell — common in CI containers, cron jobs, systemd units, and freshly provisioned machines.","commonSituations":"Fresh dev machine or CI image without the CLI; the CLI installed via a version manager (rbenv/asdf) that is not activated in the deploy shell; PATH stripped or overridden by cron/systemd; binary installed under a different name or only for another user.","solutions":["Install the passbolt CLI on the machine that runs Kamal, and verify with `passbolt --version`.","Ensure the binary is on PATH for the exact user and context invoking kamal; for cron/systemd use an absolute PATH or symlink the binary into /usr/local/bin.","Re-run `passbolt configure` after installing so credentials and server config exist.","Add a CI step that fails fast when `command -v passbolt` returns nothing."],"exampleFix":"// before\n$ kamal deploy\nRuntimeError: Passbolt CLI is not installed\n\n// after\n# install the passbolt CLI for your platform, then:\n$ passbolt --version && passbolt configure\n$ command -v passbolt   # e.g. /usr/local/bin/passbolt\n$ kamal deploy","handlingStrategy":"validation","validationCode":"# Fail fast before any passbolt-dependent Kamal task\nsystem('passbolt --version >/dev/null 2>&1') or abort('Passbolt CLI is not installed — install it and run `passbolt configure`')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add `command -v passbolt || exit 1` to CI before any kamal command","Install the CLI to a PATH location stable across shells, e.g. /usr/local/bin","Bake the CLI plus its config into CI/deploy images so probes never fail"],"tags":["passbolt","kamal","cli","missing-dependency","path"],"backgroundTag":"missing-cli-tool","analyzedSha":"eee0083b38661c3707c6b6052cc89e85038a096c","analyzedAt":"2026-08-21T15:17:22.045Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}