This release includes 2 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+4 more
Affected surfaces
ReleasePort's take
Light signalThe API endpoint `simulate_goal_projection` has been renamed to `project_net_worth` in version v0.20.0.
Why it matters: Update client code referencing the deprecated endpoint name before upgrading to avoid request failures; trigger occurs on upgrade to v0.20.0.
Summary
AI summaryUpdates π Brief surface, π New MCP tools, and π Docs across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
`simulate_goal_projection` renamed to `project_net_worth`. `simulate_goal_projection` renamed to `project_net_worth`. Source: llm_adapter@2026-05-24 Confidence: low |
β |
| Breaking | Medium |
Brief no longer returns 'projected_net_worth' or 'on_track'. Brief no longer returns 'projected_net_worth' or 'on_track'. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Added new tool 'simulate_scenario' for deterministic shock impact analysis. Added new tool 'simulate_scenario' for deterministic shock impact analysis. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Added new tool 'show_thesis_track' to link past trade reasons with current outcomes. Added new tool 'show_thesis_track' to link past trade reasons with current outcomes. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Added new tool 'show_anti_portfolio' to display post-exit performance of fully sold positions. Added new tool 'show_anti_portfolio' to display post-exit performance of fully sold positions. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Exposed `risk_summary.daily_vol_pct` (1Ο daily range) in brief surface. Exposed `risk_summary.daily_vol_pct` (1Ο daily range) in brief surface. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Exposed `holdings[].fundamentals.beta_5y` in brief surface. Exposed `holdings[].fundamentals.beta_5y` in brief surface. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Capped `economic_calendar` to 25 highβimpact events, sorted by impact then chronology. Capped `economic_calendar` to 25 highβimpact events, sorted by impact then chronology. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Removed `goal_tracking.projected_net_worth` and `goal_tracking.on_track` from brief (diagnostic only). Removed `goal_tracking.projected_net_worth` and `goal_tracking.on_track` from brief (diagnostic only). Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Codified five Voice and Judgment principles in SERVER_INSTRUCTIONS for decisive, evidenceβbased fundβmanager style responses. Codified five Voice and Judgment principles in SERVER_INSTRUCTIONS for decisive, evidenceβbased fundβmanager style responses. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Feature | Low |
Highβimpact macro events now autoβtrigger 'simulate_scenario' without user prompt. Highβimpact macro events now autoβtrigger 'simulate_scenario' without user prompt. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Dependency | Low |
Updated install instructions for npm and macOS/Windows packages (version 0.20.0). Updated install instructions for npm and macOS/Windows packages (version 0.20.0). Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Performance | Low |
Projection response defaults to yearly resolution with rounding for size reduction. Projection response defaults to yearly resolution with rounding for size reduction. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Bugfix | Low |
Fixed h4 subheader styling in documentation. Fixed h4 subheader styling in documentation. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Refactor | Low |
Renamed and generalized 'project_net_worth' API: optional target_value, horizon_months 1β720. Renamed and generalized 'project_net_worth' API: optional target_value, horizon_months 1β720. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
| Refactor | Low |
Performed cleanup pass: removed dead code, extracted buildPortfolioView, abstracted brief components. Performed cleanup pass: removed dead code, extracted buildPortfolioView, abstracted brief components. Source: granite4.1:30b@2026-05-24-audit Confidence: low |
β |
Full changelog
π Highlights
A fund-manager voice, not a data dump. firma now talks back like a private fund manager β decisive, evidence-based, micro-macro bridged in dollars. Four explicit Voice and judgment principles in SERVER_INSTRUCTIONS make vague hedge phrases ("could pressure tech", "쑰건λΆλ‘ 보λΌ") explicit violations.
Short-horizon quant view. simulate_scenario is the deterministic sibling of project_net_worth's stochastic Monte Carlo. High-impact macro events in the brief (FOMC / CPI / PCE / NFP within 7 days) auto-trigger it β Claude doesn't wait for you to ask "what if".
Two new behavioral tools. show_thesis_track joins your recorded reason β outcome for past trades. show_anti_portfolio follows the post-exit prices of positions you fully sold β the data brokerages deliberately don't show because it highlights bad sells.
Brief = diagnostic only. The brief now strictly returns currently true facts; forward-looking probability routes to project_net_worth. The two epistemic families never mix.
π New MCP tools
simulate_scenario(#48) β beta-driven shock impact per holding + per-ticker overrides + one-sigma daily range when you passdaily_vol_pctshow_thesis_track(#49) β past trade reasons β current outcome labels (validated_holding/underwater_holding/cut_loss/neutral_exited)show_anti_portfolio(#49) β post-exit performance of fully-sold positions (missed_rebound/good_call/neutral_exit)
π New MCP resources
Attach as context in Claude Code with @firma::
firma://portfolioβ current holdings tablefirma://thesis-logβ recent trades with recorded reasonsfirma://profileβ your goals
π Brief surface
risk_summary.daily_vol_pctnow exposed (1Ο daily range β input tosimulate_scenario)holdings[].fundamentals.beta_5ynow exposedeconomic_calendarcapped at 25 events, high-impact first then medium (chronologically sorted)goal_trackingno longer carriesprojected_net_worthoron_track(diagnostic only)
π Voice and judgment principles
`SERVER_INSTRUCTIONS` now codifies five new rules that govern how Claude talks:
- Principle 13. Decisiveness over neutrality β name a lean + the tripwire
- Principle 14. Microβmacro bridge β every macro statement MUST end with a dollar number on the user's book
- Principle 15. Behavioral context, not platitudes β chain into `show_thesis_track` on buys, `show_anti_portfolio` on sells
- Principle 16. Evidence-based conviction β every BUY/HOLD/SELL stance cites the firma field justifying it
- Principle 17. Always capture the thesis on new trades β Claude asks for `reason` if missing
- Principle 8b. High-impact macro events auto-trigger `simulate_scenario` even when the user didn't ask "what if"
β οΈ Breaking changes
- `simulate_goal_projection` renamed to `project_net_worth` (#44). API generalized: `target_value` optional, `horizon_months` 1β720 (one tool for both short-term outlook and long-term FIRE planning). Update any external invocation.
- Brief no longer returns `projected_net_worth` or `on_track`. Forward-looking probability routes to `project_net_worth`.
π Docs
- New `scenario.{en,ko}.mdx` reference page (parallel to `projection.{en,ko}.mdx`)
- `why-firma` adds fund-manager voice + decision-history features as front-page identity
- Installer vs npm flow clarified on the install page
- Audited and cleared stale references (`target_net_worth_usd`, `/morning`, `--json`, `tax_outlook`, `simulate_goal_projection`, `world-intel`, `show_insider`, `home_currency`)
- README front page reflects the identity shift to fund-manager voice
π§Ή Maintenance
- Cleanup pass β dead code, brief abstractions, `buildPortfolioView` extraction (#45)
- Projection response size: yearly resolution by default + rounding (#43)
- Docs h4 subheader styling fix (#47)
Install
```bash
npm
npm install -g @evan-moon/[email protected]
macOS
Download firma-mac-arm64.pkg below
Windows
Download firma-win-x64.exe below
```
After install, restart Claude Desktop so the new MCP tools and resources show up.
Breaking Changes
- `simulate_goal_projection` renamed to `project_net_worth`. Update any external invocation.
- Brief no longer returns `projected_net_worth` or `on_track`. Forward-looking probability routes to `project_net_worth`.
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 evan-moon/firma
Local-first CLI asset tracker for overseas stock investors with Claude Desktop MCP integration. 13 tools for portfolio tracking, net worth snapshots, cash flow analysis, and market research (earnings, insider trades, SEC filings)
Related context
Beta — feedback welcome: [email protected]