multica-ai/multica · error
not authenticated
Error message
not authenticated
What it means
Thrown by autoWatchWorkspaces after `multica login` when the freshly saved profile config has an empty token. The function deliberately loads the exact profile via LoadCLIConfigForProfile (not the task-safe resolvers) and fails closed if authentication state is missing, aborting the post-login workspace auto-watch step.
Source
Thrown at server/cmd/multica/cmd_login.go:97
return nil
}
fmt.Fprintf(os.Stderr, "\n→ Run 'multica daemon start' to start your local agent runtime.\n")
return nil
}
func autoWatchWorkspaces(cmd *cobra.Command) error {
// runLogin has already passed the human/local command guard and saved the
// newly authenticated profile. Read that exact profile here rather than the
// general task-safe resolvers, which intentionally fail closed on a lone
// MULTICA_DAEMON_PORT signal.
profile := resolveProfile(cmd)
cfg, err := cli.LoadCLIConfigForProfile(profile)
if err != nil {
return err
}
if cfg.Token == "" {
return fmt.Errorf("not authenticated")
}
if cfg.ServerURL == "" {
return fmt.Errorf("server URL not configured")
}
client := cli.NewAPIClient(normalizeAPIBaseURL(cfg.ServerURL), "", cfg.Token)
ctx, cancel := cli.APIContext(context.Background())
defer cancel()
var workspaces []struct {
ID string `json:"id"`
Name string `json:"name"`
}
if err := client.GetJSON(ctx, "/api/workspaces", &workspaces); err != nil {
return fmt.Errorf("list workspaces: %w", err)
}
if len(workspaces) == 0 {View on GitHub (pinned to 2c0912b6ec)
Solutions
- Inspect the profile config file for the active profile and confirm the token field is populated
- Verify write permissions on the CLI config directory; fix the filesystem issue and re-run `multica login`
- Ensure --profile matches the profile you authenticated against
- Re-run `multica login` after correcting the environment
Defensive patterns
Strategy: validation
Validate before calling
# bash: confirm the profile config actually holds a token after login
multica config show --output json 2>/dev/null | jq -e '.token | length > 0' >/dev/null \
|| { echo "login did not persist a token — check config dir permissions" >&2; exit 2; } Prevention
- Ensure the CLI config directory is writable (containers/CI especially)
- Authenticate and use the same --profile consistently
- Verify the config file after first login
When it happens
Trigger: Login flow completes but the token fails to persist to the profile config file; the config file is unreadable/corrupted in a way that yields an empty Token; a profile flag pointing at a profile that was never actually written; filesystem permissions blocking the config write.
Common situations: Home or config directory read-only (containers, restricted CI); XDG/config path misconfiguration; concurrent logins overwriting the profile; auth backend returning success without a token.
Understand the failure class
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- server URL not configured
- get source agent: %w
- invalid token format: must start with %s
- unsupported platform: %s
- could not start the local login callback server (used to rec
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/7841c34d940e3462.
Report an issue: GitHub.