Docs

The AI assistant

On this page

Ranking results means telling the tool what "best" means: which conditions a result has to meet, which figure to maximise, and how to weigh the rest. That is the What counts as best dialog in the results explorer, and it assumes you already know the figure vocabulary. The assistant is the other way in: you write a sentence, and it proposes a definition you read, edit and confirm.

Two promises first

It is off until you turn it on, and by default it runs on your own machine, where nothing leaves your computer at all. And it never applies anything: the proposal is a form you edit, and only pressing Confirm writes anything. The manual editor stays exactly as it was, in the same dialog, one click away from any proposal.

What it does

You type something like "I want steady returns, drawdown under 15 percent, and at least 150 trades". It comes back with a proposal: a maximum drawdown condition at 15, a minimum trade count at 150, an objective figure with its direction, and a weighting profile. Every part is an editable line, marked as either taken from your own words or suggested by the assistant.

It doesIt does not
Propose conditions, an objective and a weightingStart, stop or change a run
Mark every threshold as yours or its ownChoose which inputs to sweep, or their ranges
Report the words it could not map, verbatimPick a search method, a budget or a validation period
Count how many of your results already satisfy itProduce a number, a score or a verdict of its own

The last one is the line that matters. The model never invents a performance figure: it selects from the figures TradingView already reported and from thresholds you stated. Everything it proposes is an input you confirm, never an output you are asked to trust.

Using it

  1. Turn it on and pick where the model runs

    Open the extension's settings page: the gear in the side panel header, orOptions on the extension's own toolbar menu. That page is the only place the assistant is configured: which of the three kinds of model to use, what a request contains, and that kind's own setup. It is a setup you do once, and it holds for every chart and every results tab. See where the model runs.

  2. Open the results explorer

    Open a session, then press Objective in the toolbar. The assistant sits at the top of that dialog, above the manual sections: a state chip and a text box, with the gear beside them going back to the settings page.

  3. Write what you want

    Plain words, up to 1,000 characters. Name figures the way you would say them out loud ("drawdown", "profit factor", "trades"), and give the numbers in the units you speak: 15 percent is 15, not 0.15.

  4. Read the proposal, edit it, confirm

    Nothing is applied until you press Confirm, and what is written is exactly what is on screen. Discard leaves your current definition untouched.

Reading a proposal

On screenWhat it means
your wordsThe number is one you actually typed. It is checked against your sentence, not taken on the model's word: a threshold claimed as yours whose number is not in what you wrote is demoted to a suggestion rather than presented as something you asked for.
suggestedThe assistant chose this number. You named the figure but not a threshold, or it added the figure itself. Edit it or remove the line.
N of M results already satisfy thisHow many rows you have already collected would pass these conditions, counted before you confirm. Zero is a legitimate answer, and confirming is still allowed: it may be exactly what you want to go looking for.
Compared with what is active nowEvery element the proposal would add, change or remove against your current definition.
Could not be mappedWords the assistant could not turn into a figure this system records, shown back to you exactly as you wrote them. Nothing is substituted for them.

A confirmed proposal is an ordinary definition. Reopen the manual editor and it is a normal, fully editable definition with no trace of having come from the assistant.

Where the model runs

Three kinds, and the kind is the only thing that decides whether anything leaves your computer. You pick one; it survives a restart; the assistant never switches on its own.

KindWhat it isLeaves your machineCosts
This browser's own modelChrome's built-in model, running locallyNothingNothing
A server on this machineOllama or llama.cpp on a loopback addressNothingNothing
A provider you chooseOne of five hosted companies, on your own API keyWhat you type, our vocabulary, and the strategy's control panelWhatever that company charges you

Firefox has no built-in model, so the first kind reports itself unavailable there and the other two work normally.

Chrome's own model

Chrome can run a model on your machine with no install and no key. It is the default and the least work: if your browser and hardware support it, there is nothing to set up.

If the assistant reports it unavailable, that is Chrome telling you this machine cannot run it, and it is not something this extension can change. Chrome's own pages explain what it needs:

The model may need downloading the first time. The assistant reports Preparing while that happens and will not start a multi-gigabyte download behind your back: it only ever begins one when you turn the assistant on or press check again.

A server on your machine

If you already run models locally, point the assistant at one. Two runtimes are supported by name, both through their OpenAI-compatible /v1 surface:

