A powerful CLI tool for Generative Engine Optimization (GEO) that helps optimize content for AI-powered search engines and language models like ChatGPT, Claude, and other LLMs.
- π― Auto Provider Detection - Automatically selects OpenAI if only OpenAI key available
- π Universal Score Averaging - LLM and Hybrid modes now always average Local + AI scores
- π Enhanced Table Rendering - Beautiful formatted tables in terminal output
- π§ Improved Model Selection - Better OpenAI model descriptions and recommendations
- β‘ Smart Fallbacks - More intelligent handling of API key availability
- π― Auto Mode - Automatically detects API keys and selects optimal provider/model
- π Hybrid Scoring - Always averages local + LLM scores for maximum accuracy
- π Smart Fallbacks - Gracefully handles API failures with local analysis backup
- π¨ Beautiful Output - Enhanced terminal formatting with table rendering and markdown support
- π Local Analysis - Comprehensive GEO scoring without API requirements
- π€ LLM Integration - Support for Claude, OpenAI GPT, and local LLMs
- β‘ Bulk Processing - Analyze multiple URLs concurrently
- π Directory Scanning - Scan local HTML files in project directories
- π― Multiple Analysis Modes - Auto, Local, LLM, or Hybrid analysis
- π Multiple Output Formats - Text, JSON, and Markdown formats
- π§ Zero Setup - Works out of the box with intelligent mode selection
- πͺ Interactive Mode - Beautiful CLI for model and provider selection
- π Model Management - List and validate available models for each provider
- π Debug Tools - Content extraction debugging and troubleshooting
- π‘ Smart Recommendations - Context-aware suggestions for optimization
- Go 1.19 or later
git clone git@github.com:mux-ai/mux-geo.git
cd mux-geo
go mod tidy
go build -o mux-geo main.goNo configuration required! The tool automatically detects your setup and chooses the best analysis method:
- β API Key Available β Uses hybrid mode (Local + LLM averaged scores)
- β No API Key β Uses local mode + shows upgrade recommendations
# For Claude - Latest models with excellent analysis
export CLAUDE_API_KEY="sk-ant-your-claude-api-key"
# For OpenAI - Most popular with cost-effective options
export OPENAI_API_KEY="sk-proj-your-openai-api-key"
# For local LLM - Privacy-focused, no API costs, run locally
export OLLAMA_BASE_URL="http://localhost:11434" # Optional, defaults to this
# No API key required - just install Ollama and pull models!The tool automatically validates API key formats:
- Claude: Must start with
sk-ant- - OpenAI: Must start with
sk-orsk-proj- - Local: No API key required - just needs Ollama running locally
- Privacy: Your data never leaves your machine
- Cost-effective: No API usage fees - unlimited analysis
- Speed: No network latency, direct local processing
- Offline: Works without internet connection
- Security: Perfect for sensitive content analysis
- Control: Choose your own models and configurations
# Let the tool guide you through setup
./mux-geo analyze <url> --interactive
# See available models and providers
./mux-geo models
./mux-geo models openai
./mux-geo models claude
# Auto-provider detection (NEW!)
export OPENAI_API_KEY="your-key" # Only OpenAI key set
./mux-geo analyze <url> # Auto-detects and uses OpenAI
# β Analysis complete! Score: 65/100 (Local: 29 + AI: 85, averaged)Get intelligent GEO analysis automatically:
# Auto mode - uses best available method
./mux-geo analyze https://example.com
# Interactive mode - guided setup
./mux-geo analyze https://example.com --interactive
# Debug content extraction issues
./mux-geo debug https://example.com
# Scan local files
./mux-geo scan ./website
# Bulk analyze URLs
./mux-geo bulk urls.txtFor deeper insights with AI-powered analysis:
# Automatic hybrid analysis (when API key available)
export OPENAI_API_KEY="your-key"
./mux-geo analyze https://example.com # Auto-detects and uses hybrid
# Force specific modes
./mux-geo analyze https://example.com --mode llm --provider claude
./mux-geo analyze https://example.com --mode hybrid --provider openai
# Interactive model selection
./mux-geo analyze https://example.com --interactive
# Advanced options
./mux-geo analyze https://example.com \
--mode hybrid \
--provider openai \
--model gpt-4o \
--output markdownCreate a file with URLs (one per line):
# urls.txt
https://example.com
https://docs.example.com
https://blog.example.comRun bulk analysis:
./mux-geo bulk urls.txt --concurrent 3 --output jsonScan a local directory for HTML files:
./mux-geo scan ./website --extensions .html,.htm --output markdown--mode: Analysis mode (auto,local,llm,hybrid) [default: auto]--provider, -p: LLM provider (claude,openai,local) [default: claude]--model, -m: Model to use (empty = recommended model)--output, -o: Output format (text,json,markdown) [default: text]--interactive, -i: Interactive model selection [default: false]
models [provider]: List available models for providersdebug <url>: Debug content extraction and analysis issues
--concurrent, -c: Number of concurrent requests [default: 5]
--extensions: File extensions to scan [default: .html]
- Intelligent selection - automatically chooses best method
- Hybrid when possible - averages local + LLM scores for accuracy
- Smart fallbacks - uses local analysis when API unavailable
- Helpful guidance - shows recommendations for enhanced analysis
- Zero configuration - works immediately without setup
- No API keys required - works completely offline
- Instant results - fast rule-based analysis
- Comprehensive scoring across 5 key GEO factors:
- Content Structure (25%) - heading hierarchy, organization
- Semantic Clarity (25%) - readability, terminology
- Context Richness (20%) - depth, examples, specifics
- Authority Signals (15%) - citations, credibility
- Accessibility (15%) - meta tags, structure
- Detailed recommendations for technical improvements
- Perfect for quick audits and batch processing
- Requires API keys for chosen provider
- Averages scores - combines local rule-based + AI analysis automatically
- AI-powered insights using advanced language models
- Beautiful formatting with README-style output and table rendering
- Contextual analysis with nuanced understanding
- Natural language recommendations with examples
- Best for content strategy and comprehensive optimization
- Always averages scores - mathematically combines local + LLM:
(Local + AI) / 2 - Dual perspective - technical structure + content quality assessment
- Balanced accuracy - LLM validates and enhances local analysis
- Comprehensive insights - both rule-based and AI-powered evaluation
- Most accurate results - recommended for professional use
- Score transparency - shows breakdown: "Score: 65/100 (Local: 29 + AI: 78, averaged)"
- API Key:
CLAUDE_API_KEYenvironment variable - Format: Must start with
sk-ant- - Recommended Models:
- β
claude-3-5-sonnet-20241022- Latest, best for complex analysis claude-3-sonnet-20240229- Balanced performance and costclaude-3-opus-20240229- Most capable, higher costclaude-3-haiku-20240307- Fastest, most economical
- β
- API Key:
OPENAI_API_KEYenvironment variable - Format: Must start with
sk-orsk-proj- - Available Models:
- β
gpt-4o- Latest multimodal model, best overall performance gpt-4o-mini- Cost-effective, fast, excellent value for moneygpt-4-turbo- Large context window, strong reasoning capabilitiesgpt-4- High quality reasoning, proven performancegpt-3.5-turbo- Fast, economical, good for simple analysis tasks
- β
- Setup: Runs locally, no API costs, privacy-focused
- URL:
OLLAMA_BASE_URLor defaulthttp://localhost:11434 - Available Models:
- β
llama2- Open source, reliable, best for GEO analysis llama3- Latest open source model, improved performancecodellama- Specialized for code analysis and technical contentmistral- Efficient alternative, good balance of speed/quality
- β
Step 1: Install Ollama
# Linux/macOS/WSL
curl -fsSL https://ollama.com/install.sh | sh
# Windows: Download from https://ollama.com/download
# Docker alternative
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamaStep 2: Pull a Model
# Recommended for GEO analysis
ollama pull llama2
# Or try the latest version
ollama pull llama3
# For technical content analysis
ollama pull codellamaStep 3: Start Ollama
# Start the Ollama server (if not auto-started)
ollama serve
# Verify it's running
curl http://localhost:11434/api/versionStep 4: Use with GEO Checker
# Use local provider with specific model
./mux-geo analyze https://example.com --provider local --model llama2
# Interactive selection
./mux-geo analyze https://example.com --interactive
# Choose: 3. local β 1. llama2
# See available local models
./mux-geo models local# List all available models
./mux-geo models
# List models for specific provider
./mux-geo models openai
./mux-geo models claude
./mux-geo models local
# Interactive model selection
./mux-geo analyze <url> --interactiveBeautiful terminal output with enhanced formatting:
- π¨ README-style markdown rendering in terminal
- π Colored headers and visual hierarchy
- π Score indicators with visual progress
- π Bullet points with colored markers
- π‘ Code highlighting for technical terms
- π Quote blocks for important insights
Structured JSON output suitable for programmatic processing:
{
"url": "https://example.com",
"title": "Example Page",
"analysis": "...",
"processed_at": "2024-01-01T12:00:00Z",
"tokens_used": 1500,
"metadata": {...}
}Formatted markdown suitable for documentation and reports.
MUX AI
Generative Engine Optimization Tool
π Local Analysis π€ LLM Integration π Smart Reporting
βΆ ANALYSIS DETAILS
ββββββββββββββββββ
URL: https://example.com
Title: Example Website
Mode: HYBRID
Analyzed: 2024-01-15 10:30:45
βΆ OVERALL SCORE
βββββββββββββββ
GEO Score: 78/100 (78.0%)
π Averaged Score (Local: 72 + LLM: 84, averaged)
βΆ DETAILED BREAKDOWN
ββββββββββββββββββββ
Content Structure: 85/100 (85.0%)
Semantic Clarity: 72/100 (72.0%)
Context Richness: 80/100 (80.0%)
Authority Signals: 65/100 (65.0%)
Accessibility: 88/100 (88.0%)
β Strengths
β Good heading hierarchy structure
β Well-organized content structure
β Content is clear and readable
β Good information density
β Recommendations
1. Add more citations and credible references
2. Include more expertise and credibility signals
3. Define technical terms and concepts clearly
4. Provide more context and background information
βΆ AI INSIGHTS
βββββββββββββ
Overall Score: 84/100
β π― GEO Analysis Summary
ββββββββββββββββββββββββββββββββββββββββββββββββββ
This webpage shows strong semantic foundations but needs
structural improvements for optimal GEO performance.
βΆ β
Key Strengths
β’ Excellent semantic clarity with consistent terminology
β’ Clean content structure following logical flow
β’ AI-friendly formatting with proper semantic elements
βΆ π Priority Recommendations
1. Implement proper heading hierarchy
2. Add rich context and examples
3. Enhance authority signals with citations
β Pro Tip: Focus on structural improvements first for
β maximum impact on AI understanding.
See the examples/ directory for:
urls.txt: Sample URL list for bulk processingsample.html: Example HTML file for testing directory scanning
# π― Intelligent analysis (recommended)
./mux-geo analyze https://example.com # Auto-detects best method
./mux-geo analyze https://example.com --interactive # Guided setup
./mux-geo debug https://example.com # Troubleshoot content issues
# π Output formats
./mux-geo analyze https://example.com --output json > result.json
./mux-geo scan ./website --output markdown > report.md
# π€ Enhanced LLM analysis
export OPENAI_API_KEY="your-key"
./mux-geo analyze https://example.com # Auto-uses hybrid mode
./mux-geo analyze https://example.com --mode llm --provider claude
./mux-geo analyze https://example.com --mode hybrid --provider openai --model gpt-4o
# π Local LLM analysis (privacy-focused, no API costs)
./mux-geo analyze https://example.com --provider local --model llama2
./mux-geo analyze https://example.com --mode hybrid --provider local --model llama3
# π Model management
./mux-geo models # List all available models
./mux-geo models openai # List OpenAI models only
# β‘ Bulk processing
./mux-geo bulk urls.txt --concurrent 10 --output json
./mux-geo bulk urls.txt --mode hybrid --provider claude --concurrent 3
# π Directory scanning
./mux-geo scan ./src --extensions .html,.htm --mode auto
./mux-geo scan ./docs --mode hybrid --provider openaiThe local analysis evaluates content across 5 key dimensions:
-
Content Structure (25%)
- Heading hierarchy (H1 β H2 β H3)
- Content organization and flow
- Paragraph structure and length
- Use of lists and bullet points
-
Semantic Clarity (25%)
- Readability and sentence complexity
- Terminology consistency
- Definition clarity for technical terms
- Unambiguous language usage
-
Context Richness (20%)
- Content depth and detail level
- Use of examples and specifics
- Background information provision
- Comprehensive coverage of topics
-
Authority Signals (15%)
- Citations and references
- Expertise indicators
- Factual accuracy signals
- Credible source integration
-
Accessibility (15%)
- Meta information quality
- Machine-readable structure
- Information density balance
- AI parsing friendliness
Each factor is scored 0-100, then weighted to produce an overall GEO score with specific, actionable recommendations.
Auto Mode automatically provides the most accurate scoring:
| Scenario | Scoring Method | Formula | Accuracy |
|---|---|---|---|
| π API Key Available | Always Averages | (Local + LLM) / 2 |
βββββ Best |
| β No API Key | Local + Recommendations | Rule-based only | βββ Good |
| π§ Force Local | Local Only | Rule-based only | βββ Technical |
| π€ LLM/Hybrid Mode | Always Averages | (Local + LLM) / 2 |
βββββ Best |
Why Averaging is Most Accurate:
- Local analysis catches technical SEO structure issues
- LLM analysis evaluates actual content quality and meaning
- Mathematical averaging provides balanced, unbiased assessment
- Dual validation ensures comprehensive coverage of all GEO factors
- Consistent scoring regardless of mode (LLM or Hybrid)
- 90-100: Excellent GEO optimization
- 80-89: Good optimization with minor improvements needed
- 70-79: Moderate optimization, several areas to improve
- 60-69: Basic optimization, significant improvements needed
- Below 60: Poor optimization, major overhaul recommended
mux-geo-checker/
βββ cmd/ # CLI commands
β βββ analyze.go # Single URL analysis
β βββ bulk.go # Bulk URL processing
β βββ root.go # Root command & banner
β βββ scan.go # Directory scanning
βββ pkg/
β βββ analyzer/ # Core analysis engine with intelligent mode selection
β βββ config/ # Configuration management
β βββ formatter/ # Enhanced output formatting with markdown support
β βββ llm/ # LLM provider interfaces with error handling
β β βββ claude.go # Anthropic Claude with validation
β β βββ openai.go # OpenAI GPT with model management
β β βββ local.go # Local LLM (Ollama) support
β β βββ provider.go # Provider factory with auto-detection
β β βββ errors.go # Structured error handling
β β βββ interactive.go # Interactive model selection
β βββ scorer/ # Local scoring algorithm
β βββ scanner/ # Directory scanning
β βββ ui/ # Enhanced terminal UI with markdown rendering
βββ internal/
β βββ bulk/ # Bulk processing logic
β βββ webpage/ # Web scraping utilities
βββ main.go # Application entry point
# Debug content extraction
./mux-geo debug https://problematic-url.com
# Check if page requires JavaScript or has unusual structure# Check if key is set
echo $OPENAI_API_KEY
# Verify key format
# OpenAI: starts with "sk-" or "sk-proj-"
# Claude: starts with "sk-ant-"# List available models
./mux-geo models openai
# Use interactive selection
./mux-geo analyze <url> --interactive# Check if Ollama is running
curl http://localhost:11434/api/version
# Start Ollama if not running
ollama serve
# List installed models
ollama list
# Pull a model if none installed
ollama pull llama2
# Test Ollama directly
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "Test prompt",
"stream": false
}'- Low local, high LLM: Good content, poor structure β Fix technical issues
- High local, low LLM: Good structure, poor content β Improve content quality
- Both low: Needs comprehensive optimization
# Check command help
./mux-geo --help
./mux-geo analyze --help
./mux-geo models --help
# Debug content extraction
./mux-geo debug <url>
# Test with example content
./mux-geo analyze https://example.com- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
- Error Handling - Comprehensive error types and handling
| Task | Command | Notes |
|---|---|---|
| Basic analysis | ./mux-geo analyze <url> |
Auto-detects best method |
| With API key | export OPENAI_API_KEY="key" && ./mux-geo analyze <url> |
Uses hybrid mode |
| Local LLM | ./mux-geo analyze <url> --provider local --model llama2 |
Privacy-focused, no API costs |
| Interactive setup | ./mux-geo analyze <url> -i |
Guided model selection |
| List models | ./mux-geo models |
Shows all available models |
| Local models only | ./mux-geo models local |
Shows Ollama models |
| Debug issues | ./mux-geo debug <url> |
Troubleshoot content extraction |
| Bulk analysis | ./mux-geo bulk urls.txt |
Process multiple URLs |
| Local files | ./mux-geo scan ./website |
Analyze local HTML files |
For issues and feature requests, please use the GitHub issues tracker.