walid@portfolio:~/lab/personal-bloomberg-terminal$
cd../lab
03ideaAug 2026

A Bloomberg terminal without the data feed

Six of the terminal’s seven layers on an agent swarm, with a chat bot as the cockpit

A Bloomberg seat bundles seven functions, and only one of them — the licensed real-time data — is actually protected by contracts. The rest are protected by workflow, which is the kind of moat agents dissolve. The architecture here is sound and the tools are real. The cost claim that headlines it is not: recomputed from its own inputs, the setup runs three to five times the price it advertises.

Kimi K3Grok BotAgent swarmDashboardsMarket datakimi.comgrok.com
The premise

The interface moat, not the data moat

The useful idea is a decomposition. A terminal is not a stock chart — it is seven functions running side by side, and they are not defended equally. Real-time exchange feeds are contractually locked and always will be. The other six are defended by workflow and integration, which is exactly the kind of moat that a competent agent stack erodes.

So the honest framing is not “replace Bloomberg”. It is: rebuild the six layers that were never really protected, and accept that the seventh is gone. Everything below follows from taking that split seriously.

Why not before

The three walls this used to hit

Worth stating, because they are the reason a year of attempts at this went nowhere — and the reason it is worth re-testing now rather than assuming the old answer still holds.

01·coverage

Monitoring broke first

Watching hundreds of sources at once was the wall everything hit. No consumer model could run enough agents in parallel to actually cover the news universe, so coverage was always a sample rather than a sweep.

02·interface

Dashboards needed a frontend engineer

Every route to a live visual layer meant hiring someone or spending months on React before rendering a single chart. The workstation feel was gated behind a skillset unrelated to trading.

03·memory

A trading day would not fit

Holding a full session of signals in one context was impossible. Everything chunked, and chunking is precisely where the cross-references between a wire story, a filing and a price move get lost.

The thing itself

What is actually being decomposed

Worth looking at before reading the table, because the density is the point. Almost nothing on these screens is the price of a stock — it is breadth, positioning, order books, world clocks, correlation, dealer quotes. The seat is not sold on data alone; it is sold on having all of it arranged at once.

Seven functional layers running side by side. Six of them are workflow, not data.
The decomposition

Seven layers, one of them locked

The whole argument in one row: only the first box is defended by contracts.
LayerWhat it coversReplaceable
DataReal-time and historical prices across every exchange, fundamentals, economic indicators, fixed-income yields, FX crosses, commodity spot and futures.No — the feeds are contractually locked, and no consumer setup changes that.
AnalystSell-side reports, ratings changes, target price revisions, consensus estimates — where street conviction diverges from price.Yes
NewsWires plus third-party financial media, with alerts the moment something hits.Yes
ReasoningChat with your desk and with sell-side analysts; screen sharing.Partly — the institutional message network is walled, but public commentary from the same people is not.
ReportMorning macro notes, earnings previews, sector overviews, company deep dives, position summaries.Yes
AlertPrice, news, fundamental and position alerts on arbitrary combinations of conditions.Yes
DashboardCharts, heatmaps, position blotters, P&L, cross-asset correlation matrices.Yes
The stack

The complete architecture

Four layers, and nothing between them but a synced folder.
The stack

An engine, a cockpit, and your existing broker

PieceRole
Kimi K3 Swarm MaxThe engine. Runs the monitoring swarm, holds the day in context, and writes the dashboard code. Never talked to directly during the trading day.
Grok BotThe cockpit. Six named bots — analyst, news, reports, alerts, position, macro — each with its own role and memory, all sharing one persistent cloud machine. This is the part you actually converse with.
Your brokerUnchanged. IBKR, Alpaca or a prediction market, reading from the same shared workspace. Execution stays a human decision.
Why the engine can do this now

The four capabilities the design leans on