Ollamallama.cpp (llama-server)
Default address127.0.0.1:11434127.0.0.1:8080
Model fieldMust name a model you have pulledIgnored when it serves a single model
Extension originRefused by default. See belowAllowed by default
Official pagesDownload Ollama · Model library · FAQ: allowing extra web originsllama.cpp on GitHub · llama-server documentation

Paste the address into the setup panel and press Save. The browser asks for permission to reach that address, then the assistant probes it: it identifies which of the two runtimes answered, tells you which one it found, and offers the models that server actually listed. You pick from that list rather than typing a name, because a name the server does not know produces an error you cannot diagnose.

Only your own machine, and no key

The address must be a loopback one: 127.0.0.1 or localhost. Anything else is refused before a request is ever attempted, including another machine on your own network. There is also no field for an authentication key: a local server that demands one is reported as unavailable rather than used, because there is no third party to authenticate to and a secret stored beside the thing it protects buys nothing.

Ollama refuses the extension

This is the one setup problem almost everyone hits, and it looks like a broken extension when it is not. Ollama's allowed-origins list does not include browser extensions out of the box, so it answers every request from one with a 403, before the assistant can even ask which runtime it is talking to.

The fix is to start Ollama with this extension's origin allowed:

OLLAMA_ORIGINS='chrome-extension://*' ollama serve

Then press Check again in the extension. Ollama's own FAQ covers the same setting, including how to set it permanently on macOS, Linux and Windows:

The extension reports this refusal by name rather than as "the endpoint did not answer", because the two need opposite fixes. It also sends its real origin and never hides it: getting around your own server's security control would need a powerful new permission, and your runtime is entitled to know who is calling it. llama-server needs none of this; narrow it with --cors-origins if you want to.

A hosted provider, on your key

You can point the assistant at a hosted model instead. This is the only part of this product that sends anything to a company other than us, so it works on strict terms:

  • It is a second, separate decision. Turning the assistant on does not enable it. Choosing a company has its own disclosure naming that company, and you accept it before a field to paste a key even exists.
  • Your key, your account, your bill. We never hold it, never proxy the request, never meter it and never charge for it. It is available on every plan.
  • Straight from your browser to them. The request never passes through our servers. We never see it, and we never see your key.
  • A closed list. There is no "custom URL" field, by design: a user-typed address would make the guarantee above unenforceable, because the code path that legitimately reaches one company would then reach any host.

The five, each with the page where you create a key and that company's own API documentation. The extension offers a few current models per company and you pick one; which models those are moves with their release notes rather than with ours, so their documentation is where to read it.

The key is stored unencrypted

It sits in the extension's local storage on your machine, in the clear, and the interface says so where you paste it. There is no passphrase in this product, so any key we encrypted it with would be stored right beside it: that would look like protection without being any. Remove is a single action, it deletes the key, and it stops any request already running. Keys are per company, so removing one says nothing about another.

What a request contains

The payload is identical whichever of the three kinds answers. There is no field, header or parameter that appears only when the destination is a company.

In a requestNever in a request
The sentence you type, word for wordAny result row, and any figure value from any backtest
The names and labels of the figures TradingView reports, and which direction is betterChart data, equity curves, trade lists, and any per-trade value
The names of the shipped weighting profilesStrategy logic or Pine source, which the extension never receives at all
Your current definition of best: figure names, your thresholds, the profileThe strategy's stable identity. Its display name is enough for a proposal
The shape the answer has to come back inThe exchange, ever
The strategy's display name, and its control panel: per configurable input, the id, label, group, type, current value, default, and either the numeric bounds and step or the options it offers, plus the help text TradingView shows. Written by whoever published the scriptThe symbol and the timeframe, except when you are defining a community campaign, which is what a campaign is about. Even then the model picks from a list the request carries
A count of any input or characters left out to stay inside the request limitsYour identity, your session, your subscription, or any identifier of this project
Your own search space as it stands: which inputs you sweep, and howThe parameter limit your plan allows. It is checked on your machine, never sent
For a campaign only: the symbols and timeframes it could cover, and the axes the draft already holdsAny earlier sentence, proposal or refusal. None is stored, so none exists to send

