nikivdev/code · error
remote commit message unauthorized. Run `f auth` to login.
Error message
remote commit message unauthorized. Run `f auth` to login.
What it means
Thrown when the remote (myflow) commit-message endpoint responds with HTTP 401 Unauthorized, indicating the user's auth token is missing, expired, or invalid. The message explicitly directs the user to `f auth` to re-login.
Source
Thrown at src/commit.rs:13014
))
.context("failed to create HTTP client for remote commit message")?;
let payload = json!({
"diff": diff,
"status": status,
"truncated": truncated,
});
let response = client
.post(&url)
.bearer_auth(token)
.json(&payload)
.send()
.context("failed to request remote commit message")?;
if !response.status().is_success() {
if response.status() == StatusCode::UNAUTHORIZED {
bail!("remote commit message unauthorized. Run `f auth` to login.");
}
if response.status() == StatusCode::PAYMENT_REQUIRED {
bail!(
"remote commit message requires an active subscription. Visit myflow to subscribe."
);
}
let status = response.status();
let body = response.text().unwrap_or_default();
bail!("remote commit message failed: HTTP {} {}", status, body);
}
let payload: RemoteCommitMessageResponse = response
.json()
.context("failed to parse remote commit message response")?;
let message = payload.message.trim().to_string();
if message.is_empty() {
bail!("remote commit message was empty");View on GitHub (pinned to a747e741ae)
Solutions
- Run `f auth` to log in again and refresh the token.
- Delete stale credentials and re-authenticate from scratch.
- Verify the client is sending the token header correctly (check for recent auth code changes).
- Check system clock if tokens are time-based and appear prematurely expired.
Defensive patterns
Strategy: validation
Validate before calling
// Check for stored credentials before calling the remote endpoint
if !auth_token_path.exists() || read_token()?.is_empty() {
return Err(anyhow!("Not logged in. Run `f auth` first."));
} Type guard
fn has_valid_token(token: &Option<String>) -> bool {
token.as_deref().map(|t| !t.is_empty()).unwrap_or(false)
} Try / catch
match result {
Err(e) if e.to_string().contains("unauthorized") => {
eprintln!("Session expired. Please run `f auth` to re-login.");
prompt_reauth()?;
}
other => other,
} Prevention
- Re-run `f auth` periodically; tokens expire.
- Handle 401 centrally by triggering automatic re-login.
- Don't delete or hand-edit the credential store file.
- Detect token expiry client-side and refresh before requests.
When it happens
Trigger: Calling the remote commit-message API with an expired or revoked session token, or with no token stored at all.
Common situations: Token expired after inactivity; user logged out on another machine invalidating the session; auth file deleted or corrupted; clock skew invalidating token validation.
Understand the failure class
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- device auth start failed: HTTP {}
- device auth poll failed: HTTP {}
- device code expired. Run `f auth` again.
- MAPLE_API_TOKEN is not configured
- remote review unauthorized. Run `f auth` to login.
AI-assisted analysis of nikivdev/code@a747e741ae (2026-09-01).
Data as JSON: /api/errors/6d28fd47ec489be0.
Report an issue: GitHub.