# Thesis (/docs/apps/thesis)

Turn your investment thesis into an AI-managed portfolio of tokenized stocks.



Thesis builds a basket of tokenized US stocks from a thesis you write, then
reviews it every trading day. Each basket is a private workflow on your
account. It swaps only between USDC and the listed stocks, inside your wallet,
on Relay. The controls described here are enforced by Solaris AI's servers;
they are not on-chain rules.

Install and propose a basket [#install-and-propose-a-basket]

Install Thesis from **App Store → Trading**, then open it and choose **New
basket**. Installing creates no workflow, no schedule and no wallet
permission. You can keep up to 5 baskets; a closed basket counts until you
remove it.

Write a thesis of up to 500 characters, or pick a template: Mag 7, AI chips,
AI power and compute, Health innovators, Attention economy, Steady compounders,
Crypto equities or Core. **Propose basket** sends your thesis and the day's
research to the agent, which picks 3 to 8 stocks from the listed universe and
rates each with a conviction from 1 to 5. You can make 10 proposals a day. The
same thesis with the same rules on the same research day returns the same
proposal at once, and that does not count toward the 10.

The proposal shows each stock with its reason and up to three cited news
stories, with publisher, date and link. You can change a stock's conviction
or remove it, down to the minimum count your caps need. The agent never sets
weights: Solaris AI's code turns convictions into weights. Each stock's share
is proportional to its conviction, no stock goes above the largest-stock cap,
and the cash you choose to keep stays in USDC.

Each pick also has a role: core for the stocks the thesis rests on, enabler
for the suppliers and infrastructure it needs, and option for smaller bets that
pay off if the thesis plays out further. **What could break it** names the
development that would hurt that pick. Above the picks, the agent names the
key call, the one judgment in the basket that matters most, and up to three
claims the thesis depends on, each with the event that would prove it wrong.
These parts appear only when the agent's answer includes them in a usable form.

Before you see the proposal, a second model audits it. The agent is Gemini 4
Argon and the auditor is GPT-6.1 Sol Pro; both reason before they answer, so a
proposal can take a few minutes. The auditor reads the same research and checks
that what the agent says about each company is true, that each reason is
supported by the stories it cites, and that each pick fits your thesis. Any
error it names counts, whatever its overall verdict. If it finds one, the agent
answers once more with the auditor's notes, and the auditor checks the new
answer. The proposal shows the result under **Checked by a second model**: no
errors, errors fixed (confirmed by the second check), errors that remain, a
revision that could not be rechecked in time, or not audited when the audit
could not finish. Only a proposal with no errors, or with confirmed fixes, is
reused for someone proposing the same thesis that day.

Rules in plain English [#rules-in-plain-english]

On the proposal you can write rules of up to 500 characters, such as "never
more than 20% in one stock" or "no Chinese companies". A model maps each rule
to one of the settings below, or to listed stocks the basket must never buy,
and says when a rule cannot be expressed, such as a sector cap or a stop-loss
per stock. Each result is shown with the rule it came from, and you can undo
an exclusion. An excluded stock leaves the proposal when the basket keeps its
minimum count; otherwise propose again, and your rules carry over. You can
apply rules 30 times a day.

The never-buy list is fixed when the basket starts. Proposals and every daily
review leave excluded stocks out of the candidates, so they can never enter
the basket. A copy follows its leader and has no never-buy list of its own.

Fund and start [#fund-and-start]

Name the basket and enter an amount in USDC, at least 30. **Review numbers**
checks the amount against the USDC in your wallet that no other basket
holds, that the wallet keeps at least 0.02 SOL for network fees plus 0.0025 SOL
for each stock's token account (0.04 SOL for 8 stocks), that every
stock can be bought today, and that the smallest buy is above your minimum
trade. The numbers it shows are what **Start basket** uses, for 10 minutes.
Start needs the one-time Solaris AI wallet server-signing authorization.

The first buys run at the next market session, Monday to Friday, between
15:00 and 20:00 UTC. Each swap is quoted on Relay with its fee at that time.

What the agent reads [#what-the-agent-reads]

Research comes from one news provider, AlphAI, read once per trading day at
14:00 UTC for every listed stock. A story counts as evidence for a stock only
when the provider analysed it for that stock; a story that only mentions it
does not. Stock prices come from Relay sell quotes taken at 14:45 UTC for
every listed stock. The agent sees the stories, your holdings and their
weights. Text inside a story is treated as data, never as an instruction.

The listed universe is 57 tokenized stocks and funds issued by xStocks and
Backpack Securities: for each company, its most liquid token on Solana. SPY,
QQQ, GLD, DRAM, COPX and EWY are funds: they can be held, but they have no news
of their own. A stock whose price impact is above 2% on a given day is not
offered that day. No other token
can enter a basket.

The daily review [#the-daily-review]

Each basket reviews once per trading day at its own time: baskets with their
own agent between 15:00 and 17:59 UTC, copies between 18:00 and 19:59 UTC. NYSE
holidays and early-close days are skipped. Running a basket's workflow by
hand is refused; it trades only on its schedule.

When nothing the agent would read has changed since its last answer (no new
story, sentiment count or title, no change in what can be traded), the basket
holds without asking it; it still asks at least once a week. Drift
trades and cap trims run on those days as on any hold.

The agent answers hold or change. Hold is the default when the news did not
change. A change can adjust convictions (a rebalance) or swap stocks (a
rotation). A stock that enters or leaves needs a cited story with relevance 7
or more, published within the last 3 trading days. At most 2 stocks enter and
2 leave per day, and a stock that left cannot come back for 5 trading days.
A change that fails these rules is dropped and named in the decision; the rest
of the answer stands.

Every change goes to the auditor before anything trades. If it finds an error,
the basket holds that day and the decision gives the auditor's reason. If the
audit cannot finish in time, the change goes ahead and the decision says it
was not audited. Holds are not audited, because nothing trades.

Some days the basket holds without trading at all, and the decision log says
why: a previous trade is still settling, another basket in the wallet is
settling, the wallet is below the SOL reserve, research or prices for a holding
are missing, the review could not run or returned an unusable answer, balances
changed while planning, or the wallet holds less than the basket's ledger.

How trades run [#how-trades-run]

After the review, sells run first and then buys, one swap per stock. A stock
is rebalanced only when it is off its target by more than the drift band. A
stock that left the basket is sold in full, and a stock above the largest-stock
cap is trimmed even inside the band (a copy follows its leader's weights
instead). Drift sells in one day stay within the
daily sells cap; exits and cap trims are not limited by it.

Buys are sized after the sells settle, from the cash the basket holds above
its cash target, and each buy spends at most 97% of the gap to its target.
A swap is skipped when its price impact is above your limit, when it is below
the smallest trade, when its fresh quote is more than 3% away from the day's
price, or when no route exists. Skips are listed in the receipt.

Before signing, Solaris AI checks the transaction Relay built: it may only
swap the planned amount between USDC and that stock, pay Relay's fee, and
deliver the output to your own token account, with at least the minimum the
quote guarantees. The signed transaction is then simulated, and it is refused
unless the simulated balances match. A check that fails ends that swap
unsigned; nothing is sent.

Each settled day with trades sends one receipt to your notifications, and to
Telegram or Discord if you chose them as the receipt destination.

Fees [#fees]

There are no run credits. Each swap pays the fees quoted with it on Relay:
Relay's own fee (0.15% when we checked) and the Solaris AI fee of 0.75%, lower
with the SOLARIS holder discount. Network fees and the rent for new token
accounts come from your wallet's SOL.

The record [#the-record]

Each rebalance or rotation is graded on the next trading day, once that day's
prices exist. The grade compares the weights the decision chose with the
weights it replaced, each stock priced at its Relay sell quote on both days;
cash counts as flat. A decision that did at least 0.10% of the basket better
than keeping the old weights is **Helped**, at least 0.10% worse is **Missed**,
and anything in between is a **Wash**. Holds are not graded. The grade scores
the call, not the trades: a skipped or partial swap does not change it. A
decision whose prices are missing stays ungraded.

The basket page shows each grade and the count of Helped, Missed and Wash over
the recent decisions. A published basket shows the same record on its public
page.

The ledger and NAV per unit [#the-ledger-and-nav-per-unit]

A basket keeps its own ledger: the USDC and the units of each stock it bought.
Tokens you buy elsewhere are never part of a basket, even in the same wallet.
Each trading day, before it plans, the basket checks that the wallet holds at
least what its ledger says. If it holds less, the basket holds and offers **Resync**,
which scales every basket's ledger down to what the wallet holds.

NAV per unit is the basket's track record. It starts at 1.0000. Each holding is
valued at that day's Relay sell quote, applied to the token amount held, so
results include fees and slippage. **Add cash** adds unassigned USDC from your
wallet and **Release cash** takes cash out of the basket's ledger; both adjust
the units at the current NAV per unit, so they do not change it.

Breaker, pause and unwind [#breaker-pause-and-unwind]

The breaker freezes a basket when its NAV per unit falls the breaker share
below its peak. A frozen basket does not trade until you **Resume** it, which
sets the peak to the current NAV per unit, or unwind it. **Pause** stops the
daily review; trades already sent still settle.

**Unwind to USDC** sells every holding in full on Relay, subject to the price
impact limit and the smallest trade, but not to the daily sells cap. It runs
Monday to Friday and not between 00:00 and 01:30 UTC, while issuers apply
corporate actions. The basket ends paused with its value in cash; any holding
a skipped swap left behind stays listed.

**Close** turns the schedule off and stops tracking the basket's tokens and
cash. It sells nothing: the tokens and USDC stay in your wallet. **Remove**
deletes a closed basket with its decisions and trade history.

Publish and copy [#publish-and-copy]

You can publish a basket that has its own agent and is active. Its public page
shows the thesis, holdings, daily decisions with their cited stories, and NAV
per unit. Your wallet address, transaction links, amounts and exact times stay
private. Unpublishing hides the page; the address stays reserved for it.

Anyone signed in can copy a published basket into their own wallet. A copy
keeps its own ledger, units, caps and breaker, starts from the leader's
current stocks and weights, and each trading day follows the decision the
leader made that day. When the leader has no decision that day, or is
unpublished, paused, frozen, unwinding or closed, the copy holds. Public
baskets are listed on the Thesis page by how many people copy them.

Recovery [#recovery]

Every swap's signature is recorded before it is sent. If a run ends before a
swap confirms, Solaris AI checks it against the chain every minute, updates
the ledger from the confirmed amounts, and settles the day. This continues
after you pause or close the basket.

Settings [#settings]

| Setting            | Range                     | Default | What it does                                   |
| ------------------ | ------------------------- | ------- | ---------------------------------------------- |
| Largest stock      | 10 to 50%                 | 35%     | No stock is planned above this share.          |
| Cash kept          | 0 to 50%                  | 5%      | USDC kept after a rebalance.                   |
| Drift band         | 1 to 25 points            | 5       | A stock is rebalanced only beyond this.        |
| Daily sells        | 5 to 100%                 | 30%     | Drift sells per day, as a share of the basket. |
| Breaker            | 10 to 50%                 | 25%     | Freezes the basket this far below its peak.    |
| Slippage           | 10 to 300 bps             | 100     | Passed to every swap.                          |
| Price impact limit | 0.1 to 10%                | 2%      | A swap with more impact is skipped.            |
| Smallest trade     | 1 to 1000 USD             | 1       | Trades below this are skipped.                 |
| Receipts           | In app, Telegram, Discord | In app  | Where receipts go.                             |

Changing the largest-stock cap or the cash kept recomputes the weights from
the convictions. Settings are whole numbers except the price impact limit,
which takes one decimal.

Issuer controls and eligibility [#issuer-controls-and-eligibility]

The listed tokens are issued by xStocks and Backpack Securities. Their
issuers can freeze accounts, pause all transfers, move or burn tokens in any
holder's account, and add a transfer hook. A paused stock does not trade that
day and is valued at its last price; a basket keeps trading its other stocks.
Tokens moved by an issuer show up as a ledger mismatch. Dividends and splits
change the displayed share count, not the token amount the basket tracks.
xStocks and Backpack Securities do not offer their tokens to US persons.