The left column is not one payload. The first five rows are in every request; the rest are carried by the kind that needs them, which is why the assistant can propose a search space without ever telling a provider what symbol you trade. Nothing you type and nothing proposed is ever written to disk. The only thing this feature stores is what you confirm, through the same path the manual editor uses. You can check all of this yourself: open your browser's Network panel and submit a goal. On the two local kinds you will see no request at all. See also the privacy policy.

When it refuses

The assistant would rather say no than guess, and a refusal never applies anything. Your current definition of best is untouched in every case below.

What happenedWhat you see
You named a figure TradingView does not reportThose exact words reported back as unmapped, with nothing proposed for them. A Calmar ratio does not quietly become a Sharpe ratio.
The model's answer could not be readThe whole answer refused, nothing applied, and the raw text it returned available behind a control that starts collapsed. It is shown as plain text and is never stored.
The answer named a figure outside the listThe entire proposal refused, never partly applied.
The answer contradicted a figure's fixed directionRefused. A deeper drawdown is never better, whatever a model says.
The model took too longA timeout after 60 seconds, stated as a timeout and never as a missing model.
A hosted provider said noThe cause by name: a wrong key, a rate limit, an exhausted balance, or an outage. Those need four different actions, so they are four different messages.

Limits

LimitValue
Goal length1,000 characters
Time a request is given60 seconds, the same for all three kinds
Requests at a timeOne. A new one replaces the one before it
PlansEvery plan. Nothing here is metered, counted or billed by us

Troubleshooting

SymptomWhat to do
The assistant is nowhere in the dialogYou are on a pooled campaign view, which has no local results to count a proposal against. Open one of your own sessions and try there.
It says "Not checked"Nothing has been determined yet, on purpose: it never probes anything on its own. Press the state chip in its header to check now.
"This browser has no on-device model"Firefox, or a Chrome without the built-in model. Use a local server or a hosted provider, or read Chrome's requirements.
"Ollama refused this extension's origin"Start Ollama with the origin allowed.
"This is not a runtime the assistant supports"Something answered on that port, but it is not Ollama or llama-server. Check the port, and check the server is actually running.
"Access to the local address was not granted"The browser permission prompt was declined. Press Save again and accept it, or grant it in your browser's extension settings.
The provider rejected the keyPaste it again from that company's key page. A rate limit and an exhausted balance are reported separately, and neither is fixed by changing the key.
The proposal is not what you meantEdit the lines, or discard it and rephrase. It is not deterministic, so the same sentence may map better the second time. The manual editor is always right there.

FAQ

Does the assistant run backtests or pick strategies?

No. It proposes a definition of what counts as a best result, which you edit and confirm before anything is applied. It never starts a run, never changes what is being searched, never picks a method or a budget, and never produces a verdict about a result.

What leaves my machine?

Nothing, unless you choose a hosted provider yourself. On the browser's own model and on a server running on your machine, no request leaves your computer at all. Choosing a hosted provider is a separate decision with its own disclosure naming the company.

What is actually in a request?

Your goal sentence, the names and labels of the 17 figures TradingView reports, the names of the shipped weighting profiles, your current definition of best, and the shape the answer has to come back in. No result value, no chart data, no trade list, no strategy logic, no parameter, no symbol, no timeframe, and nothing identifying you or your subscription.

Who pays for a hosted model?

Yours. Bring your own key. We never hold it, never proxy the request, never meter it and never bill it. The request goes straight from your browser to the company you picked, and it is available on every plan.

Why does Ollama refuse the extension?

Ollama does not allow browser-extension origins out of the box and answers with a 403. Start it with OLLAMA_ORIGINS=chrome-extension://* and check again. The extension states this exact setting when it detects the refusal, and never disguises its own origin to get around it.

What if it does not understand a figure I named?

It says so and proposes nothing for that part. It reports the words it could not map back to you verbatim, and it never substitutes a figure that merely resembles what you asked for.

Is it deterministic?

Yes. The same goal may produce a different proposal next time, which is why nothing is applied until you confirm what is on screen. A run stays reproducible regardless, because it copies the definition in force when it starts.

Do I have to use it?

No. The manual editor is unchanged and stays the way it always was, in the same dialog. The assistant is off until you turn it on and can be turned back off at any time without losing anything.

Everything else the extension does is in the main documentation, and splitting a sweep across several machines is in testing communities.