kovidgoyal/kitty · error
No secret backend specified for: %s
Error message
No secret backend specified for: %s
What it means
resolve_secret requires secret values to carry a backend prefix (backend:value). If the value has no separator, no backend can be determined and this error names the offending key (password, etc.).
Source
Thrown at kittens/ssh/config.go:42
var _ = fmt.Print
func resolve_secret(key, val string) (string, error) {
v := strings.TrimSpace(val)
if v == "" {
return "", nil
}
if b, s, ok := strings.Cut(v, ":"); ok {
b = strings.ToLower(strings.TrimSpace(b))
s = strings.TrimSpace(s)
switch b {
case "text":
return s, nil
default:
return "", fmt.Errorf("Unsupported secret backend %s for %s. Supported backends: text", b, key)
}
}
return "", fmt.Errorf("No secret backend specified for: %s", key)
}
func resolve_secrets(c *Config, only_syntax bool) error {
_ = only_syntax // this will be useful when using backends that require user interaction
if r, err := resolve_secret("password", c.Password); err != nil {
return err
} else {
c.Password = r
}
if r, err := resolve_secret("totp_secret", c.Totp_secret); err != nil {
return err
} else {
c.Totp_secret = r
}
return nil
}
type EnvInstruction struct {View on GitHub (pinned to 6d5d0c4406)
Solutions
- Prefix the value with the backend: password: text:mypass
- Check every secret-typed key in the config (password, passphrase, etc.) for the prefix
Example fix
// before password: "mypass" // after password: "text:mypass"
Defensive patterns
Strategy: validation
Validate before calling
if !strings.Contains(value, ":") { /* reject: missing backend prefix */ } Type guard
func hasBackendPrefix(v string) bool { return strings.Contains(v, ":") } Prevention
- Always prefix secrets with text:
- Validate config in CI before deploying
When it happens
Trigger: Setting password: mypass without the text: prefix in the ssh kitten config.
Common situations: Migrating from older configs or other ssh wrappers that accepted bare passwords.
Related errors
- Unsupported secret backend %s for %s. Supported backends: te
- The env directive must not be empty
- %s does not exist
- The value {x} is not a known choice
- The value {val} is not a valid choice for progress_bar
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/247f9b1b18659d30.
Report an issue: GitHub.