Skip to content

benoitpetit/duckduckgo-chat-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

88 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ¦† DuckDuckGo AI Chat CLI

DuckDuckGo AI Chat CLI Logo
πŸš€ A powerful CLI tool to interact with DuckDuckGo's AI
Advanced context integration, multi-models and enhanced productivity
🧠 Now with Intelligent Analytics, Context Optimization & Persistent History

Go Version Latest Release Platform License Liberapay Donators

Features β€’ Installation β€’ Usage β€’ Configuration β€’ Intelligent Features β€’ Reverse Engineering


✨ Key Features

πŸ’¬ Chat Experience

  • πŸ”„ Real-time streaming - Live response display with smooth markdown formatting
  • πŸ€– Multiple AI models - GPT-4o mini, Claude 3 Haiku, Llama 3.3, Mistral Small, o4-mini & more
  • πŸ’» Terminal-native - Optimized for command-line workflows with interactive menus
  • ⌨️ Smart autocompletion - Interactive command menus and context-aware suggestions
  • πŸ”‘ Auto-authentication - Seamless session management with dynamic header refresh
  • πŸ”„ Model switching - Interactive model selection during conversations

🧠 Intelligent Features ✨ NEW

  • πŸ“Š Smart Analytics - Real-time session statistics with API monitoring, performance metrics, and usage insights
  • 🎯 Context Optimization - Automatic context compression and importance scoring to maintain conversation quality
  • πŸ’Ύ Persistent History - Intelligent session management with compression, recovery, and searchable archive
  • πŸ“ˆ Performance Tracking - Monitor success rates, error patterns, token usage, and optimization effectiveness

🧠 Context Integration

  • πŸ” Web search - Integrate DuckDuckGo search results into conversations
  • πŸ“„ File processing - Add local file content (15+ formats: Go, Python, JS, TS, JSON, MD, etc.)
  • 🌐 URL scraping - Extract and analyze webpage content with Chrome-based scraping
  • πŸš€ Project analysis - Generate comprehensive project prompts with PMP auto-installation
  • πŸ’Ύ Session persistence - Maintain conversation history across sessions
  • πŸ“š Library management - Organize and search through document collections
  • ⛓️ Command Chaining - Chain multiple commands (e.g., /url, /file, /search) using && to build a combined context before sending a final prompt with --.

πŸ› οΈ Productivity Tools

  • πŸ“‹ Smart clipboard - Copy responses, code blocks, or full conversations with interactive selection
  • πŸ“€ Advanced export - Save conversations in multiple formats with search-based filtering
  • πŸ“ History management - Browse your conversation history with intelligent search
  • πŸ” Content search - Search within conversations and document libraries
  • βš™οΈ Interactive config - Visual configuration menus for all settings
  • 🎨 Rich formatting - Colored output with markdown rendering
  • ⚑ Performance - Efficient memory usage and fast response times

🌐 API Server

  • πŸš€ REST API - Built-in HTTP server for external integrations
  • πŸ“‘ Real-time endpoints - Chat, history, and status endpoints
  • πŸ”§ Request logging - Configurable API request/response logging
  • πŸ“– Auto-documentation - Interactive API documentation at root endpoint

πŸ“š Library System

  • πŸ“ Document collections - Organize files into searchable libraries
  • πŸ” Advanced search - Search across all libraries with pattern matching
  • πŸ“Š Library stats - File counts, sizes, and modification dates
  • 🎯 Selective loading - Load specific libraries or files into context
  • πŸ“ Multi-format support - 15+ file formats automatically recognized

πŸ”§ Advanced Features

  • πŸ› οΈ PMP Integration - Auto-install and use Prompt My Project for code analysis
  • πŸ”„ Dynamic headers - Automatic browser session management
  • πŸ“± Cross-platform - Linux, Windows, macOS support

⛓️ Command Chaining

  • πŸš€ Chain multiple commands - Execute a series of commands in a single line using &&
  • πŸ’‘ Context accumulation - Combine context from files, URLs, and web searches
  • πŸ—£οΈ Final prompt - Use -- to add a final prompt to the accumulated context for the AI to process
