This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+9 more
ReleasePort's take
Light signalRelease v1.7.0 adds Anthropic Claude as a second AI provider and introduces multi‑AI mode that runs Gemini and Claude concurrently, aggregating scores per ticker.
Why it matters: Multi‑AI aggregation enables concurrent scoring from Gemini and Claude, improving analysis robustness; storage schema upgrades drop existing history on first load, requiring migration planning.
Summary
AI summaryBroad release touches Graceful degradation, Bug Fixes, How aggregation works, and What's New.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds Anthropic Claude as a second AI provider alongside Gemini. Adds Anthropic Claude as a second AI provider alongside Gemini. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Medium |
Introduces multi-AI mode that runs Gemini and Claude concurrently, aggregating scores per ticker. Introduces multi-AI mode that runs Gemini and Claude concurrently, aggregating scores per ticker. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Medium |
Updates storage schema from v1 to v2, dropping existing history on first load. Updates storage schema from v1 to v2, dropping existing history on first load. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Medium |
Adds pluggable provider architecture for future AI integrations (OpenAI, Mistral, etc.). Adds pluggable provider architecture for future AI integrations (OpenAI, Mistral, etc.). Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Medium |
Adds docs site support for Japanese, Korean, and Spanish (total 6 languages). Adds docs site support for Japanese, Korean, and Spanish (total 6 languages). Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Medium |
Replaces language‑switcher links with a dropdown `<select>` for scalable locale selection. Replaces language‑switcher links with a dropdown `<select>` for scalable locale selection. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Low |
Updates docs/api-keys.md, deployment.md, troubleshooting.md to cover multi‑AI configuration and translations. Updates docs/api-keys.md, deployment.md, troubleshooting.md to cover multi‑AI configuration and translations. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Feature | Low |
Provides upgrade guide for enabling multi‑AI mode with Anthropic API key and optional Claude model selection. Provides upgrade guide for enabling multi‑AI mode with Anthropic API key and optional Claude model selection. Source: llm_adapter@2026-06-05 Confidence: high |
— |
| Bugfix | Medium |
Fixes docs language switcher script by removing stray `//` comments that broke parsing. Fixes docs language switcher script by removing stray `//` comments that broke parsing. Source: llm_adapter@2026-06-05 Confidence: high |
— |
Full changelog
What's New
Multi-AI Mode — Gemini + Claude Side by Side
Richfolio is no longer Gemini-only. The analysis layer was refactored into a pluggable provider architecture, and Anthropic Claude is now a first-class second provider.
- Set one key (
GEMINI_API_KEYorANTHROPIC_API_KEY) → identical behaviour to v1.6, single-AI rendering, no surprises. - Set both keys → multi-AI mode auto-engages: providers run concurrently, scores aggregate per ticker, every email and Telegram message shows a per-AI breakdown beneath each consensus recommendation.
How aggregation works
- Consensus action via mode-of-votes with confidence-sum tiebreaker (see
src/aiAggregation.ts) - STRONG BUY requires unanimous agreement — if any provider dissents, the consensus caps at BUY. Preserves STRONG BUY's "rare, high-conviction" semantics.
- Averaged confidence drives within-tier sort, displayed prominently with an
avgtag - Agreement badge (
unanimous/majority/split) shown next to the action - Suggested buy value / limit price inherited from the highest-confidence provider that voted consensus — deterministic, no muddled averages
Graceful degradation
- If a provider throws mid-run (rate-limited, network blip, quota hit), surviving providers continue.
- If exactly one provider survives, that run renders as single-AI mode.
- If all providers fail, falls back to gap-based recommendations (today's behaviour with no AI key).
Reasoning history is now per-provider
Each AI sees only its own past convictions in the "HISTORICAL CONTEXT" prompt section. Storage schema bumped v1 → v2; existing history is dropped on first load (7 days isn't precious data).
Pluggable detailed analysis (STRONG BUY page)
The dedicated "More Details" analysis page for STRONG BUY tickers can now be generated by either provider. Default: first available. Override:
| Env var | Effect |
|---|---|
| AI_DETAILED_PROVIDER=gemini | Force Gemini |
| AI_DETAILED_PROVIDER=claude | Force Claude |
| CLAUDE_MODEL=claude-haiku-4-5-20251001 | Use Haiku for cheaper Claude calls |
New Architecture (Extensible)
Adding a third provider (OpenAI, Mistral, whatever) is now ~50 lines: implement the AIProvider interface in src/providers/, register it in src/providers/index.ts, done. The orchestrator, guard pipeline, aggregation, reasoning history, and renderers all flow through automatically — no consumer changes needed.
src/providers/
├── types.ts # AIProvider interface + canonical AIBuyRecommendation
├── prompts.ts # SDK-agnostic prompt builders
├── gemini.ts # GeminiProvider (Google @google/genai)
├── claude.ts # ClaudeProvider (Anthropic @anthropic-ai/sdk, tool-use)
└── index.ts # Provider registry — buildActiveProviders()
src/aiOrchestrator.ts # Runs active providers, applies guards, sorts
src/aiAggregation.ts # Consensus action, average, unanimity rule
3 More Languages: Japanese, Korean, Spanish
The docs site now ships in 6 languages total:
- English (default)
- 简体中文 (Simplified Chinese)
- 繁體中文 (Traditional Chinese)
- 日本語 (Japanese) — new
- 한국어 (Korean) — new
- Español (Spanish, neutral / Latin-American) — new
Language picker in the docs header was converted from inline links to a compact dropdown <select> to scale cleanly as more locales are added.
Bug Fixes
- fix(docs): removed
//comments from the language switcher inline script — Jekyll's HTML compression collapsed the script onto a single line, turning//into a runaway comment that broke the parser with "Unexpected end of input". Dropdown navigation now works in production.
Docs
- docs/api-keys.md restructured around the multi-AI mode (single/multi comparison table at top, dedicated Anthropic Claude section, removed obsolete "Using a different AI model" sub-section)
- docs/deployment.md "Add Secrets & Variables" table now lists
ANTHROPIC_API_KEY,CLAUDE_MODEL,AI_DETAILED_PROVIDER - docs/troubleshooting.md Gemini quota fix now notes Claude continues alone when both keys are set; "empty email" bullet expanded into 4 combinations
- All of the above translated to the 5 non-English locales
Upgrading
If you already had GEMINI_API_KEY set: nothing breaks, nothing changes. v1.7 is fully backward compatible with single-AI configurations.
To opt into multi-AI mode:
- Sign up at console.anthropic.com and create an API key
- Add
ANTHROPIC_API_KEYas a GitHub Secret (and to your local.env) - Optionally set
CLAUDE_MODEL=claude-haiku-4-5-20251001as a GitHub Variable for cheaper Claude calls - Optionally set
AI_DETAILED_PROVIDER=geminiorclaudeto pin who generates the STRONG BUY analysis page - Next scheduled run picks up the new env automatically — no code deploy needed
Full Changelog: https://github.com/furic/richfolio/compare/v1.6.0...v1.7.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About furic/richfolio](https:
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]