Investor Intel opens on a free plan, connects to your own agent, and names its sources
Investor Intel now has a free plan and an address you can hand to Claude, Cursor or any other agent that speaks MCP. The free plan is the same product with the per-reader parts locked: every market board and asset page, the regime figures, every recorded capture, the chart workstation, the narrative briefs and the whole tokenized real-world asset workspace, with no card and no clock. Around that, a large release. Wrapper premiums, on-chain depth, issuer legitimacy read from public registers, advertised yield against the yield we computed, and the SEC filer behind a tokenized stock. Meme graduation now follows real launchpads across five chains, New listings is rebuilt around the columns the capture actually fills, Markets search takes a ticker, a name or a contract, and the chart gains years of history, a post from X you can pin to a moment, and a share button. And every figure now carries the source that answered it, the time it was captured and what it cost to get. Full agent instructions are below.
New
Investor Intel
Connect your own agent
Investor Intel speaks MCP at one hosted address. You create a token in the app, give the address and the token to whatever agent you already use, and that agent can read the market and tokenized real-world-asset intelligence, read your own watchlists, alerts, theses and research, and ask for changes that you approve yourself. Nothing is installed, nothing runs on your machine, and no port is opened. The token is a key you made, scoped to what you ticked, pinned to one workspace and revocable at any time.
Agent access is part of the Starter plan and above. A trial counts as above Starter. On the free plan the address refuses the token at the door and says which plan opens it.
Step one: create a token
Open Investor Intel, then Settings at the foot of the sidebar, and find Your own agent. Give it a name under What is it for, so you can tell your tokens apart later. Set Expires after (days); it starts at 90. Then tick what it may do and press Create token.
- Under What it may read, tick Portfolio, Theses, Alerts, Charts, Watchlists or Evidence. Read-only is the sensible default and is what you get if you tick nothing else
- Under What it may ask to change, Add to watchlists and Save research notes let your agent write those two things directly, because both are yours and both are undone in one click
- Create alerts, Annotate charts and Add thesis evidence do not let your agent change anything. They let it ask. The request appears in this same panel with a fingerprint, and nothing happens until you approve it
- Ticking a change also ticks the matching read, because a change is only finished once it has been read back
The token is shown once and cannot be shown again. Copy it before you leave the page. We store only a fingerprint of it, which is why we cannot fill it into the snippets below for you.
Step two: connect from Claude Code
One line in a terminal. Replace YOUR_TOKEN with the token you just copied.
- claude mcp add --transport http investor-intel https://andrimdaxlxcqgqdqrbz.supabase.co/functions/v1/intel-mcp --header "Authorization: Bearer YOUR_TOKEN"
- The address is on the same settings page, with a copy button beside it
Step two: connect from Cursor
Put this in .cursor/mcp.json for one project, or ~/.cursor/mcp.json for all of them.
- "mcpServers": { "investor-intel": { "url": "https://andrimdaxlxcqgqdqrbz.supabase.co/functions/v1/intel-mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } }
The file holds the token in plain text. Keep it readable only by you.
Step two: connect from Claude Desktop
Claude Desktop is the one that needs a different shape, so here it is in full. It reaches a remote server through a small bridge it starts for you, which needs Node installed. Open Settings, then Developer, then Edit Config, and add an entry with command set to npx and args set to -y, mcp-remote, your address, --header, Authorization:${INTEL_TOKEN}, --transport, http-only. Then add env with INTEL_TOKEN set to Bearer YOUR_TOKEN.
- The token goes in env and is referenced from the header, so it never sits in a list of arguments that other software on your machine can read
- Write Authorization:${INTEL_TOKEN} with no space after the colon. The bridge splits on the first colon, and a space would end up inside the value
Adding the address as a custom connector instead will not work. That path asks the server to run its own sign in, and this one wants the token you made. The bridge entry is the one to use.
Step two: connect from anything else
Any client that speaks MCP over streamable HTTP can connect. Point it at the address, send Authorization: Bearer with your token, and use the HTTP transport. Protocol versions 2025-06-18 and 2025-03-26 are both spoken, and a client that asks for a newer one is answered with the latest we know rather than refused.
Check it worked
Send the address a tools/list request with your token, using curl or whatever you have to hand. A list of tools means the token is live. A 401 means it is missing, wrong, revoked or expired, and the answer says which.
- Once connected, ask your agent to call whoami first. It reports the scopes the token has, your plan, every tool it can use and every tool it cannot with the reason for each, so a refusal is something you can read rather than guess at
What your agent can do
Twenty one tools, grouped by what they answer. None of them spends a data credit: every read comes from a capture we already took or an observation we already kept, so a figure that looks old is an old capture rather than a reason to try again.
- Markets: search_assets finds an asset by ticker, name or contract address. get_asset gives identity, contract per chain, the newest kept quote with its observation time and our cross-source agreement verdict. market_regime gives fear and greed, altcoin season, dominance, total and stablecoin market cap, plus our own breadth reading
- Listings and launchpads: new_listings covers the newest arrivals with chain, contract, inspection state and the move since our first capture. meme_graduations follows the launchpad funnel with graduation rate, time to graduate and post-graduation survival
- Real-world assets: rwa_universe for counts, issuers, market value and volume per type. rwa_issuer_legitimacy for the legal entity, how it was identified, admission history, holder concentration and transfer restrictions. rwa_yield_provenance for advertised rate against the rate we computed from on-chain NAV rounds. rwa_issuer_terms for who may redeem and on what minimums, each with a link. rwa_wrapper_premiums for the premium or discount of a wrapper against its anchor. rwa_liquidity_depth for pools and whether there is anywhere to sell. rwa_underlying_registrant for the SEC filer behind a tokenized stock
- Your workspace: watchlist_read and alerts_list read your own lists and rules, each behind the matching tick. data_budget says how many calls you have left today and how fresh every store it can read actually is
- Writes: watchlist_add and save_research_note write directly. alert_create proposes an alert and creates nothing. write_status tells your agent whether you have approved it yet, and write_run runs exactly the request you approved and then reads the row back to confirm it landed
Every answer carries its capture time and its source
A model cannot see a page footer. If an answer is a bare number, it gets repeated as a bare number with nothing attached. So every result from this address carries three fields: as_of, the capture time the answer rests on, which can be empty and then means nothing has been captured yet. source, naming who the figure came from and which of our stores holds it. And calculated_by, which says provider when the number is theirs and names us when the number is ours, with a line saying what we made it from.
- That is what lets an agent quote a figure honestly: dated, sourced, and clear about whose number it is
- Two documents are attachable to a conversation as well: the full tool catalogue, and a short contract explaining exactly what those three fields mean and how to read a refusal
- Two ready-made prompts are there too: one checks a claim against captured data and says plainly when the data does not settle it, the other walks one tokenized asset through every reading that exists
How changes work
Adding to a watchlist and saving a research note happen straight away, because both are yours and both are reversed in one click. Creating an alert does not. Your agent records a request, you see it in the same settings panel with a fingerprint of exactly what it would write, and only then can it run. If it changes the request after you approved it, the approval stops applying and it has to ask again.
Limits, and what is recorded
A token may make 60 tool calls a minute. Per day it is 2,000 on Starter, 10,000 on Pro, and no ceiling on Elite or on a trial. Handshakes do not count against the day, because some clients reconnect on every turn and that is not your doing. The allowance resets at midnight UTC and data_budget reports what is left.
- Every tool call is recorded with the tool it used, whether it was answered or refused and why, how long it took and how large the answer was
- No tool arguments are recorded. Not shortened, not hashed. An argument can be a wallet address or a note you typed, and the question that record answers never needs one
What a token cannot reach
Only a fingerprint of the token is stored, so nobody can read it back out, including us. It is pinned to one workspace and cannot see another. Every read of your own records is filtered to your workspace and to you, so it cannot see another member. It cannot create, list or revoke a token, and it cannot approve its own request: those need you, signed in. It cannot see data spend, our own provider rate limits or cost projections. And there is no general query tool: every read is a named tool with a fixed, closed set of arguments.
- Revoke a token in the same panel and it stops working on its very next call. Your plan is re-checked on every request too, so a downgrade stops tokens that were made while it was higher
Three things to try
Paste one of these to your agent once it is connected.
- Which tokenized real-world asset types grew most this month, and what is the largest asset in each? Quote the capture time
- For the tokenized gold wrappers, compare the premium or discount against the anchor and tell me which ones were liquid enough to count
- Check my watchlist against the newest listings and tell me if anything I follow was flagged in a security inspection. Say plainly if nothing was inspected
Investor Intel has a free plan
Investor Intel now opens with no card and no clock. The free plan is the same product with the parts that run a fresh request for you locked, and everything already computed once for everyone stays open: every market board and asset page, the market regime figures, every recorded capture, the chart workstation over the archived candles, the narrative briefs, a watchlist of ten, and the tokenized real-world asset workspace with its issuers and evidence. You can start one from the pricing page or from the Investor Intel page.
- Locked until Starter: on demand research, Connected Research, portfolio valuation, AI generation, price history, alerts, Wallet Watch, the Thesis Journal, Comment King and agent access. Each of those asks a provider for something new every time it is opened, which is the only reason it sits behind a plan
- A locked reading is replaced in place by a panel naming the plan that opens it, and the refusal happens on the server, so nothing is loaded into the page and then hidden. The placeholder shape on it is stated as a placeholder
- Taking the free plan does not spend your seven day trial. The trial is still there if you want it later
When a seven day trial ends, the workspace falls back to the free plan in place. Same workspace, same members, and every watchlist, thesis, trade, saved research note and setting still there. You simply stop being able to add more past the free limits. Upgrading later reopens all of it in the same workspace, with nothing to move.
The real-world asset workspace is open on the free plan
The tokenized real-world asset views no longer need a paid plan. Reads there are shared: one member reading an asset fills the record for everyone, and live reads on the free plan are held inside a small daily allowance, so an asset nobody has opened yet today may show its last captured reading with its time.
Wrapper premiums and discounts
The same real asset is often wrapped several times, and the wrappers do not trade at the same price. A new Wrapper premiums page shows the premium or discount of each wrapper against its asset anchor in basis points, using the published NAV where one exists and otherwise the volume-weighted median of the liquid wrappers. Gold wrappers priced per gram are restated per troy ounce first, so a unit difference is never read as a premium.
- A wrapper that accrues its yield inside its own price is shown with that accrual named instead of a premium, because calling it a premium would be wrong
- Each row says whether the wrapper was liquid enough to count, and the two provider endpoints behind the figures are reconciled against each other rather than one being trusted blindly
- Every column sorts, and an empty result is stated as missing coverage. It never reads as an asset having no premium
Where a tokenized asset can actually be sold
A new depth reading per tokenized asset token: which chains it is deployed on, which of those we can read, how many pools there are, total and deepest pool liquidity, 24 hour volume and holder count. A pool only counts towards that liquidity when the other side of it is something a seller could take out, meaning a major quote asset on that chain or another tokenized asset we have captured, matched by contract address rather than by the symbol a token gives itself. Reported pool liquidity values both sides, so a pool against a token nobody can value still reports a large number. Those pools are listed separately with what they report, and are in none of the figures.
- Where there is no reading, the reason is given in words: the chain is not one we cover, the issuer redeems directly rather than listing on a venue, or no deployment is known
- A token whose only pools are against tokens we cannot value gets its own state, which is not the same as having no pool
- Coverage fills in on the daily capture, so a chain or a pool not classified yet is labelled rather than guessed at
This is not a slippage model. A token with no pool reading is a gap on our side and is labelled as one, never as a token with nowhere to sell.
Issuer legitimacy and admission reality
A new board on the structure figures reads a tokenized asset issuer out of public registers rather than a curated list: the Global LEI Foundation for the legal entity, SEC filings for admission history and terms, the sanctions publication as a pointer to the primary register, verified contract source for whether transfers can be restricted, paused or frozen, and a block explorer for holder concentration. Every figure keeps its own source link and the date it was read.
- How the entity was identified is stated rather than assumed: an exact legal name match, a filing entity name match, or an identifier the issuer published itself
- A term a later review withdrew is marked as withdrawn rather than quietly dropped, and a fact with nothing captured yet says so and names the hour its read runs
Advertised yield against the yield we worked out
For tokenized treasury and fund wrappers, a new panel sets the rate the issuer advertises beside the rate we computed from consecutive on-chain net asset value rounds, and both against the benchmark the product is measured on. A feed we could not prove on chain is not reported as healthy, and a feed past its own published heartbeat is named as stale rather than used.
- A round whose change in net asset value cannot be explained from free data is routed to review rather than published as a yield
Net asset value feeds are read every six hours, and the panel names which capture the table on screen is.
The company behind a tokenized stock
For a tokenized stock or fund, the filer number the data source asserts is now read back at the SEC, and the registrant name EDGAR holds for it is shown beside the asset name with whether the two match. You also get the industry classification, state of incorporation, fiscal year end and the latest annual, quarterly and current filings. This is the underlying listed company, never the token issuer, and the two are labelled as different things.
- A filer number EDGAR has no record of is reported as not found, which is a finding about the provider number rather than a blank
- Days since the last periodic filing is named as our own subtraction, with the filing it counted from and the window it is judged against
Unusual for this asset
Markets gains a ranking that asks a different question from the biggest movers list: not which asset moved most, but which asset moved most unlike itself. Each asset's last complete day is measured against its own trailing distribution, so a steady asset making a modest move can rank above a volatile one making a large one.
- Assets left out are counted and explained in words: too little stored history, a peg whose trailing moves are peg noise, a wrapper or staking receipt whose distribution belongs to the underlying, or turnover under the floor
- It says what it is not: an unusual day means this asset rarely moves like this, not why it did or what happens next
Meme graduation follows the launchpads
The meme graduation lifecycle now reads three capture lanes once an hour across five chains: Pump.fun, Meteora DBC, LetsBonk on Raydium LaunchLab, Boop, Bags and Moonit on Solana, Four.meme and TikTok.fun on BNB Chain, Virtuals, Bankr and o1 Launchpad on Base, Pons, Clanker, Bankr and Virtuals on Robinhood Chain, and SunPump read straight off TRON.
- Filter the whole page by chain, by launchpad, or both. A launchpad board lists every pad with its stage counts, its cohort graduation rate and the median hours it took to graduate, and clicking a pad name filters the page to it
- Every row opens the asset. Where the source published no symbol the row carries the shortened address rather than a dash, and the contract copies in one click
- A pad that has not run long enough to measure a rate says it needs history, rather than printing a rate of zero
- The launchpad stages are powered by CoinGecko, and the page says so
No source publishes a clock for a discovery list, so the capture hour is ours: every hour figure is time since we first saw a contract, not since it was deployed.
Years of price history on the chart
A full daily history is now stored once per asset and extended forward, so the chart's range strip gains one year, two years, five years and all. For the oldest assets that is well over a decade of daily candles. On a long range the time axis labels years instead of repeating days, and the chart still says how far back its own history actually goes, so a short history is stated rather than implied.
Pin a post from X to a chart
A new tool on the chart drawing strip takes the address of a post on X and pins that post to a moment and a price. The card carries the author, the handle, the picture and the text, and is read on our side rather than in your browser. Resize it from the corner; the size and the anchor are saved with the drawing, so it survives a reload and travels with a shared chart.
A post that cannot be read says so rather than leaving an empty card.
The chart you leave is the chart you come back to
Range, candle interval, indicators, drawings, scale and timezone are written back a couple of seconds after your last change, and again the moment you leave the tab. Reopen the asset and the workstation is already the way you had it. A quiet saving and saved line sits beside the chart tools, and a save that does not land never blocks the chart.
Who was trading, grouped by account
A new evidence lens in the connected research workspace walks the recent swap tape for a token and groups it by the account the data source attributes each swap to. It reports how many pages it walked, how many swaps it read, the date range the source gave and how many accounts it named.
A maker is a public on-chain account, not a person. Nothing is resolved to a name, an exchange or an entity, and no account is linked to any other. A sweep already taken this hour is reused rather than repeated.
Improved
Investor Intel
Search Markets by ticker, by name or by contract
The Markets search box now suggests assets as you type. Two characters and a short pause brings a list under the field with each asset's name, its symbol, its chain and its market cap; arrow keys move through it and Enter opens the one you chose at its exact identity. Typing still filters the rows on screen at the same time, and a fast-typed or pasted string is no longer swallowed.
- A plain address such as /intel/markets/bitcoin is now resolved through the catalogue before anything is read, so it opens Bitcoin rather than a meme token that happens to carry BITCOIN as its ticker
- Where a typed string matches several assets exactly, the largest by market cap is offered first rather than an arbitrary one
New listings, rebuilt around what the capture actually fills
The board now carries rank, the listing date, price, 24 hour change and volume, market cap, the move since our first capture, the chain and the inspection state. Every row opens two ways: the symbol opens the asset page, and the inspection cell opens a detail row in place with the contract and its copy button, supply, the holder count at a named capture, and any flags that changed at that capture.
- Market cap says which figure it landed on, reported, fully diluted or self-reported, and says not reported where there is none. An unranked listing reads as unranked rather than sorting as a zero
- The chain distinguishes a verified deployment from one the source merely reports
- Holder count left the table because it was blank in most rows. It lives in the detail now, next to the capture it was read at
- A listing with one capture so far says first capture, instead of showing a move it cannot yet have
The chart's tools moved onto the chart
The drawing tools now run in a strip along the top of the plot instead of a panel beside it, each with a keyboard shortcut, with the overflow collapsing into More. A magnet snaps an anchor onto the exact open, high, low or close you are hovering; with it off, an anchor still lands on the candle's own timestamp, and a point outside the observed history keeps its own exact time rather than inventing a bar.
- One button steps the chart through its normal height, a taller reading height and full screen. Drawings and pinned posts stay on their correct time and price at every size
- Studies is now called Indicators, shows how many are on the chart, and lists them beside the controls in the colour each line is drawn in with a control to remove each one, instead of labelling them on top of the plot
- An indicator now warms up on history fetched before the window you are looking at, so its first visible bars are real values rather than invented early ones, and every candle in the window still gets drawn when that warm-up lengthens the series
- Add a drawing by typing its coordinates, and keep a tool armed to place several in a row
Sharing a chart is one button and a short address
A Share control now sits on the chart itself, rather than only on a saved snapshot. It gives you a short address to hand out instead of a sixty-four character one, and a TheContentForge card of the chart in landscape or portrait to save or copy. The dialog shows exactly what a link preview would expose before you send it.
Minute candles for every asset
One, five, fifteen and thirty minute candles are now available on every asset, not only on a token held by contract. They come from a public exchange rung chosen by traded volume, falling back through the other sources in order, and the chart names the width it actually served rather than relabelling a wider one.
Where the data comes from
The Investor Intel page gains a Where the data comes from section: a plain list of the thirteen sources the product actually reads, with what each one is used for. Every row was checked against the code that calls it. Signed-in pages carry the same information in a source line under the figures it applies to, and the DeFi pages, which named no source at all, now name theirs.
What each figure cost to fetch
Where a figure came from a paid data call, the cost now sits in the receipt summary where you can read it without opening anything: how many calls, how many credits, and whether it was live or served from the shared cache. A figure assembled from records we curate ourselves is named as a record rather than a capture, because the two are not the same kind of thing.
Every figure says what answered it, and when
A source call receipt now sits under the figures across the market pages, the asset page, research, investigation, the portfolio, alerts and theses. It names the provider, says whether a call was made at all, and gives an explicit freshness state: a fresh call, a cached answer inside its limit, a stale one, or one that could not be measured. Each receipt also carries a line saying what the figure does not mean.
- The market figure pages carry a capture receipts drawer covering the whole page
- A panel with nothing captured yet says so and names the hour its capture runs, rather than rendering blank or implying a zero
Corroborated, or a research lead
A move now carries one of two labels wherever it is shown: corroborated, when price, market capitalisation and volume all moved the same way over the same window, or research lead, when they did not, with a sentence saying which one could not be measured. The same verdict travels into alerts, including the ones delivered on Telegram.
A figure that cannot be traced to its evidence is withheld
A generated brief, breakdown, comparison or explanation whose figures cannot all be matched back to the evidence they were built from is not shown at all. You get a notice naming the figures that could not be grounded and a control to run it again, rather than a confident number nobody can check. The thesis drafting assistant now explains the same refusal in words instead of an error code.
How sure a rate is
Rates built on small numbers now carry their interval and their sample size. The meme graduation rate and each survival share, and the win rate and confirmed share in the thesis journal, read as a range with n beside them, so two of eight no longer looks as settled as two hundred of eight hundred. A small sample is labelled as one, and a rate that cannot be measured is left blank rather than drawn.
Breadth in one number
A new figure on the regime page and the Markets strip gives a single signed number for whether the largest assets beat the typical one: the capitalisation-weighted 24 hour return minus the median asset's, over the assets captured, with the count it was taken over. It states plainly what it is not, which is a forecast or a count of assets up and down.
Choose how often a wallet or unlock alert repeats
Wallet activity and unlock rules gain two optional controls: whether one alert covers a qualifying transfer or a whole transaction, and a revision or each scheduled unlock, plus a window in minutes to fold repeats into. Leaving the defaults keeps every existing rule behaving exactly as it did.
A thesis delta that names its own arithmetic
The change since you wrote a thesis now says it is our calculation, names both clocks behind it, the baseline captured when you wrote it and a reading taken now, and prints the baseline's own capture time. A baseline that reported no capture time says so rather than implying one.
Real-world asset counts are the real counts
The asset counts per type were the size of one scan rather than the size of the universe, so a type with thousands of assets reported a few hundred. The universe is now enumerated whole and the counts are true. Twenty four hour volume per type is read and reported, and where the source publishes no 24 hour change we compute it from our own consecutive captures and say that is what we did.
A face beside every asset
Assets and wrapper tokens in the real-world asset views now carry their logo, and the wrapper tables sort by any column. Rows that were empty now say why they are empty.
A tokenized asset profile in the drawer
Opening a real-world asset drawer now shows the asset profile alongside the issuer detail, so you do not have to leave to find out what you are looking at. Profiles are read a batch at a time each day, and an asset not reached yet says so rather than showing nothing.
A catalyst past its review window says so
An earlier coverage story whose review window has closed keeps its title, its date and its link, but our reading of why it matters is no longer presented as current. It is labelled as past its review window instead.
Every new screen, in eight languages
Every screen added in this release is translated in all eight languages, and around three hundred existing strings across Investor Intel and the checkout were tidied where punctuation read badly in several of them. Tickers, units and venue names stay as they are written everywhere.
Fixed
Investor Intel
The upgrade page told free members their trial had ended
A member on the free plan who had never taken a trial was shown a page saying their trial was over and their data preserved, with no way back into the product from it. It now says they are on the free plan, what upgrading opens, and carries a link back to the app. The free column on that page is also translated now, rather than showing English in every language.
Corroboration could not be reached on the busiest assets
The check behind the corroborated label read only the newest handful of observations, which on a heavily traded asset covered less than an hour, and it discarded quotes a minute after they were recorded. Liquid assets could therefore never be corroborated, whatever the data said. The newest readings and the day-old baseline are now read separately, freshness no longer truncates the evidence, and a quote refresh no longer replaces the provenance under the price.
The meme graduation page had nothing in it
The page relied on one data source for its launch lists and that source returned none, so it stayed empty. It now fills every hour from three capture lanes, and a refusal from any one of them keeps its meaning instead of reading as an absence.
Charts said they could not be built when there was simply nothing to show
A figure that is absent for a reason, a lane your plan does not carry, a row with nothing to inspect, a capture that has not run yet, was drawn as an alert saying the chart could not be built. Each of those now collapses to one calm line saying which it is, and that alert is kept for a read that actually failed.
- A contract with no retained public market events now says there is no public market history yet for it, rather than a zero beside a sentence about what that zero excludes
- The regime page states the plan sentence once for the whole network strip instead of three times, and New listings no longer repeats the same no-contract paragraph down the page
Replay did not advance
Pressing play in chart replay did not step the chart forward. It now advances bar by bar at a speed you choose, pauses itself when you leave the tab, and stops at the last loaded bar with a line saying so.
Tables read straight down the column
On every Investor Intel board, a numeric column's header now sits over its own figures instead of at the far left of the column. Markets and New listings also hold the table's height while rows load, so the strip above and the footer below no longer jump when they arrive.
A carried price keeps its confidence through a sync
A holding priced from a pool kept its price through a portfolio resync but lost the confidence label beside it, so a carried price read as a price with no provenance behind it. The label is now read back from the stored book and survives the resync.
The benchmark and sanctions rows came back empty
Three reads behind the real-world asset figures, the Treasury bill benchmark, the Treasury curve and the sanctions publication, were failing quietly. They answer now, so the benchmark column and the sanctions state fill instead of reading as not captured.
Reviews do not expire
Some wording in the product implied an issuer review goes out of date on a clock. It does not. A reviewed fact stops being current only when a later review withdraws it, and nothing now presents a review date as a deadline.
Platform
Starting a brand-new workspace no longer hangs
Creating a workspace and being moved into it could leave a spinner running forever, because the switch looked the new workspace up in a list loaded before it existed, and the refusal was never shown. The switch now fetches the missing membership directly, and a switch that is genuinely refused says so instead of spinning.