Help · App reference

Assistant

Website claim correction · behavior applies to version 0.49.3

The Assistant page is a chat pane that answers from your data. It reads your accounts, holdings, target models and saved plan with the same tools an outside AI client would use, and it can run the same Monte Carlo projection the Projection page runs. That means "when can I retire?" gets answered by running your plan, not by describing retirement in general.

Two doors, two bills

This pane and Allow AI assistants to connect are the same feature seen from two sides, and the difference that matters is who pays:

  • This pane talks to whichever AI source you pick below: Claude or DeepSeek under your own key, billed per token, or a server running on your own machine or network, billed to nobody.
  • A connected client, such as Claude Desktop, Claude Code, or LM Studio, uses whatever plan that client is on. See AI assistant access.

You can use either, both, or neither. They read the same data, run the same tools, and obey the same three permission rows.

Choosing which AI answers

Settings → AI assistant → Which AI answers offers four sources. Each one keeps its own setup and its own key, so you can configure several, such as Claude and DeepSeek and an LM Studio box, and switch whenever you like; when more than one is ready, a switcher appears in this page's header too. Switching starts a new conversation, because the sources speak different formats.

Claude. Paste an Anthropic API key. safeStorage encrypts it into an opaque app-owned blob beside the app's config file, outside the portfolio database and its backups. The renderer receives configured or error status, never the stored value; the main process decrypts the selected key only when it calls Anthropic. The app never shows the stored key again and never sends it anywhere except Anthropic. Whatever you ask, and whatever the assistant reads to answer, goes to Anthropic's API. That is the trade this source makes.

DeepSeek. The same encrypted-blob and main-process-only arrangement with a DeepSeek API key (platform.deepseek.com), at rates a small fraction of Claude's. There is no address to configure because the app knows DeepSeek's endpoint. You provide just the key and a choice of two models: Flash, the fast, very cheap default, or Pro, which reasons longer on harder questions. What you ask and what the assistant reads goes to DeepSeek's API, the same trade as any hosted AI.

LM Studio. A free model server on your own hardware. On this computer: open LM Studio's Developer tab, start the server, and the prefilled http://localhost:1234/v1 is already right. On another machine, such as a desktop with a big GPU, switch on Serve on Local Network in that LM Studio's server settings and enter the address it shows. Either way, give the app the loaded model's API identifier (LM Studio shows it beside the model). No key exists for LM Studio, so none is asked for.

Other server. Any other OpenAI-compatible server, including Ollama (http://localhost:11434/v1), llama.cpp, vLLM, or a hosted service that speaks the same protocol, works with its address, its model name, and an optional key for servers started with one.

Naming the model, on any of the four. Every model field can fetch the list from the source itself. Click into it and the app asks that server what it can run, so an LM Studio identifier or a newly released Claude model can be picked instead of typed. The list is a convenience, not a gate: typing a name the app has never heard of still works, and if the server can't be reached the field says so and keeps accepting what you type. Claude and DeepSeek keep their short priced lists as the first choice, because a model this app has prices for is one whose turns it can cost.

The panel grades every address honestly. On this computer: nothing leaves the machine: not your balances, not your plan, not your question; no key, no account, no bill. On your own network (a 192.168.… address, a .local name): what the assistant reads goes to that machine over your network, but not out to the internet. Anywhere else, the panel says plainly where your data would be sent.

The catch is the model. These questions are long tool sequences: read the plan, run a projection, change one input, and run it again. Holding one takes a model that is genuinely good at function calling. Strong local models manage it; small ones lose the thread, call the same tool twice, or send arguments the app can't read. When that happens the pane says which call failed and why, and the model is given a chance to fix it; it is not a crash. Which model to run is your choice, and it is the thing that decides whether this backend is useful.

What it costs

On LM Studio or an other server, there is no service charge. The answer comes from your own hardware. The line under each answer shows the tokens the server reported, if it reports any, and no dollar figure: this app has no price list for a model it didn't ship, and a made-up number would be worse than none.

On Claude and DeepSeek, under every answer is what that turn used and roughly what it cost. Two things move that number a lot:

  • The model. Claude's picker offers Opus, Sonnet and Haiku, cheapest last. Opus is the default because the questions this pane is for, such as "sweep retirement ages" and "compare three conversion ceilings," are long tool sequences, and that is exactly where a smaller model loses the thread. For a single lookup, Haiku is a fraction of the price. DeepSeek's two models sit far below all three; a whole DeepSeek sweep usually costs fractions of a cent.
  • Conversation length. Each turn re-sends the whole conversation. Most of that is cached: the tools, instructions, and transcript itself. The transcript is marked for caching as it grows, which is why a long session's later turns cost much less than the first. A cache read is cheaper than a fresh send, not free, and it expires; Clear starts fresh and stops you paying to carry an old thread at all.

The figure is an estimate at list prices, good enough to tell cents from dollars, not an invoice. (DeepSeek's estimate deliberately ignores their automatic caching discount, so it errs high.)

Under that per-conversation line, a second line shows an all-time total. It covers every turn this copy of the app has ever run, whichever source answered it, since it started keeping count. It survives Clear and a restart (see below). The token count covers all four sources; the dollar figure counts only the turns that had a price, so a turn on your own server adds tokens and no cost. Each turn is priced at the model that actually answered, so switching pickers mid-history never repriced an older turn.

Reading an answer

Above each answer is the list of tools it called, with the arguments it chose. That list is the point: it is how you know a number came from your accounts rather than from the model's general sense of what portfolios look like. A tool that failed shows why, and a tool your switches refused says so.

Answers arrive lightly formatted with short sections, bullets, and a table when the model is comparing numbers measured the same way, which is where a table earns its place. A comparison you asked for as a sentence may well come back as a small table; that is the model choosing the clearer shape, not a setting.

Dollar figures follow the app's convention of today's dollars (why), with one deliberate exception: a model backtest reports the historical, un-adjusted dollars a statement would have shown at the time, and the answer says which of the two it is quoting. Projections are seeded and backtests replay recorded prices, so re-asking the same question gives the same numbers and two runs that differ by one parameter differ only by that parameter.

What it can and can't do

The three rows under What assistants can do are the whole permission set, and they govern this pane exactly as they govern a connected client. Reading is always on; projections, previews and backtests, and model proposals, are each their own switch.

Nothing here trades, moves money, deletes anything, or edits your holdings, accounts or settings. A proposed target model arrives as the same approval card a connected client's would. You save it or discard it, and nothing is written until you do.

Web search is off by default and is a separate switch on the Claude source only. With it on, the assistant can search the web for fund research; the search runs on Anthropic's servers, so the query goes out but your portfolio does not. The other sources have no such tool, so the switch isn't offered there. Those models work from what they were trained on and what the app's tools tell them.

The conversation itself lives in memory only. It is never written to your portfolio database or its backups, and it is gone when you quit or hit Clear. The all-time total above it is different: the app keeps that one small running number, covering tokens and estimated cost but no question or answer, in its own config file next to the Tiingo key and the license, off the portfolio database and its backups, so it survives a Clear, a quit, and a "Set up my own" or sample swap.