{"record":{"id":"65462d39d9ee0193","repo":"basecamp/kamal","slug":"doppler-cli-is-not-installed","errorCode":null,"errorMessage":"Doppler CLI is not installed","messagePattern":"Doppler CLI is not installed","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"lib/kamal/secrets/adapters/doppler.rb","lineNumber":50,"sourceCode":"\n    def secrets_get_flags(secrets)\n      unless service_token_set?\n        project, config, _ = secrets.first.split(\"/\")\n\n        unless project && config\n          raise RuntimeError, \"Missing project or config from '--from=project/config' option\"\n        end\n\n        project_and_config_flags = \"-p #{project.shellescape} -c #{config.shellescape}\"\n      end\n    end\n\n    def service_token_set?\n      ENV[\"DOPPLER_TOKEN\"] && ENV[\"DOPPLER_TOKEN\"][0, 5] == \"dp.st\"\n    end\n\n    def check_dependencies!\n      raise RuntimeError, \"Doppler CLI is not installed\" unless cli_installed?\n    end\n\n    def cli_installed?\n      `doppler --version 2> /dev/null`\n      $?.success?\n    end\nend\n","sourceCodeStart":32,"sourceCodeEnd":58,"githubUrl":"https://github.com/basecamp/kamal/blob/eee0083b38661c3707c6b6052cc89e85038a096c/lib/kamal/secrets/adapters/doppler.rb#L32-L58","documentation":"Raised by check_dependencies! in Kamal::Secrets::Adapters::Doppler when `doppler --version 2> /dev/null` exits non-zero, i.e. the Doppler CLI binary is not usable on PATH. Base#fetch always runs this dependency probe before login/fetch_secrets, so the error appears regardless of token state.","triggerScenarios":"adapter.fetch(...) (e.g. `kamal secrets pull` with the doppler adapter) on a host where `doppler` is absent from PATH: not installed, installed under a user-local path not in the kamal process's PATH, or a broken binary.","commonSituations":"CI images without the doppler package; installing via brew under a non-default prefix; PATH customized in .zshrc but kamal runs from cron/systemd/CI where that rc is not sourced.","solutions":["Install the CLI: `brew install dopplerhq/cli/doppler` (macOS/Linux) or curl -Ls https://cli.doppler.com/install.sh | sh, then confirm `doppler --version` works in the same environment that runs kamal.","If installed but not found, add its install dir to PATH for the kamal process (CI step, Dockerfile ENV, or shell profile).","Pin the install in your provisioning scripts so fresh deploy boxes get it automatically."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"require \"open3\"\n\ndef doppler_installed?\n  Open3.capture3(\"doppler\", \"--version\")[2].success?\nend\n\nabort \"Install the Doppler CLI (brew install dopplerhq/cli/doppler)\" unless doppler_installed?","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Install doppler CLI in the image/CI that runs kamal; assert with `which doppler` in a preflight step.","Bake the install into Dockerfile so fresh runners are consistent.","Watch PATH in cron/systemd contexts where user-local installs are invisible."],"tags":["ruby","kamal","doppler","cli","dependency","path","secrets"],"backgroundTag":"cli-not-installed","analyzedSha":"eee0083b38661c3707c6b6052cc89e85038a096c","analyzedAt":"2026-08-21T15:17:22.045Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}