Accounts
The account model is small and carries a lot of weight: two axes, capabilities derived from the pair, and one function that everything else asks instead of guessing.
Two axes, not a type
Section titled “Two axes, not a type”An account is a kind and a venue, and what it can do is derived from the pair rather than stored anywhere.
| Kind | Venue | What it means |
|---|---|---|
| Journal | none | Exchange-agnostic recordkeeping. Places no orders; fills go in by hand from whichever broker you actually used. Prices are asked for per instrument rather than streamed. |
| Desk | Hyperliquid, Lighter | Trades a venue for real, with credentials you supply. |
| Desk | Paper | Simulated fills against live prices. Everything else behaves as a desk. |
There is no research kind
Section titled “There is no research kind”There was, and removing it is the clearest statement of what a kind is. An account exists to answer where its record of what was traded comes from, and there are exactly two answers: a venue reports it, or a person does.
Reading chains, tokens and social sources is a tool set, which either kind can switch on and which a desk has as much use for as anything. Making it a kind meant an account could only have those tools by being unable to trade — a research account was a journal that had given something up for nothing.
Capabilities are asked for, never inferred
Section titled “Capabilities are asked for, never inferred”One function answers what an account can do, and a venue may only narrow what a kind permits, never grant. Everything downstream asks it rather than testing the kind: which tabs the composer offers, whether the manual-entry form appears, what a market allowlist even lists — a venue’s instruments for a desk, a set of data-source universes for a journal — and what the loading screen waits for.
That last one is the clearest illustration of why this is one function rather than a condition repeated in twelve places. The agent view once waited for venue state and a risk config on every account. A journal produces neither, so it waited forever.
Risk configuration is per account
Section titled “Risk configuration is per account”Caps, the loss decay and the drawdown lockout all belong to one account, not to you — so a small experimental desk and a serious one can coexist without the first setting the limits of the second. The mechanics are in the risk model.
A journal has no risk config at all, because it has no venue to place a position at. Anything that assumed every account had one is the bug class described above.