# Chain multiple commands to build a rich context before asking a question
You: /url https://devbyben.fr/about && /search devbyben.fr twitter account && /file ~/Documents/my_notes.md -- Based on all this, write a summary.

🧠 Intelligent Features Deep Dive

πŸ“Š Session Analytics & Statistics

The CLI now tracks comprehensive real-time metrics:

  • Performance Metrics: API call timing, success/failure rates, retry counts
  • Content Analysis: Message counts, token estimation, context optimization savings
  • Error Tracking: 418/429 error monitoring, VQD refresh rates, header refresh frequency
  • Usage Patterns: Command usage statistics, model changes, file/URL processing
  • Session Duration: Total time spent in the session, average response times

Commands:

  • /stats - View current session analytics anytime
  • Automatic display on /exit with detailed session summary

🎯 Smart Context Optimization

Automatically manages conversation context for optimal performance:

  • Intelligent Compression: Compresses old context when approaching token limits
  • Importance Scoring: Preserves critical information while removing redundant content
  • Memory Efficiency: Reduces token usage by up to 40% while maintaining quality
  • Configurable Thresholds: Customize optimization triggers and compression ratios
  • Automatic Context Management: Automatically compresses and optimizes context as needed

πŸ’Ύ Persistent History Management

Never lose important conversations:

  • Session Persistence: Automatically saves conversations with metadata
  • Compression Storage: Efficient gzip compression reduces storage by 70%
  • Session Recovery: Resume conversations from any previous session
  • Intelligent Indexing: Fast search and retrieval of historical conversations
  • Searchable Archive: Use /history to browse and search past conversations
  • Session Loading: Load previous sessions interactively or by ID with /load

πŸ€– Available Models

Model Name Integration ID Alias Strength Best For Characteristics
GPT-4o mini gpt-4o-mini gpt-4o-mini General purpose Everyday questions β€’ Fast
β€’ Well-balanced
Claude 3 Haiku claude-3-haiku-20240307 claude-3-haiku Creative writing Explanations & summaries β€’ Clear responses
β€’ Concise
Llama 3.3 70B meta-llama/Llama-3.3-70B-Instruct-Turbo llama Programming Code-related tasks β€’ Technical precision
β€’ Detailed
Mistral Small mistralai/Mistral-Small-24B-Instruct-2501 mixtral Knowledge & analysis Complex topics β€’ Reasoning
β€’ Logic-focused
o4-mini o4-mini o4mini Speed Quick answers β€’ Very fast
β€’ Compact responses

πŸ“¦ Installation

πŸ“₯ Download Latest Release

πŸš€ 1. Direct Download & Run

