Skip to content

evan-moon/firma

v0.20.0 Breaking

This release includes 2 breaking changes for platform teams planning a safe upgrade.

Published 10d MCP Developer Tools
βœ“ No known CVEs patched
Read the diff β†’ Tool health β†’ What is this tool? β†’

✓ No known CVEs patched in this version

Topics

claude cli finnhub local-first mcp personal-finance
+4 more
portfolio sqlite stock typescript

Affected surfaces

breaking_upgrade

ReleasePort's take

Light signal
editorial:auto 10d

The 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 summary

Updates πŸ“Š Brief surface, πŸ†• New MCP tools, and πŸ“š Docs across a mixed release.

Changes in this release

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 pass daily_vol_pct
  • show_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 table
  • firma://thesis-log β€” recent trades with recorded reasons
  • firma://profile β€” your goals

πŸ“Š Brief surface

  • risk_summary.daily_vol_pct now exposed (1Οƒ daily range β€” input to simulate_scenario)
  • holdings[].fundamentals.beta_5y now exposed
  • economic_calendar capped at 25 events, high-impact first then medium (chronologically sorted)
  • goal_tracking no longer carries projected_net_worth or on_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

Track evan-moon/firma

Get notified when new releases ship.

Sign up free

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)

All releases β†’

Beta — feedback welcome: [email protected]