CapabilityWhat it actually buys you
Writes the codeProduction React, Python and TypeScript on demand. The claim is that a Bloomberg-style dashboard costing a frontend engineer three days is written in about fifteen minutes, and you never open a component file yourself. Treat the timings as the author’s, but the capability is real.
1M tokens per agentThe coordinator holds every alert, news story, position change and macro release from a full session and reasons across all of it at once. This is the wall that mattered most — chunking is where the link between a wire story, a filing and a price move disappears.
Native videoVideo goes in directly, not as a transcript. CNBC running in the background, Fed press conferences live, every earnings call as it happens — with tone and pace surviving, which is exactly what a transcript throws away.
300 parallel agentsEach sub-agent owns one source; the coordinator sees them all simultaneously. The comparison drawn is Bloomberg’s own newsdesk, put at roughly a hundred people working in parallel — one bot processing sequentially cannot cover that ground, and three hundred parallel ones can.
i
These four are real — I checked

Kimi K3 shipped in July 2026: 2.8T parameters, natively multimodal across text, images and video, a one-million-token context window, and two variants — K3 Max for single-agent work and K3 Swarm Max for parallel. Agent Swarm coordinates up to 300 sub-agents, and the coordinator is trained to decide when to parallelise rather than following a template. Grok Bot is included with SuperGrok Heavy or Cursor Ultra rather than sold separately. The architecture below is not hypothetical.

Sanity check

Where the engine actually ranks

Agentic benchmarks, all models at maximum thinking effort. Worth a look because the whole design rests on the engine being genuinely frontier-class rather than merely cheap — it leads three of these eight and sits second on four more.

BenchmarkKimi K3RankLeader
BrowseComp91.21st— (GPT-5.6 Sol 90.4)
Automation Bench30.81st— (GPT-5.6 Sol 29.7)
SpreadsheetBench 234.81st— (Fable 5 34.7)
AA-Briefcase Elo15482ndFable 5 — 1583
JobBench52.92ndFable 5 — 57.4
CharXiv (RQ, w/ tool)91.32ndFable 5 — 93.5
Zerobench (w/ tool, pass@5)41.02ndFable 5 — 46.0
GDPval-AA v2 Elo16683rdFable 5 — 1760
The cockpit

Six named teammates, one interface

The cockpit

Why a chat bot is the right front end

The engine is not something you talk to during the day. You do not want to write a query every time you check Fed positioning, which is the whole reason a terminal has a chat function in the first place. So the interface is a set of named bots you message like colleagues — analyst, news, reports, alerts, position, macro — each with its own role, memory and workflow.

The part that makes them more than six chat windows is that every bot on the account shares one persistent cloud computer: browser, filesystem and terminal, living on a cloud VM rather than your laptop. A bot picks up a task, uses that machine to do it, and reports back. That shared machine is also what lets all six read and write the same workspace without any of them knowing about the others.

The cockpit

Plugins, installed once and available to every bot

PluginHandles
AlpacaRouting trades.
ComposioConnections out to third-party SaaS.
WhopSubscription management, if you are running a signal service on the side.
i
The one place this beats the terminal rather than approximating it

Bloomberg’s chat function is the layer nobody outside institutional access can touch. The substitute here is arguably better: native access to what every CEO, hedge fund manager, central bank governor and macro commentator posts publicly, in real time. When a well-known manager announces a position publicly, the analyst bot catches it as it lands. A Bloomberg seat does not do that. Every other layer in this build is an approximation of something the terminal already does — this is the one that is genuinely additive.

The build

Eight steps, start to finish

The whole build in one view before the detail. Steps 1 and 2 are the only ones that touch an installer; everything after is configuration and prose.

Step 1

Install both halves and bridge them

The bridge is the part worth reading twice. The two tools do not integrate — they are joined by pointing them at the same synced folder, which is both why the setup is simple and where it will break.

1

Set up the cockpit

Sign up for SuperGrok Heavy at grok.com and install the desktop app. Then create the workspace folder structure below — do this before anything else, since every later step assumes those paths exist.

2

Install the engine

Download Kimi Work from kimi.com — Apple silicon Mac and Windows — sign in with a Moonshot account, and enable K3 Swarm Max in Settings. Swarm Max is not the default, and without it the 300-agent monitoring layer simply will not spawn.

3

Point them at the same folder

Configure the engine to sync its workspace with the cockpit’s workspace through Dropbox, iCloud Drive or a shared cloud bucket. There is no API between the two products — this shared folder is the entire integration, which means sync latency is now part of your alerting path.

Step 2

One shared workspace

