{"record":{"id":"04693499c67c8f18","repo":"basecamp/kamal","slug":"unknown-secrets-adapter-name","errorCode":null,"errorMessage":"Unknown secrets adapter: #{name}","messagePattern":"Unknown secrets adapter: #(.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"lib/kamal/secrets/adapters.rb","lineNumber":14,"sourceCode":"require \"active_support/core_ext/string/inflections\"\nmodule Kamal::Secrets::Adapters\n  def self.lookup(name)\n    name = \"one_password\" if name.downcase == \"1password\"\n    name = \"last_pass\" if name.downcase == \"lastpass\"\n    name = \"gcp_secret_manager\" if name.downcase == \"gcp\"\n    name = \"bitwarden_secrets_manager\" if name.downcase == \"bitwarden-sm\"\n    adapter_class(name)\n  end\n\n  def self.adapter_class(name)\n    Object.const_get(\"Kamal::Secrets::Adapters::#{name.camelize}\").new\n  rescue NameError => e\n    raise RuntimeError, \"Unknown secrets adapter: #{name}\"\n  end\nend\n","sourceCodeStart":1,"sourceCodeEnd":17,"githubUrl":"https://github.com/basecamp/kamal/blob/eee0083b38661c3707c6b6052cc89e85038a096c/lib/kamal/secrets/adapters.rb#L1-L17","documentation":"kamal secrets fetch -a NAME resolves the adapter by camelizing NAME into a class under Kamal::Secrets::Adapters. Only four aliases are normalized (1password→one_password, lastpass→last_pass, gcp→gcp_secret_manager, bitwarden-sm→bitwarden_secrets_manager); any other name that does not match a shipped adapter class raises RuntimeError \"Unknown secrets adapter\" (rescued NameError from Object.const_get).","triggerScenarios":"Running kamal secrets fetch -a aws (no alias exists; must be aws_secrets_manager), -a op, -a vault, -a bitwarden when you meant bitwarden-sm, or any typo like one-password. Also raised when calling Kamal::Secrets::Adapters.lookup programmatically with an arbitrary string.","commonSituations":"Guessing short provider names instead of the exact snake_case class name; docs/examples using shorthand; new adapters referenced on an older installed Kamal version that does not ship the class.","solutions":["Use the exact adapter name: one of aws_secrets_manager, bitwarden, bitwarden_secrets_manager, doppler, enpass, gcp_secret_manager, last_pass, one_password, passbolt (or the aliases 1password, lastpass, gcp, bitwarden-sm)","List what your installed version supports: ls of the kamal gem's lib/kamal/secrets/adapters directory, or check the docs for your Kamal version","If the adapter genuinely does not exist in your version, upgrade the kamal gem: gem install kamal / bundle update kamal"],"exampleFix":"# before\nkamal secrets fetch -a aws RAILS_MASTER_KEY\n# => Unknown secrets adapter: aws\n\n# after\nkamal secrets fetch -a aws_secrets_manager --account my-profile RAILS_MASTER_KEY","handlingStrategy":"validation","validationCode":"KNOWN_ADAPTERS = %w[\n  aws_secrets_manager bitwarden bitwarden_secrets_manager doppler enpass\n  gcp_secret_manager last_pass one_password passbolt test\n  1password lastpass gcp bitwarden-sm\n].freeze\n\nabort \"unknown secrets adapter #{ARGV[0]}\" unless KNOWN_ADAPTERS.include?(ARGV[0])","typeGuard":"def known_adapter?(name)\n  %w[aws_secrets_manager bitwarden bitwarden_secrets_manager doppler enpass\n     gcp_secret_manager last_pass one_password passbolt test\n     1password lastpass gcp bitwarden-sm].include?(name)\nend","tryCatchPattern":null,"preventionTips":["Use the exact snake_case adapter names; the only aliases are 1password, lastpass, gcp, bitwarden-sm","Wrap adapter selection in scripts with the known-adapter check above for a clearer failure than the const_get rescue"],"tags":["kamal","secrets","cli","adapter","vault"],"backgroundTag":"unknown-provider-adapter","analyzedSha":"eee0083b38661c3707c6b6052cc89e85038a096c","analyzedAt":"2026-08-21T15:17:22.045Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}