How Open Trading Surface works, how to set it up, and how to use every part of it. If you're new, start with the 5-minute quickstart, then dip into whichever feature you need.
"Analyze NVDA — chart it with the 50/200-day averages and RSI,
then give me the fundamental picture and what the bulls and bears would say."
Two ideas explain everything:
Open Trading Surface doesn't just fetch quotes. It maintains a connected chain: a worldview (macro, geopolitics, demographics) becomes theses with explicit, auditable probability estimates and an evidence ledger; theses compile into screens and paper portfolios; individual names are grounded in driver-based operating models. It persists between sessions and is continuously reassessed as evidence arrives. Everything you build compounds instead of resetting.
The terminal is a shared world-model: everything you see, the agent can read and drive. You work by conversation — "add an anchored VWAP and mark the earnings gap," "what do the signals say," "record this as a thesis." The agent inspects the exact view you're looking at and acts on it. It's plan-only: it models, screens, and drafts, but never places a trade or moves money.
Open Trading Surface is a plugin. Install it from the Customize menu:
ots.plugin.ots.plugin file you downloaded. Plugins you add yourself are stored locally on your computer./ menu, and its tools as mcp__ots__*.The easiest path is in the UI: open the terminal, click the ⚙ Settings tab, paste your FMP key (and optionally FRED), and press Test to confirm live connectivity. You can also set FMP_API_KEY / FRED_API_KEY environment variables, which take precedence.
~/.ots/config.json with file mode 600 and are never transmitted anywhere but the data providers themselves.On first launch the terminal presents a one-time legal acknowledgment. You must read and accept it before using the application. A short disclaimer stays visible in the footer at all times, and the full terms live on the Legal page.
Ask the agent to "open the Open Trading Surface terminal." Across the top are per-security tabs plus pinned tabs for Portfolios, Screener, Watchlists, and Theses, a ⚙ Settings tab, and an ✉ Agent button to leave the agent a message. Each security tab has a left rail: Stock Chart, Company Info, Financial Statements, Analyst Ratings, Peer Comps, Ownership, Transcripts, News, SEC Filings, Insider Trades, Operating Model, and Research Notes.
You can navigate it yourself, but the fastest way is to ask. The agent can read what's on screen ("what does the analyst view say for this name?") and drive it ("switch to the cash-flow statement," "open the rebalance view"). Everything below works whether the terminal is open or not — the agent will open what it needs.
The charting workbench is a full technical-analysis surface with its own engine — ~125 indicators, 39 drawing tools, all timeframes and extended hours, compare overlays, and event markers (earnings/dividends/splits/insider trades). Open one with a request, then refine it in words.
| You say | What happens |
|---|---|
| "Chart AAPL daily with the 50 and 200-day moving averages, RSI, and MACD." | Opens an interactive chart with those overlays and oscillators. |
| "Add an anchored VWAP from the last earnings date and mark the gap." | The agent adds the drawing/overlay to the chart you're looking at. |
| "Switch to weekly, log scale, and compare against MSFT and the SP500." | Reconfigures timeframe/scale and adds normalized compare lines. |
| "What do the signals say?" | Reads the live 12-signal technical battery + key levels off the chart. |
The chart isn't limited to price. The 🌐 Macro/Data menu overlays any external time series — economic (FRED), commodity/energy prices, per-company financial-statement line items, or SEC EDGAR XBRL facts — directly on the chart so you can compare and test predictive relationships. Each overlay renders either on its own stacked right-hand axis (so different units line up honestly) or in a separate pane, your choice per series, and can be shifted forward or back in bars to line a leading indicator up against price. Ask the agent to "find the best lead/lag" and it runs a cross-correlation (analyze_lead_lag) to tell you which lag aligns them best and how strongly.
| You say | What it does |
|---|---|
| "Overlay the 10-year Treasury yield and WTI crude on this chart." | Adds each as its own right-hand axis (refs like fred:DGS10, commodity:CLUSD). |
| "Does copper lead this stock? Shift it to the best lag." | Runs the lead/lag cross-correlation and applies the shift that best aligns them. |
| "Plot AAPL quarterly revenue and its EDGAR net income under the price." | Adds fmp:income:AAPL:revenue:quarter and edgar:AAPL:NetIncomeLoss as panes. |
Replay walks a chart forward bar by bar from any start date. The no-lookahead guarantee is structural, not a promise: the chart is windowed to the cursor, so indicators, the 12-signal battery, auto-detections and event markers all recompute from bars at or before the cursor and simply cannot see the future. Fundamentals get the honest treatment most tools skip — analyst targets and DCF lines are as-known-now, so during replay they are suppressed and labelled unless one of your point-in-time snapshots covers the cursor date, in which case the values you actually observed then are drawn and marked as-known-then. Ask the agent to run a name forward and narrate what a disciplined analyst would have concluded at each step.
Rule backtesting takes entry/exit rules in the series DSL (or describe them and the agent writes them) and returns the trade list, equity curve, hit rate, average win/loss, profit factor, exposure, max drawdown and a buy-and-hold comparison, with costs in basis points per side.
| You say | What it does |
|---|---|
| "Replay this from Jan 2024 and tell me what you would have seen." | Starts replay at that date; everything recomputes to the cursor as you step. |
| "Backtest: buy when the 12/26 EMA crosses up, sell on the cross down." | Runs backtest_rule and reports trades, hit rate and drawdown with caveats. |
close > 50) is a state that re-enters after each exit; use crossover/crossunder for edge-triggered entries.Beyond the built-in library you can define your own indicator from a formula and use it exactly like a built-in. Ask for it in words — "define an indicator called vol_ratio that is the 10-day average volume over the 50-day average volume" — and it appears in the chart's indicator library under Custom, with the same add / edit-parameters / hide / remove controls as everything else. Definitions persist, so they are there in your next session.
Formulas are written over the bar fields (open, high, low,
close, volume) with windowed functions — sma, ema,
wma, highest, lowest, stdev, sum,
slope, ref, crossover, crossunder,
barssince — plus any parameters you declare, which then become editable inputs on the
chart. An indicator can plot several series, and a plot marked as a lower pane gets its own lane.
| You say | What it does |
|---|---|
| "Define an indicator: 20-day high minus 20-day low, divided by close." | Creates it and makes it addable (define_indicator). |
| "What custom indicators do I have?" | Lists your definitions (list_custom_indicators). |
| "Put vol_ratio on the chart with n=30." | Adds it with that parameter value. |
| "Delete the vol_ratio indicator." | Removes the definition (delete_custom_indicator). |
eval-ed in your browser, and the chart
sends bars it already holds, so a custom indicator costs no extra API calls. The same expressions
drive rule backtesting, so an idea you can plot is an idea you can test.The 🔎 Detect menu runs pattern recognition locally on the bars already loaded — no extra API calls. Toggle Trendlines (fitted through pivots, scored by touches, recency and violations), S/R zones (volume-weighted pivot clusters), Candlestick patterns (~40 recognizers), and Geometric patterns (double tops/bottoms, head & shoulders, triangles, channels), with a minimum-confidence slider. Detections render as ordinary chart drawings but tagged auto — dashed and tinted by direction — so they never mix with your own drawings and can be cleared separately from them.
Crucially they are structured objects, not pixels: each carries chart coordinates, a confidence score, a direction, a status (forming / confirmed / invalidated) and a plain-language narrative. So the agent can read exactly what you are looking at and act on it — "draw the trendline it found," "is that head & shoulders confirmed yet?" — and anything the agent detects appears in your chart for you to edit or delete.
| You say | What it does |
|---|---|
| "Find the trendlines and support zones on this chart." | Runs those categories and draws them as dashed auto-detections. |
| "What patterns are forming, and how confident?" | Reads back type, confidence, direction and status for each detection. |
| "Clear the detections but keep my drawings." | Removes only the auto-tagged layer. |
The 📅 Events menu now covers every source, not just earnings and dividends: earnings (beat/miss), dividends, splits, insider buys/sells, SEC filings, earnings-call transcripts, institutional 13F ownership flow, analyst rating changes, quarterly financial releases, news, and your own research notes. Each is a separate toggle, and every marker is sentiment-colored — green for positive (insider buy, upgrade, EPS beat, net institutional buying, positive news), red for negative — with busy days collapsed into a single N× cluster so a long range stays readable. Turn on Show events pane for a dedicated lane charting net event sentiment per bar, and the 🔬 Analysis panel now lists recent events with their sentiment plus a weighted composite score.
| You say | What it does |
|---|---|
| "Put insider trades, analyst rating changes and filings on the chart." | Toggles those event sources as sentiment-colored markers. |
| "Show me everything that happened on this name and the net tone." | Returns the unified event stream with a sentiment composite (get_events). |
| "Add the events pane so I can see sentiment over time." | Adds the net-event-sentiment lane under the price chart. |
| "Open the filing behind that marker." | Jumps to the event in its own view (control_chart select_event). |
Hover any marker to see what it is — label, date, detail and sentiment. Where several events land on the same bar the marker collapses to N× and the tooltip lists them. Click it and the terminal switches that security to the view which owns the source — filings to SEC Filings, ratings to Analyst Ratings, insider to Insider Trades, and likewise for transcripts, news, ownership, notes and financial releases — then highlights the dated row. So a spike on the chart takes two seconds to trace back to the document that caused it, rather than a hunt through a list.
If the security has an operating model, every event also carries a
model link: the tooltip tells you which internal driver it bears on, and clicking offers a
jump straight to the Operating Model view. The link is drawn two ways — by event type
(reported results and filed statements reset the growth and margin baseline, guidance moves growth,
street ratings feed the exit multiple and discount rate), and by matching the headline against
the factors your model actually carries. So if your model has a tariff factor wired to gross
margin, a tariff headline links through that edge to gross_margin_pct.
model_link on every event from get_events.The screener does cross-sectional factor ranking (percentile or winsorized z-score, sector-neutral), an expression language for custom filters and derived fields, quality/health scores (Piotroski, Altman), 12-1 momentum, 13F crowding, and point-in-time-honest factor backtests.
| You say | What it does |
|---|---|
| "Screen large-cap tech under 20× earnings, ranked by momentum, sector-neutral." | Builds and runs the screen, returns a ranked table. |
| "Add a filter: free-cash-flow yield > 4% and Piotroski ≥ 7." | Uses the expression DSL to refine the universe. |
| "Save this as 'Quality Compounders' and tell me who entered or left since last run." | Persists the screen and reports membership deltas over time. |
Track what you own and measure it like a professional: time-weighted vs money-weighted returns, Carino-linked Brinson attribution, ex-ante factor risk, a mean-variance optimizer, FIFO tax lots, broker-CSV import, and dividend reconciliation. Positions are derived from a transaction ledger (nothing is an opaque balance).
| You say | What it does |
|---|---|
| "Create a portfolio 'Core' and record: bought 100 AAPL at 180, deposited 50k." | Sets up the ledger and derives positions, cost basis, cash, weights. |
| "Import my broker CSV and reconcile any missing dividends." | Imports transactions and flags/records dividends. |
| "Show performance vs SPY, and attribute my active return by sector." | TWR/MWR, risk stats, and Brinson allocation/selection/interaction. |
| "Propose target weights that cut risk without dropping expected return much, then a rebalance plan." | Runs the optimizer and produces buy/sell deltas (plan only). |
Twenty valuation models behind one interface — every methodology the industry uses, presented in the industry's own terms — plus a Model of Models that reads which valuation frame the market is actually tracking for each name. Two terminal views carry it: 💠 Pricing Models (every model side by side) and 📐 Model of Models (the correlation-weighted blend).
| You say | What it does |
|---|---|
| "Compare every pricing model on AAPL." | Runs the whole basket — intrinsic (DCF, FCFE, EPV, DDM, residual income, EVA), relative multiples at the name's own trailing median, asset models, Monte Carlo, scenarios, SOTP — each with its fair value vs price; models that decline say why. |
| "What frame is the market pricing TSLA on?" | The Model of Models: each model earns a walk-forward correlation weight against the name's own price (strictly as-of, no lookahead). The weights are the reading — and their year-over-year drift shows the rotation. |
| "Chart the DCF and EV/EBITDA lines against price." | Every model has a point-in-time series (filed statements only) — add from the chart picker's Pricing engine section, or by ref: pricing:AAPL:intrinsic.dcf_fcff. |
| "Replot the composite under January's weighting." | Weight vectors are recorded per stock per date; pricing:SYM:composite.momw:2026-01-15 holds that day's recorded vector fixed across the whole series. The plain ref always uses the latest recorded snapshot — the plot is always one consistent weighting, never rolling. |
| "Show the rotation itself." | Per-model weight series — pricing:SYM:weight.relative.pe and friends — chart each model's weight through time in percent; membership is wherever the line is above zero. |
A macro series on the chart is rarely expected to equal the price — the relationship is the object. Every overlay's row in the picker offers three renderings: value (as fetched), Δ$ (price − series), and Δ% ((price − series)/|series|). A model line flipped to Δ$ reads as the premium itself, through time.
Some of what the market prices does not exist in filed statements — pre-revenue ventures like robotaxi fleets, humanoid robots, AI infrastructure. The 🚀 Judgment Models view maintains the inputs that only an analyst can supply:
| Model | You maintain |
|---|---|
| Venture book | Per-venture TAM, achievable share, margin at scale, probability, years, committed capital. Valued as probability-weighted PV net of committed capex — a venture whose spend exceeds its prize shows a negative EV, as information. Ask the agent for a strawman, then edit it in the table. |
| Real options | Opportunity value S, investment cost K, horizon T, volatility σ (defaults to the name's own). |
| Platform economics | Users, ARPU, contribution margin, capitalization multiple. |
| Qualitative scorecard | Four 0–100 analyst scores; the engine computes the weighting and invents no score of its own. |
| SOTP tilts | Per-segment EV/Sales multiples over the disclosed segments. |
Saved inputs persist per symbol with an edit history and activate the model everywhere — the pricing panel, comparisons, the composite. Every stored number is labelled analyst judgment. The pairing that matters: chart the Model of Models composite in Δ$ to measure the premium the market is granting for the unseen businesses — then write your own venture book and compare.
Give any company a driver-based operating model calibrated from its filings and consensus, then turn any event into an instant EPS and fair-value delta. An elasticity table shows exactly which drivers move the stock. The operating model is the machinery beneath the pricing engine's intrinsic models — its drivers feed the DCF, FCFE, EPV and Monte Carlo lines — and in the terminal its former panels are superseded by the Model of Models view; the model itself remains fully operable through the agent.
| You say | What it does |
|---|---|
| "Build an operating model for CAT." | Calibrates revenue → EBIT → EPS → FCF, plus exit-multiple + DCF fair value. |
| "Shock gross margin down 2 points and raise the tax rate to 21%." | Re-runs the model and reports the EPS and fair-value impact. |
| "Which drivers matter most?" | Returns the elasticity table (sensitivity of fair value to each driver). |
A model isn't just its internal drivers. The Operating Model view now carries an influence map: external economic, policy, supply-chain and consumer/customer factors, each linked to the internal drivers it moves by a signed influence edge (with a stated rationale you can audit). It's shown as a left-to-right diagram — factors → drivers → EPS & fair value — with green edges that raise a driver and red that lower it, thickness scaled to sensitivity. Shock a factor (say tariffs +10pp) and Open Trading Surface propagates it through the edges into the drivers and reuses the valuation engine, returning the full factor → driver → outcome trace. Click any factor to isolate its path.
| You say | What it does |
|---|---|
| "Show CAT's influence map." | Opens the factor → driver → value diagram (seeds a sensible default factor set the first time). |
| "Raise tariffs 10 points on CAT — what happens to fair value?" | Propagates the tariff shock into gross margin and re-runs the model, with the trace. |
| "Link consumer confidence to revenue growth for this name and set the sensitivity." | Adds or re-weights a signed influence edge you can then shock. |
| "Calibrate CAT's factors from data." | Pulls each factor's current level from FRED (rates, inflation, confidence…) and, on request, fits sensitivities by regression of the company's historical gross margin and revenue growth on the aligned factor history. |
Any external series can be a model dependency — economic, commodity, index, financial line item, or EDGAR fact — and the model will tell you what actually carries the forecast. Run forecast & attribution projects every series-backed factor forward (trend, CAGR, flat, or a scenario), propagates each through its weighted influence edges, and decomposes the multi-year fair-value / EPS forecast into per-factor contributions with computed weight shares (ranked bars, plus a reconciliation residual for interaction effects). A regression cross-check runs an OLS of each calibratable driver on its linked factors and compares the betas to your structured sensitivities — so you can see where the data agrees with the model and where it doesn't. Each factor carries a tunable weight (1 = as-calibrated) to amplify, damp, or mute a dependency without touching the calibration.
| You say | What it does |
|---|---|
| "Make CAT depend on WTI and the 10-year, then attribute the 5-year forecast." | Attaches the series as factors, projects them, and ranks each one's contribution to fair value. |
| "Halve the weight on oil and re-run." | Sets the tunable weight and recomputes the attribution and shares. |
| "Does the regression back up these sensitivities?" | Returns OLS betas / standardized betas / R² next to the structured edges, with sign agreement. |
Spreadsheet models have done single-company fidelity for forty years; Open Trading Surface now carries that fidelity on top of what spreadsheets never had — graded assumptions, versioned tracks scored against price, and machine legibility. Three capabilities, each opt-in and fully back-compatible:
Segment-level drivers. A consolidated model cannot answer “what if Cloud growth
halves?”. Open Trading Surface assembles each company's disclosed segment revenue history, ties every
period to consolidated revenue (a residual becomes an explicit unallocated segment; an
overshoot is flagged suspect, never scaled away), and detects re-segmentations as structural
breaks. Drivers may then be scoped — revenue_growth_pct@cloud — and
the projection blends growth by the segment mix, with mix shift as an output you can chart
(model:GOOG:mix:cloud). Influence edges can target a scoped driver, so a supply-chain
cause moves Cloud while Search stands untouched, and scoped fits are graded on the segment's own
reported growth.
Quarterly frequency. Annual fits cap near 15 points; quarterly gives ~60, which honestly earns the A evidence grade that annual data structurally cannot. Seasonality is treated as structure, never signal: all quarterly fits use year-over-year same-quarter changes, and sequential Q4-vs-Q3 is never regressed. The model's track record also accrues quarterly: each dated model snapshot becomes a next-quarter EPS checkpoint (the annual conclusion converted through the company's own seasonal EPS mix — a reported fact) scored against the print within weeks, with MAE, bias and a leaning — a scoreboard that fills in four times faster.
Three-statement articulation. Setting any of payout_ratio_pct,
buyback_pct_fcf or target_leverage switches a model into articulated
mode: earnings roll into equity, capex − D&A into fixed assets, FCF less dividends and
buybacks into cash, and interest is recomputed from average net debt — so a leveraged
company's operating deltas compound through the balance sheet. Buybacks retire real dollars
(EPS moves through the share count, not a multiplier) and target leverage works through capital
return, never fictional instant repayment. The tie — assets = liabilities + equity —
is enforced in every projected year: a model that cannot tie refuses to run and names the gap.
| You say | What it does |
|---|---|
| "Pull GOOG's segments and wire them into the model." | Ties disclosed segment history to consolidated revenue, seeds the mix and per-segment growth defaults from reported facts (never overwriting your assumptions). |
| "What if Cloud growth halves?" | Shocks revenue_growth_pct@cloud only; fair value moves by the segment-weighted amount and the mix path updates. |
| "Calibrate quarterly." | Fits factor sensitivities on ~60 YoY same-quarter points under the A ceiling, with quarter-grain break detection. |
| "How has the model scored against the last few prints?" | Returns the quarterly scoreboard: implied vs reported EPS per quarter, MAE and bias. |
| "Model AAPL with a 25% payout and buybacks at 70% of FCF." | Runs the articulated projection: balance sheet rolls forward, interest follows net debt, shares fall by dollars actually spent — and every year ties. |
Open Trading Surface's premise is that a position traces back to a view. That only means something if the chain is recorded rather than reconstructed, so building a model portfolio from a thesis now snapshots the whole lineage: the thesis it came from, the compiled screen exactly as it ran, the run id, and every pick with the rank score that earned it a place and the weight it received.
Open a portfolio and you will see the breadcrumb above it —
Thesis › Screen › Book — with each hop clickable, and the thesis view
links forward to the book it produced. Ask the agent "why do I own these names?" and
get_provenance returns the same chain.
Two details worth knowing. The links are by id, not name: renaming a portfolio or retitling a thesis no longer breaks the chain, and a rename is surfaced rather than hidden. And the screen spec is a snapshot, because a compiled screen is a function of the thesis's current tilts — re-deriving it after you edit the thesis would answer "what would this screen for today", not "why do I own this".
A thesis rests on a reading of the world, so when you create one you cite the worldview domains it stands on — growth, inflation & rates, geopolitics, industrial policy, technology, demographics, energy, credit. Open Trading Surface snapshots what each of those domains said at the time: its trend and summary.
That snapshot is what makes drift visible. If you formed a thesis when inflation was deteriorating and that domain has since turned improving, the breadcrumb flags it — the ground under the thesis moved, which is exactly when a view deserves rereading. Stale domains (not refreshed lately) are flagged separately, because not having looked is different from having seen a change.
Every fitted estimate in Open Trading Surface carries an evidence grade (A–D) computed from real statistics — p-values, confidence intervals, sample size — and capped by method: a regression on a dozen annual points can never grade above B however clean it looks, a sentiment lexicon never above D, chart patterns never above C, while as-filed accounting can reach A. The influence map draws each link with the confidence its evidence earns: solid and weighted for A/B fits, dashed for weak ones, sparse dots for catalog estimates never fitted against data. Confidence degrades with the evidence automatically, rather than depending on anyone remembering a caveat.
Base rates (get_base_rates) judge a forecast against what comparable
companies actually did: the cohort distribution, where your number sits in it, the share that
sustained that level for your horizon, and the empirical fade curve a flat-line
model quietly assumes away. Implied expectations (get_implied_expectations)
run the valuation backwards — what must be true for today's price to be fair — and state
the answer against the cohort: "the price requires 21% growth; 4% of comparable companies
delivered that." That gap is where research time goes.
Every rule backtest now reserves the most recent ~25% of bars as a holdout and scores both windows — the split happens inside the engine, so no one can request the flattering half alone. A holdout return collapsing to a fraction of in-sample is named as the signature of an overfit rule. Every backtest also runs a two-sided t-test of the mean per-trade return against zero, and a search ledger counts every distinct rule you have tried on the symbol and Šidák-deflates that p-value by the size of your search: the best of 20 rules looking good is a property of 20, not of the rule — a nominal p=0.03 after 10 tries deflates to ≈0.26, and the result says so. Fewer than three closed trades means no p at all, with the reason stated — never a fabricated significance.
The re-underwrite queue (get_reunderwrite_queue) scans your holdings and
watchlists and pushes the names that deserve attention: structural breaks, new events bearing on
a driver the position depends on, worldview drift, a model that has run persistently high or low,
or a position never underwritten at all — held on memory alone. An entry is a prompt
to re-underwrite, never a signal to trade. Sizing (propose_sizing) maps the
two things the product measures into a weight: the evidence grade caps size (an edge you
don't understand is one you can't hold through drawdown) and the expectations read sets the
multiplier within the cap. Weights scale down to fit and never up, the do-nothing row is always
present, and the mapping is disclosed in full.
A thesis cannot graduate to active until it carries a recorded challenge
(challenge_thesis) — the strongest opposing case argued from the same data. A token
objection is rejected; forcing past the gate is allowed but permanently logged. The
risk register (get_risk_register) lists active convictions nobody has argued
against. Decision records (record_decision) require an expectation, a horizon
and a falsifier — the observable that would prove the decision wrong — and the
scorecard (get_decision_scorecard) grades decisions rather than returns,
singling out right for the wrong reason as the dangerous column: it pays you to keep a
broken process. Rebalance plans now state their full cost — trading cost, estimated tax
on realized gains — and the hurdle against doing nothing, which is free.
Turn a view into a maintained, probability-weighted thesis with an evidence ledger — and let the system propose its own from macro (FRED) signals. As evidence arrives, the probability moves and the change is logged. As theses resolve, Open Trading Surface scores its own calibration (Brier score, skill vs base rate).
| You say | What it does |
|---|---|
| "Create a thesis: US energy-security capex supercycle; set it high-confidence; sectors Energy and Utilities overweight." | Records the thesis with an initial probability and tilts. |
| "Nat-gas guidance was cut — log that as evidence against, and reassess the probability." | Appends to the evidence ledger and updates the probability with a reason. |
| "Compile this thesis into a screen and build a paper model portfolio." | Turns tilts into a screen spec and a model portfolio. |
| "How well-calibrated have my probabilities been?" | Reports calibration once enough theses have resolved (else says so honestly). |
Keep names under surveillance: watchlists with a live monitor, edge-triggered alert rules (price, % move, RSI, 52-week, earnings-within-N-days) with playbooks, and a catalyst calendar (earnings/dividends/splits/economic) scoped to your names. A "morning brief" pulls it together.
| You say | What it does |
|---|---|
| "Add NVDA, AMD, AVGO to a 'Semis' watchlist and alert me if any breaks its 52-week high." | Creates the watchlist and arms the alert rules. |
| "What's on my calendar this week?" / "Give me a morning brief." | Upcoming catalysts for your names + a consolidated brief. |
Open Trading Surface has a shared memory: research notes tied to symbols, portfolios, or theses that persist between sessions, so you and the agent build on prior work instead of starting over. Ask the agent to "write your take on this name to research notes," or "what did we conclude about MSFT last month?"
Open Trading Surface is being shaped by the people who use it. The easiest way to report a bug, request a feature, or share an idea is to just tell the agent — "report a bug: the rebalance view didn't load," or "I have an idea: add options analytics." It composes a ready-to-post GitHub report prefilled with your details and version for you to submit (it never posts on your behalf). You can also browse and follow every issue on the Support page, join Discussions, and optionally enable a local-only usage journal ("turn on usage reporting") to attach to a report.
check_for_updates; the workspace cockpit also flags new versions automatically.ots.plugin, add it under Customize → Plugins → Personal plugins (it replaces the old version), and restart the session.~/.ots/ directory (this removes your keys, portfolios, theses, notes, and models).Everything lives in ~/.ots/ on your machine: keys, portfolios, watchlists, theses, notes, company models, alerts, an audit journal, and test reports. Nothing is uploaded to any server operated by the publisher. The only outbound calls are read-only requests to your chosen data providers (FMP, FRED, SEC EDGAR) and a version-number check to the update channel.
run_test_suite, and open an issue.