Everything hangs off this. The swarm, the dashboard, the bots and the broker all coordinate through files rather than through each other — which is why the pieces can be swapped without rewiring the rest.

workspace.txt12 lines
/workspace/positions/
/workspace/alerts/
/workspace/reports/
/workspace/news/
/workspace/dashboard/
/workspace/signals/
/workspace/watchlist.csv

# every part of the stack reads and writes here.
# /workspace/signals/live-alerts.json is the one file
# that matters — the monitoring swarm writes it, and
# both the dashboard ticker and the alerts bot read it.
Step 3

How the 300 agents get split

Set up as a routine named terminal-monitor: continuous through market hours, 9:30 to 4 ET, dropping to 30-second intervals off-hours. Each sub-agent owns one source category; when anything clears the conviction threshold the coordinator appends it to live-alerts.json.

AgentsWatching
80Wires — Bloomberg, Reuters, Dow Jones, AP, FT, WSJ
60Earnings — every major company reporting in the current season
60Insiders — SEC EDGAR feeds for watchlist tickers
40Video — CNBC, Bloomberg TV, Fox Business, financial YouTube
40Social — CEOs, hedge fund managers, macro commentators
20Macro — central banks, Fed, ECB, BOJ, macro data releases
Step 4

The dashboard, described rather than built

This is the single most reusable artifact in the whole setup — the terminal layout as a paragraph. Adjusting the workstation later means editing this text and regenerating, not opening a component file. It generates a full project: package.json, components, styling, API integration. npm install && npm run dev, and it serves on localhost:3000.

dashboard-prompt.txt24 lines
Build me a Bloomberg-style terminal dashboard as a local
React application. Include:

- Top strip showing SPY, QQQ, IWM, VIX, DXY, TNX, GLD, OIL
  current prices from the Alpaca API. Green when above open,
  red when below. Update every 5 seconds.
- Left panel: 4x4 grid of my top 16 watchlist tickers. Each
  cell shows ticker, price, day change %, and a mini intraday
  chart using Recharts.
- Center panel top row: 11 GICS sector heatmap boxes coloured
  by performance (deep green to deep red).
- Center panel bottom row: market breadth indicator with
  advance/decline ratio, new highs vs lows, sector momentum.
- Right sidebar: live news ticker pulling from
  /workspace/signals/live-alerts.json. Colour-coded by
  conviction level. Auto-scroll.
- Bottom strip: current positions with live P&L, cost basis,
  risk flags. Positions above 2% NAV or with drawdown above
  5% flash yellow.
- Dark theme with orange accent.
- Serve on localhost:3000.

Save the complete project to /workspace/dashboard/ and give
me the run instructions.
Step 4

What that description produces

Worth reading as a spec rather than a screenshot, since it is the actual argument for what a trading workstation should show at a glance.

PanelShows
Top stripSPY, QQQ, IWM, VIX, DXY, TNX, GLD and OIL, refreshed every five seconds — green above the open, red below.
Left panelSixteen watchlist tickers in a 4×4 grid. Each cell carries the symbol, price, day change percentage and a mini intraday chart.
Centre, topEleven GICS sector heatmap boxes, coloured deep green through deep red by performance.
Centre, bottomMarket breadth: advance/decline ratio, new highs against new lows, and sector momentum divergence.
Right sidebarLive news ticker reading live-alerts.json, colour-coded by conviction, with alerts landing within thirty seconds of the source event.
Bottom stripOpen positions with live P&L, cost basis and risk flags. Anything breaching a 2% NAV limit or 5% drawdown flashes yellow.
Step 5

One bot per function

Six bots, created one at a time and each given a role description like this one. Note the last line — the design deliberately stops at surfacing signals and leaves the trade to a person.

alerts-bot.txt15 lines
You are Alerts Bot for a personal terminal setup.

Every 30 seconds you check /workspace/signals/live-alerts.json
for new signals from the monitoring layer.

For any new signal above HIGH CONVICTION threshold, ping the
operator immediately in chat with:
- ticker
- signal type
- confidence score
- source that fired the signal
- suggested action window

Do not execute trades. Only surface high-priority signals to
the operator for decision.
Step 5

The one bot that runs on a schedule

