Authentication Matrix
This reference provides a complete mapping of which commands require which authentication tokens, including fallback behavior and special cases.Command Overview
Detailed Breakdown
Search Commands
Base Search (kagi search)
Key insight: Base search is the only command with fallback behavior, and that fallback only matters when you explicitly opt into API-first mode.
Lens Search (kagi search --lens <INDEX>)
No fallback: Lens search requires session token exclusively.
Search Filters and Session-Only Options
--region, --from-date, and --to-date map to the current V1 Search API filters object. --lens, --time, --order, --verbatim, and personalization flags remain session-only because they target the subscriber web-product flow exposed by this CLI.
Authentication Commands
kagi auth
- Purpose: Interactive setup wizard
- Network: Yes, during credential validation
- Uses: The credential the user just pasted
- Writes:
~/.config/kagi-cli/config.toml - TTY only: In non-interactive environments, use
auth set,status, orcheck
kagi auth status
- Purpose: Display current configuration
- Network: No
- Reads: Environment variables, config file
- Output: Shows which tokens are configured and their sources
kagi auth check
- Purpose: Validate credentials work
- Network: Yes (test search)
- Uses: Primary credential per
[auth.preferred_auth]setting (defaults to session token) - No fallback: Tests primary credential only
kagi auth set
- Purpose: Save credentials to file
- Network: No
- Writes:
~/.config/kagi-cli/config.toml - Creates: Config file if doesn’t exist
Content Commands
Summarization
Important: These are mutually exclusive. You cannot use
--subscriber with API-only options like --engine.
AI Commands
Settings Commands
Data Commands
Enrichment
Bothenrich web and enrich news require legacy KAGI_API_TOKEN:
- Teclis (web) - Enhanced web search
- TinyGem (news) - Enhanced news search
Feed Commands
Public Feeds (No Auth Required)
Token Requirements by Feature
Session Token Features
RequiresKAGI_SESSION_TOKEN:
- ✅ Lens-aware search (
--lens) - ✅ Quick Answer (
quick) - ✅ Session-only search options (
--lens,--time,--order,--verbatim, personalization flags) - ✅ Kagi Assistant prompt and thread commands (
assistant) - ✅ Custom assistant management (
assistant custom) - ✅ Ask Page (
ask-page) - ✅ Lens management (
lens) - ✅ Custom bang management (
bang custom) - ✅ Redirect management (
redirect) - ✅ Kagi Translate (
translate) - ✅ Subscriber Summarizer (
summarize --subscriber) - ✅ Base search (fallback)
API Key Features
RequiresKAGI_API_KEY:
- ✅ Current Search API (
searchwhen[auth.preferred_auth] = "api") - ✅ Extract API (
extract)
Legacy API Token Features
RequiresKAGI_API_TOKEN:
- ✅ FastGPT (
fastgpt) - ✅ Public Summarizer (
summarize) - ✅ Web Enrichment (
enrich web) - ✅ News Enrichment (
enrich news)
No Token Required
Works without authentication:- ✅ Kagi News (
news) - ✅ Small Web (
smallweb) - ✅ Auth status (
auth status)
Configuration Precedence
Resolution Order
$KAGI_CONFIG (an explicit full path), then $XDG_CONFIG_HOME/kagi-cli/config.toml, then ~/.config/kagi-cli/config.toml. Environment variables override the config file.
Example Scenarios
Scenario 1: Multiple credentials in filesearch: Uses the configured base-search preference (session by default)assistant: Uses session tokenassistant custom: Uses session tokenlens: Uses session tokennews: No token needed
search: Uses env API key when[auth.preferred_auth] = "api"summarize --subscriber: Uses file session tokenfastgpt: RequiresKAGI_API_TOKENor[auth].api_token
search: Uses env session token (not API, so tries web)assistant: Uses env session tokenredirect: Uses env session token
Common Configurations
Session Token Only
Setup:- ✅
kagi search "query"(uses session path) - ✅
kagi search --lens 2 "query" - ✅
kagi quick "what is rust" - ✅
kagi search --region us --time month "query" - ✅
kagi ask-page https://example.com "question" - ✅
kagi assistant "prompt" - ✅
kagi assistant custom list - ✅
kagi lens list - ✅
kagi bang custom list - ✅
kagi redirect list - ✅
kagi translate "Bonjour tout le monde" - ✅
kagi summarize --subscriber --url ... - ✅
kagi news - ✅
kagi smallweb
- ❌
kagi fastgpt- requires API token - ❌
kagi summarize --url ...(without —subscriber) - requires API token - ❌
kagi enrich web- requires API token - ❌
kagi extract- requires API key
Legacy API Token Only
Setup:- ✅
kagi summarize --url ... - ✅
kagi fastgpt "query" - ✅
kagi enrich web "query" - ✅
kagi news - ✅
kagi smallweb
- ❌
kagi search "query"with[auth.preferred_auth] = "api"- requires API key or session token - ❌
kagi search --lens 2- requires session token - ❌
kagi quick- requires session token - ❌
kagi search --region us "query"- requires session token - ❌
kagi ask-page https://example.com "question"- requires session token - ❌
kagi quick- requires session token - ❌
kagi assistant- requires session token - ❌
kagi assistant custom list- requires session token - ❌
kagi lens list- requires session token - ❌
kagi bang custom list- requires session token - ❌
kagi redirect list- requires session token - ❌
kagi summarize --subscriber- requires session token - ❌
kagi extract- requires API key
Session Token, API Key, and Legacy API Token
Setup:- ✅ Everything listed above
search: Uses session (default), or API key if[auth.preferred_auth = "api"]is setextract: Uses API key directlysummarizewithout--subscriber: Uses legacy API tokensummarize --subscriber: Uses sessionquick: Uses sessionask-page: Uses sessionassistant: Uses sessionassistant custom: Uses sessionlens: Uses sessionbang custom: Uses sessionredirect: Uses sessionfastgpt: Uses legacy API token
Troubleshooting Matrix
Security Considerations
Token Storage
- Environment variables: Process-wide, may leak to subprocesses
- Config file: Stored on disk, should be 600 permissions
- Shell history: May contain
exportcommands
Scope of Access
- Session Token: Full subscriber access (search, assistant, summarizer)
- API Key: Current
/api/v1API-only access (search, extract) - Legacy API Token: Older
/api/v0API-only access (fastgpt, enrich, public summarizer)