Bug 1: Reddit 403 due to short User-Agent in proxy test
Root cause: configure proxy test used 'Mozilla/5.0' (too short, Reddit rejects)
Fix: use full UA string matching the channel implementation
Bug 2: Reddit URL parsing broke on trailing slashes
Root cause: url.rstrip('/') + '.json' mangled URLs with query params
Fix: properly parse URL, clean path, reconstruct json URL
Bug 3: Reddit 403 without proxy showed raw HTTP error
Root cause: no error handling for 403/429 responses
Fix: friendly message suggesting proxy setup + Exa search alternative
Bug 4: XiaoHongShu without cookie showed Jina Reader 451 error
Root cause: fallback to Jina Reader which can't access XHS (legal block)
Fix: show clear message about needing cookies with setup instructions
Bug 5: Empty search query caused raw 422 API error
Root cause: no input validation before API call
Fix: check for empty query, show friendly message
All 36 unit tests passing.
Bug 1: search-github/search-twitter silently returned empty
Root cause: result printing code was inside except block (never reached on success)
Fix: moved result display code outside try/except
Bug 2: Bilibili returned empty content when server IP is blocked
Root cause: API returns code -404 but code treated it as success with empty data
Fix: check API response code, show friendly message with proxy setup hint
Also: GitHub search results now correctly show stars/forks/language from extra dict
All found through real-usage E2E testing (not just install/config testing).
Changes:
1. browser-cookie3 now in default deps (no separate pip install)
2. install --env=auto now auto-imports cookies on local computers
3. install auto-detects EXA_API_KEY from environment variables
4. install.md cut from 100 lines to 60 lines — two steps not five
Before: pip install → agent-eyes install → 'want search?' → 'want cookies?' → configure each
After: pip install → agent-eyes install (does everything automatically) → only ask about what's missing
Docker clean-room test: all passing, 0 bugs.
1. Install command: git+... requires git (many envs don't have it)
→ Changed to zip URL: pip install .../archive/main.zip
2. yt-dlp not in dependencies (shows warning in doctor)
→ Added yt-dlp to required dependencies
3. search-twitter/reddit shows raw 401 error without Exa key
→ Now shows friendly 'Exa API key not configured' message
Key improvements:
- twitter-cookies now accepts BOTH formats:
1. Full cookie header string from Cookie-Editor export
2. Two separate values (auth_token ct0)
Automatically detects which format was pasted.
- New docs/cookie-export.md guide for server users
Recommends Cookie-Editor Chrome extension (one-click export)
Fallback: manual F12 → Network → Cookie header
- Install guide now has two clear paths:
Path A (local): --from-browser chrome (one command, all cookies)
Path B (server): Cookie-Editor extension export (30 sec per site)
- Better error messages with accepted format examples
New: agent-eyes configure --from-browser chrome
- Extracts Twitter, XiaoHongShu, Bilibili cookies in ONE command
- No F12, no manual copying, no extension needed
- Supports: chrome, firefox, edge, brave, opera
- Uses browser-cookie3 (optional dependency: pip install agent-eyes[cookies])
Install guide now 3x shorter:
1. pip install + agent-eyes install (auto-detect env)
2. agent-eyes configure --from-browser chrome (one-click all cookies)
3. agent-eyes configure exa-key KEY (one API key)
4. Done
User actions reduced from 4 trips to 2:
- Before: go to exa.ai + F12 Twitter + F12 XHS + go to webshare.io
- After: go to exa.ai + say 'yes' to auto-import cookies
Key changes:
1. Auto-detect local vs server (SSH/Docker/cloud/headless detection)
- User no longer needs to answer 'local or server?'
2. Only ask for ONE thing: Exa API key (the highest-value unlock)
3. Everything else is 'ask later' — user says 'set up Twitter' anytime
4. Install guide cut from 200 lines to 100 lines
5. No more overwhelming channel menu — just show what works + one recommendation
Philosophy: default to everything working, only stop when user action is truly needed.
The lazy user path: paste one line → Agent installs → 'want search? get free key at exa.ai' → done.
Major install flow polish:
- Channels organized by setup difficulty:
🟢 Zero-config (Web, GitHub, RSS) — works immediately
🔵 Cookie-based (Twitter, YouTube, Bilibili, XiaoHongShu) — free, ~2min
🟡 Free API key (Exa Search) — one key, 30 seconds
🟠 Proxy-based (Reddit, Bilibili on server) — $1/month
- Every channel explains: what it does, what's needed, what you miss without it
- Server vs local affects which channels need proxy
New: XiaoHongShu channel (cookie-based, falls back to Jina Reader)
New configure commands: twitter-cookies, xhs-cookie, youtube-cookies
Each command auto-tests after saving.
New commands:
- agent-eyes install --env=<local|server> --search=<yes|no> [--proxy=URL] [--exa-key=KEY]
One-shot installer with explicit flags. No ambiguity.
- agent-eyes configure <key> <value>
Set exa-key/proxy/github-token/groq-key with auto-testing.
e.g. 'agent-eyes configure exa-key xxx' → saves + tests API
Rewrote install.md as strict decision tree:
1. Ask 3 questions → get flags
2. pip install
3. Run ONE install command with flags
4. Configure keys with configure command (auto-tests each)
5. Verify with doctor
Inspired by oh-my-opencode's deterministic installer pattern.
- CLI now suppresses loguru INFO logs by default (use -v/--verbose to show)
- Fixed birdx output parser to correctly extract author, url, date, text
- birdx search now uses plain text output (--json returns empty arrays)