Configuration Loading Behavior Specification
This document specifies the behavior of the CLI's configuration loading system, including precedence rules, authentication interactions, and error handling.
Overview
Configuration Loading Behavior Specification
Overview
This document specifies the behavior of the CLI's configuration loading system, including precedence rules, authentication interactions, and error handling.
Authentication Precedence
Authentication Source Priority:
- Environment Variable:
CONTINUE_API_KEYenvironment variable - File-Based Auth:
~/.continue/auth.jsonfile - No Authentication: Unauthenticated mode
Authentication Effects:
- Environment Auth: Always uses personal organization, no config URI persistence
- File Auth: Supports organizations, persists config URIs, token refresh
- No Auth: Limited to default assistant, no personalization
Configuration Source Precedence
When CLI is invoked, config source is determined in this order:
-
CLI
--configFlag (highest priority)- File path (starts with
.,/,~): Loads local YAML file - Assistant slug (
owner/package): Fetches from Continue platform - Overrides any saved preferences
- File path (starts with
-
Saved Config URI (if no
--configflag)- Retrieved from authentication config
- Converts
file://URIs back to file paths - Converts
slug://URIs back to assistant slugs
-
Default Resolution (if no flag and no saved URI)
- Authenticated: First user assistant from
listAssistants() - config.yaml: The saved config file at
~/.continue/config.yaml - Unauthenticated: Falls back to
continuedev/default-cli-config
- Authenticated: First user assistant from
Authentication State Interactions
Authenticated Users
Available Options:
- Personal assistants
- Organization assistants (if organization selected)
- Local YAML files
- Public assistants
Behavior:
listAssistants()returns personalized results- Config selections are saved as URIs in auth config
- Organization context affects available assistants
Unauthenticated Users
Available Options:
- Local YAML files only
- Default assistant (
continuedev/default-cli-config)
Behavior:
- No access to personal or organization assistants
- No config URI persistence
- Direct fallback to default when no config specified
Environment Variable Auth (CONTINUE_API_KEY)
Behavior:
- Treated as authenticated for API access
- Always uses personal organization context
- No persistence of config URIs
- Cannot switch organizations
Organization Context
Organization Selection:
- Interactive Mode: Auto-selects first available organization
- Headless Mode: Defaults to personal organization
- Environment Auth: Always personal organization
Effects on Config Loading:
- Organization ID passed to all API calls
- Affects which assistants appear in
listAssistants() - Organization changes trigger complete config reload
Error Handling Behavior
Config Loading Errors
File Not Found:
- Local file specified but doesn't exist
- Result: Error thrown, CLI exits
Invalid YAML:
- Local file exists but has syntax errors
- Result: Parsing error thrown, CLI exits
Network Failures:
- API calls fail for assistant slugs
- Result: Network error bubbled up, CLI exits
Assistant Not Found:
- Valid slug format but assistant doesn't exist
- Result: 404 error from API, CLI exits
Fallback Scenarios
No User Assistants:
- Authenticated user has no personal assistants
- Result: Falls back to
continuedev/default-cli-config
Default Agent Unavailable:
- Fallback to default agent fails
- Result: Error thrown, CLI cannot start
Token Expired:
- Saved auth token is expired
- Result: Automatic refresh attempted, re-auth required if refresh fails
Config URI Persistence
When URIs are Saved:
- Any successful config load via service layer
- File paths converted to
file://path/to/config.yaml - Assistant slugs converted to
slug://owner/package
When URIs are NOT Saved:
- Environment variable authentication in use
- Config loading failures
- Unauthenticated sessions
Rule Integration
Rule Processing:
--ruleflags processed independently of config loading- Multiple rules supported, injected into system message
- Rule failures are warnings, don't prevent config loading
- Rule sources: file paths, hub slugs, direct strings
Session Continuity
Next Session Behavior:
- With Saved URI: Uses saved config automatically
- CLI Override:
--configflag overrides saved URI and updates it - Config Switching: UI actions update saved URI for future sessions
Cross-Session State:
- Authentication persists until logout
- Organization selection persists
- Config URI persists (except for environment auth)
Complete Decision Flow
1. Parse CLI arguments
2. Load authentication state (env var > file > none)
3. Determine config source:
- CLI --config flag provided? Use it
- Saved config URI exists? Use it
- Default resolution based on auth state
4. Load configuration:
- File path? Parse YAML locally
- Assistant slug? Fetch from API
- Default resolution? List assistants or use default
5. Process and inject rules
6. Save config URI (if authenticated via file)
7. Initialize services with loaded config
This behavior ensures users get predictable config loading with clear precedence rules while maintaining session continuity and graceful fallbacks.