The others are reactive — you ask, they answer. The reports bot is the exception, and it is the piece that most resembles the thing people actually miss from a terminal: the morning note waiting for you.

reports-routine.txt5 lines
Every trading day at 6 AM ET, generate a morning macro
brief using signals from the last 24 hours.

Deliver it to my chat and save it to
/workspace/reports/macro-YYYYMMDD.md
Step 6

Wiring it together — who touches which file

There is no message bus here. Every connection in the system is a file that one thing writes and another reads, which is worth mapping before you trust any of it.

PieceIts wiring
Monitoring swarmThe only writer of /workspace/signals/live-alerts.json.
Dashboard tickerReads live-alerts.json for the news sidebar.
Alerts BotReads the same file every thirty seconds, and pings you off it.
Position BotReads /workspace/positions/live.json, populated by your broker API.
Reports BotWrites /workspace/reports/macro-YYYYMMDD.md every morning.
Step 7

A day at the desk

The test of whether any of this works is not whether it installs. It is whether an hour with it feels like a workstation, so the piece walks through one: cockpit open on the laptop, dashboard in a browser tab beside it.

You ask the analyst bot where sell-side conviction sits on NVDA this week, and get a synthesised street summary back inside a minute. Prices tick every five seconds. The sector heatmap shifts. The news ticker scrolls whatever the swarm is turning up. Then the alerts bot pings: a major chipmaker has filed an 8-K about capacity expansion, multiple wires confirming, high conviction on semis. You click through to the source in the dashboard news panel, ask the position bot what your current semis exposure is, and decide the trade yourself.

That last clause is the whole design. Every layer here ends at a briefed human, not an order.

Step 8

Changing it later

Once it is live the dashboard stops being code you maintain and becomes a description you edit.

iterate.txt11 lines
Add a sector heatmap to the top left showing performance
of the 11 GICS sectors over the last hour.

Add a Fed speaker calendar to the right sidebar showing the
next 5 Fed events with countdown timers.

# the dashboard is regenerated from the description, so a new
# view is a sentence rather than a component. This is the part
# that decides whether the thing survives contact with a real
# desk — a workstation you cannot reshape mid-week gets
# abandoned by Thursday.
Honest scope

What you do get

the analyst chat functionthe morning macro briefthe news synthesis workflowreport generationthe alert engineposition monitoringlive charts and heatmapscustom views without writing code
!
The cost claim does not survive its own arithmetic

Two figures are simply wrong: SuperGrok Heavy is $300 a month, not $200, and a single Bloomberg seat is $31,980 a year, not $27,660. The bigger problem is that the advertised total does not follow from the inputs given alongside it — $300 a month plus the $500 to $1,000 a month it budgets for API usage is $9,600 to $15,600 a year, not the $3,000 claimed. That makes this roughly two to three times cheaper than a seat, not nine. And the summary’s “less than one percent of the cost” contradicts the “nine times cheaper” a few lines above it; neither figure holds.

What is left after the correction

Still worth building, for a different reason

Two to three times cheaper than a Bloomberg seat is a much less exciting headline, and it is also not the actual argument. Nobody weighing this was going to buy a seat. The comparison that matters is against having none of it — no monitoring layer, no morning brief, no alert engine, no dashboard.

The other thing the corrected number changes is who this is for. At ten to fifteen thousand a year it is not a hobby setup. It is a real line item, and it should be justified the way any other tooling spend is: against what it replaces in hours, not against a terminal you were never going to lease.

Honest scope

What this does not get you

real-time regulated exchange feedsthe institutional messaging networkdirect regulatory filing feedsfixed-income liquidity discoveryFX prime brokerage integrationa compliance-grade execution audit trail
!
Two things to weigh before building it

A monitoring layer that fires HIGH CONVICTION alerts at you all day is a machine for manufacturing urgency, and urgency is not edge — the design keeps execution human for exactly that reason, so do not quietly automate that step later. And the whole thing rests on one JSON file: if the swarm stalls, live-alerts.json simply stops updating, and a dashboard showing stale signals looks identical to one showing a quiet market. Put a heartbeat on it before you trust it.

← previous
A shorts studio that runs in the terminal
next →
Ten repos to check before you pay for a tool
← all experiments