atuinsh/atuin · error
please provide a password
Error message
please provide a password
What it means
Headless registration via the legacy v0 API (when username, email and password are all supplied to `atuin register`) rejects an empty password. The password is the only secret in headless mode, so an empty string is invalid and `run` bails before calling `client.register`.
Solutions
- Supply a non-empty password via the password flag/env var in your registration script
- Fail fast in the script if the password variable is empty before invoking atuin
- Use interactive registration (omit flags) so the password is prompted, if a TTY is available
Example fix
// before
atuin register -u ci -e ci@example.com --password "$REG_PW" # REG_PW empty
// after
: "${REG_PW:?REG_PW must be set}"
atuin register -u ci -e ci@example.com --password "$REG_PW" Defensive patterns
Strategy: validation
Validate before calling
: "${REG_PW:?registration password must be set}"
[ -n "$REG_PW" ] || exit 1 Try / catch
atuin register -u "$U" -e "$E" --password "$REG_PW" || { echo 'registration failed'; exit 1; } Prevention
- Validate all headless-registration inputs before invoking atuin
- Use ${VAR:?msg} for every credential var in CI scripts
- Test provisioning scripts with deliberately empty secrets to catch this early
When it happens
Trigger: Running `atuin register -u user -e email --password ''` or with an unset env var in CI/scripting headless registration.
Common situations: CI provisioning scripts with unset PASSWORD vars; YAML/TOML config where the password key is present but empty; shell quoting dropping the value.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- please provide a new password
- please provide the current password
- please provide your password
- Config key must be non-empty and must not contain whitespace
- Failed to read from input
AI-assisted analysis of atuinsh/atuin@900007c480 (2026-09-19).
Data as JSON: /api/errors/c313234c59f2dc2c.
Report an issue: GitHub.
Appendix: source
Thrown at crates/atuin/src/command/client/account/register.rs:67
let provided = [self.username.is_some(), self.email.is_some(), self.password.is_some()]
.iter()
.filter(|&b| *b)
.count();
if provided < required_for_headless {
println!(
"Username, password, and email are all required for headless registration. \
Continuing with interactive registration.\n"
);
}
if let (Some(username), Some(email), Some(password)) =
(&self.username, &self.email, &self.password)
{
// Headless registration via v0 API (for CI / scripting).
let client = auth::auth_client(settings).await;
if password.is_empty() {
bail!("please provide a password");
}
let response = client.register(username, email, password).await?;
match response {
AuthResponse::Success { session, auth_type } => {
let meta = Settings::meta_store().await?;
let is_hub_token =
auth_type.as_deref() == Some("hub") || session.starts_with("atapi_");
if is_hub_token {
meta.save_hub_session(&session).await?;
} else {
meta.save_session(&session).await?;
println!(
"\nNote: Your account has not been fully migrated to Atuin Hub."
);
println!(View on GitHub (pinned to 900007c480)