πŸͺŸ Windows (PowerShell)
$exe="duckduckgo-chat-cli_windows_amd64.exe"; Invoke-WebRequest -Uri ((Invoke-RestMethod "https://api.github.com/repos/benoitpetit/duckduckGO-chat-cli/releases/latest").assets | Where-Object name -like "*windows_amd64.exe").browser_download_url -OutFile $exe; Start-Process -Wait -NoNewWindow -FilePath ".\$exe"
🐧 Linux (curl)
curl -LO $(curl -s https://api.github.com/repos/benoitpetit/duckduckGO-chat-cli/releases/latest | grep -oP 'https.*linux_amd64' | grep -oP 'https.*v[0-9]+\.[0-9]+\.[0-9]+_linux_amd64' | head -1) && chmod +x duckduckgo-chat-cli_v*_linux_amd64 && ./duckduckgo-chat-cli_v*_linux_amd64
🍎 MacOS (curl)
Apple Silicon (ARM64):
curl -LO $(curl -s https://api.github.com/repos/benoitpetit/duckduckGO-chat-cli/releases/latest | grep -oP 'https.*darwin_arm64' | grep -oP 'https.*v[0-9]+\.[0-9]+\.[0-9]+_darwin_arm64' | head -1) && chmod +x duckduckgo-chat-cli_v*_darwin_arm64 && ./duckduckgo-chat-cli_v*_darwin_arm64

Intel (AMD64):

curl -LO $(curl -s https://api.github.com/repos/benoitpetit/duckduckGO-chat-cli/releases/latest | grep -oP 'https.*darwin_amd64' | grep -oP 'https.*v[0-9]+\.[0-9]+\.[0-9]+_darwin_amd64' | head -1) && chmod +x duckduckgo-chat-cli_v*_darwin_amd64 && ./duckduckgo-chat-cli_v*_darwin_amd64

πŸ”¨ 2. Build from source

πŸ“‹ Prerequisites:

  • Go 1.21+ (go version)
  • Chrome/Chromium 115+ (chromium-browser --version)
git clone https://github.com/benoitpetit/duckduckGO-chat-cli
cd duckduckGO-chat-cli
./scripts/build.sh

🎯 Usage

πŸ“– Typical Workflow

⛓️ Example 1: Command Chaining
# Chain multiple commands to build a rich context before asking a question
You: /url https://devbyben.fr/about && /search devbyben.fr twitter account && /file ~/Documents/my_notes.md -- Based on all this, write a summary.
πŸ” Example 2: Code Analysis
./duckduckgo-chat-cli_linux_amd64
Accept terms? [yes/no] yes
Type /help to show available commands

You: /search Go concurrency patterns -- What are the best practices?
πŸ” Searching for: Go concurrency patterns
βœ… Added 10 search results to the context
Processing your request about the search results...

You: /file main.go -- Explain this code and suggest improvements
πŸ“„ Adding file content: main.go
βœ… Successfully added content from file: main.go
Processing your request about the file...

GPT-4o mini: Based on the search results about Go concurrency patterns and your code...
[Detailed analysis follows]

You: /stats
🧠 SESSION ANALYTICS SUMMARY
═══════════════════════════════════════════════════════════
πŸ“Š Session Performance
   Duration: 8.5m | Messages: 6 | Avg Response: 1.1s
   API Success Rate: 100% (3/3 calls)
═══════════════════════════════════════════════════════════

You: /copy
Choose what to copy:
1) Last Q&A exchange
2) Largest code block
3) Cancel
Enter your choice: 2
βœ… Content copied to clipboard
πŸ—‚οΈ Example 3: Session Loading
# List and interactively select a previous session to restore
You: /load

# Or load a session directly by its ID
You: /load 12345

# The chat context and history will be restored for continued conversation.

πŸ“ Command Reference

Command Example Description
πŸ” /search <query> [-- prompt] /search machine learning -- What are the best practices? Add search results as context and optionally process them with a prompt
πŸ“ /file <path> [-- prompt] /file src/main.go -- Explain this code Import file content as context and optionally analyze it with a prompt
πŸ“š /library [command] [args] /library add /path/to/docs Manage library directories for bulk file operations
🌐 /url <link> [-- prompt] /url github.com/golang -- Summarize this page Add webpage content as context and optionally process it with a prompt
πŸ“¦ /pmp [path] [options] [-- prompt] /pmp . -i "*.go" -e "test/*" Generate structured project prompts with automatic PMP installation
πŸ“ /prompt or /prompt add <name> -- <prompt> /prompt or /prompt add myprompt -- This is my prompt Manage and load custom prompts. /prompt opens the interactive menu; subcommands are also available.
πŸ“Š /stats ✨ /stats Show real-time session analytics and performance metrics
πŸ“‘ /api [port] /api or /api 8080 Start or stop the API server
πŸ€– /model /model or /model 2 Change AI model (interactive)
🧹 /clear /clear Reset conversation context (with session save)
πŸ“€ /export /export Export content (interactive)
πŸ“‹ /copy /copy Copy to clipboard (interactive)
πŸ“š /history /history Display conversation history
πŸ“š /load [session_id] /load or /load 12345 Load and restore a previous session interactively or by ID
βš™οΈ /config /config Modify configuration settings
🏷️ /version /version Show version and system info
πŸ”„ /update /update or /update --force Update the CLI to the latest version
❓ /help /help Show available commands
πŸšͺ /exit /exit Exit application (with analytics)

πŸ“ Prompt Management

  • /prompt : Open the interactive prompt management menu (list, add, edit, remove)
  • /prompt list : List all saved prompts
  • /prompt add <name> -- <prompt> : Add a new prompt
  • /prompt edit <name> -- <prompt> : Edit an existing prompt
  • /prompt remove <name> : Remove a prompt
  • /prompt load <name> : Send the prompt content as a message to the model

Note: /prompt is not chainable and does not support chaining with &&. The -- is only for separating the prompt text, not for chaining.

βš™οΈ Configuration

πŸŽ›οΈ Application Settings

Option Description Default Range
DefaultModel Starting AI model gpt-4o-mini 5 models available
GlobalPrompt System prompt always sent "" Any text
ExportDir Export directory ~/Documents/duckchat Any valid path
ShowMenu Display commands on start true true/false
AnalyticsEnabled ✨ Enable session analytics true true/false

πŸ” Search Settings

Option Description Default Range
MaxResults Results per search 10 1-20
IncludeSnippet Show result descriptions true true/false

πŸ“š Library Settings

Option Description Default Range
Enabled Enable library system true true/false
Directories List of library paths [] Array of paths

πŸ“‘ API Settings

Option Description Default Range
Enabled Enable API server false true/false
Port API server port 8080 Any valid port
Autostart Start API on app launch false true/false

πŸ’‘ Tip: Use /config to modify these settings interactively.

πŸ”„ Auto-Update System

The CLI includes an integrated update system that keeps your installation current:

πŸ“₯ Update Features

  • πŸ” Automatic Check: Checks for new versions every 24 hours at startup
  • πŸ” SHA256 Verification: Verifies downloaded binaries for security
  • 🎯 Cross-Platform: Works on Linux, Windows, and macOS
  • ⚑ In-Place Update: Updates the current binary without changing location
  • πŸ”„ Backup & Restore: Creates backups and restores on failure

🎯 Usage

# Check for updates and install (with confirmation)
/update

# Force update without confirmation
/update --force

# The CLI will also prompt you when updates are available:
πŸ†• A new version is available!
   Current: 1.1.9
   Latest:  1.2.0
πŸ’‘ Run '/update' to update to the latest version.

πŸ”§ Update Process

  1. Detection: Detects your OS and architecture automatically
  2. Download: Downloads the correct binary from GitHub releases
  3. Verification: Verifies SHA256 checksum for security
  4. Installation: Replaces the current binary with the new version
  5. Restart: Prompts you to restart the CLI to use the new version

πŸ› οΈ Development & Contributing

πŸš€ Automated Release Process

This project uses GitHub Actions for automated building and releasing:

  • Development: Work on the master branch
  • Release: Create PR to prod branch to trigger automatic release
  • CI/CD: Automated testing, building, and publishing

πŸ“š Development Documentation

🚨 Troubleshooting

πŸ”§ Connection Issues

If you encounter connection errors:

# Try clearing the conversation context to refresh security tokens
/clear

# Check your Chrome/Chromium installation
chromium-browser --version

# Enable debug mode
DEBUG=true ./duckduckgo-chat-cli_linux_amd64

# View session analytics for debugging
/stats

πŸ“œ License & Ethics

πŸ›‘οΈ Privacy & Responsibility

  • Privacy First: This tool respects your privacy and stores no personal data
  • Verify Information: Always verify critical information from AI responses
  • Responsible Use: Use responsibly and in accordance with DuckDuckGo's terms

πŸ”§ This is an unofficial client and not affiliated with or endorsed by DuckDuckGo

Made with β™₯ for the community
DuckDuckGo AI Chat CLI Logo

About

Command-line interface for interacting with DuckDuckGo's AI chat service.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Contributors 6