Tokenized T-bills · Private credit · Property · Commodities · Collateral · and the rest of the book
Your AI agent's quant desk for tokenized assets.
A skill to wire into your IDE, repo or agent stack, plus 24 asset models that run as templates.
Not a fund, an offer or anyone's adviser. No people at a desk: software that does arithmetic on your numbers. Results are hypothetical.
Measure a token against what's under it: NAV, redemption queues, gates and the weekend gap
Run each model as a template, or paste it into any agent as a prompt
Write your limits in HEDGEFUND.md; the skill tells your agent to stop at anything over them
Not here: anything past these models. There is no market data or prices, no picks or signals of our own, no trading or custody, no fund or token offering and no investment advice, and none of those is planned. What should it do next? Tell us.
Computed from the templates' made-up numbers by this site's own models. The picture is an illustration.
v1.0 · updated Nov 2, 2026New: Built around tokenized assets, with prompts a stack can pinWhat’s new and what’s next
Tokenized assets
A token can trade all weekend. What's under it often can't.
A 24/7 price isn't 24/7 liquidity. These models measure the gap: NAV gone stale between strikes, forced sales behind a next-day redemption, a gate that shrinks with the tokens left, a pool too thin for the position, and a loan that looks far from its line on the oracle's clock and close on the redemption clock.
4 of 60 days. With one stdev of NAV drift allowed, 0 days.
Half-life of the gap
3.295 days
AR(1) slope 0.8103. One day per observation.
NAV drift between strikes, one stdev
1.3848%
Vol 10% over 7 days. The fee band runs -1.137% to +0.637%.
Hypothetical, computed from the numbers sent and any stated default, with hindsight. Nobody traded it, and costs and liquidity are only as assumed. Not a forecast, a recommendation, an offer, or a record of real trading. Don't use it to market an investment. Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.
The same token on three clocks
From the same template. The days are its made-up terms, not anyone's.
Token price every day
NAV strike every 7 days
A redemption asked on day 1, cash on day 11
day 1day 21
position_tokens 740.93 On these numbers, below this size the pool pays more per token. Above it redemption does, with its fee and settlement carry counted. Neither route is checked as open to this holder.
24 models in seven groups. Each one runs on made-up numbers as it stands, then on yours.
No connection needed: every model is also a prompt to paste into your agent, with its method and the numbers to check it against. /prompts.json
Every model gives the same result: a summary, readings, flips, flags, assumptions and a not_modeled list. A flip is the input value where the outcome changes, and it's usually the number worth going to measure. Nothing here fetches a price.
Tokenized assets / tokenized_bills
T-bill token
When redemptions outrun a T-bill ladder, when do forced sales start, and what do the holders who stay lose?
On these numbers, NAV is 0.999432 per token, and at 3% a day forced sales start on day 2, cost holders who stay 19.3 bps of NAV per token, and forced sales begin at 0.0755% a day.
Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.
Readings
The numbers, with their units.
NAV per token
0.999432
NAV 99,943,241: bills 98,443,241, cash 1,500,000.
Hypothetical net yield on NAV
4.5709%
Gross on NAV 4.871% with cash at zero. The ladder alone is 4.945%. Fees 0.3%.
Weighted days to maturity
watch
108.78days
With cash at zero days. The ladder alone is 110.44 days. After the walk it is 133.62 days, longer because the nearest rungs went first.
First forced sale
breach
2
Requests stop on day 20. The walk runs to day 21 to pay them.
Face sold in forced sales
watch
44,512,387
Proceeds 44,129,062, carrying value 44,260,350. 54.38% of tokens are left.
Loss per remaining token
breach
0.00193181
19.33 bps of starting NAV. Total loss 131,288. A further 0.007113 per token sits unrealized in what is left, at the shocked yields.
No-profit band around NAV
6.2523bps
Fee 5 bps plus carry 1.25 bps. From 0.998808 to 1.000057 per token.
NAV per token at the shocked yields
watch
0.993641
57.95 bps under carrying NAV, before spread.
What flips it
The value of one input where the outcome changes, with the others held.
daily_redemption_pct
0.0755%now 3
Forced sales begin above this daily redemption rate. Below it, cash and maturities pay every request.
cash
82,713,909now 1,500,000
With this much starting cash, rungs and tokens as sent, no forced sale happens at the sent redemption rate. Cash is then 45.7% of the pool, and more cash lifts NAV and so the redemptions too.
Flags
What went past a line, and what to read before you trust the rest.
breach
Forced sales start on day 2. They raise 44,129,062 from 44,512,387 of face and realize a loss of 131,288. forced_sales
watch
The token pays out in 1 day. The assets have a weighted maturity of 108.8 days, and cash plus rungs maturing inside settlement are 1.5% of NAV. maturity_mismatch
watch
At the shocked yields the assets are worth 57.9 bps under carrying NAV, more than the 5 bps fee. A redemption at carrying NAV moves that gap from holders who stay to holders who leave. stale_nav_transfer
What this leaves out
What the formula leaves out, by name.
New mints during the run, and any gate, pause or credit line the issuer could use.
Depth: the spread stays the same however much is sold, and one parallel shock hits every rung.
Reinvestment: cash from a maturity sits until it's paid out.
A pool that strikes NAV at market yields, where leavers would share the shock and the transfer to them shrinks.
Where the token itself trades on the secondary market during the run.
Taxes on the bills or the token.
Failure of the issuer, the custodian or the system recording the token.
Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.
What it took as given (11)
What it took as given to get here.
Each rung is valued at face / (1 + y * d / 365): simple interest, actual/365. yield_pct is a money-market yield, so convert a bank discount quote first.
Cash earns nothing. Gross yield on NAV counts it at zero, and the ladder's own yield is shown beside it.
Fees are a share of NAV a year. They come out of the yield and aren't taken during the walk, so the walk shows the forced sale loss alone.
Each day runs in this order: rungs maturing that day pay face, the day's request is struck at that day's NAV per token, then payments due that day go out, with forced sales if cash falls short.
A request is daily_redemption_pct of the tokens left that day, so tokens fall geometrically. Requests stop after stress_days. The walk runs settle_days longer so every request is paid.
NAV is carried at the original yields the whole way. The shock and the spread reach NAV only when a sale realizes them, so a token leaving at carrying NAV takes no part of a loss not yet realized.
A forced sale takes the nearest maturity first, in part if needed, at the shocked yield less half of bid_ask_bps, because a sale crosses from mid to bid. Face sold is grossed up so the proceeds meet the need.
A loss falls on tokens still outstanding after that day's request. Loss per remaining token adds each day's loss per token then outstanding, not the total over the tokens left at the end, because tokens that leave later already shared part of it. A token can't lose more than its NAV.
The redemption fee goes to the issuer, not the pool, so the pool pays out full NAV per token.
Band half-width = mint_redeem_fee + net yield * settle_days / 365, to first order. Neither a minter's cash nor a redeemer's claim earns during settlement. Net yield stands in for the cash rate, floored at zero.
The shadow NAV reprices the whole ladder at the shock on day 0, before spread.
Cumulative cash against cumulative redemptionsCumulative money
Start cash plus maturities
Redemptions due
Forced sale proceeds
The data
The ladder
Rung
Days
Face
Yield %
Value
Share of NAV %
Bill 30d
30
15,000,000
4
14,950,847
14.96
Bill 60d
60
20,000,000
4.5
19,853,141
19.86
Bill 90d
90
25,000,000
5
24,695,535
24.71
Bill 180d
180
40,000,000
5.5
38,943,718
38.97
Cash
0
1,500,000
0
1,500,000
1.5
Forced sales
Day
Rung
Days left
Face sold
Proceeds
Carrying value
Loss
2
Bill 30d
28
1,506,342
1,498,691
1,501,734
3,043.19
3
Bill 30d
27
2,923,497
2,909,124
2,914,872
5,748.65
4
Bill 30d
26
2,835,627
2,822,148
2,827,571
5,422.96
5
Bill 30d
25
2,750,316
2,737,690
2,742,802
5,111.41
6
Bill 30d
24
2,667,578
2,655,767
2,660,581
4,813.64
7
Bill 30d
23
2,316,639
2,306,759
2,310,814
4,055.25
7
Bill 60d
53
272,223
269,543
270,456
912.93
8
Bill 60d
52
2,523,627
2,499,221
2,507,551
8,329.48
9
Bill 60d
51
2,447,683
2,424,440
2,432,389
7,949.01
10
Bill 60d
50
2,373,920
2,351,792
2,359,375
7,583.48
11
Bill 60d
49
2,302,384
2,281,326
2,288,559
7,232.7
12
Bill 60d
48
2,233,009
2,212,976
2,219,873
6,896.13
13
Bill 60d
47
2,165,730
2,146,680
2,153,253
6,573.21
14
Bill 60d
46
2,100,482
2,082,374
2,088,637
6,263.44
15
Bill 60d
45
2,037,205
2,019,999
2,025,965
5,966.32
16
Bill 60d
44
1,543,738
1,530,970
1,535,408
4,438.89
16
Bill 90d
74
434,826
428,527
430,462
1,935.38
17
Bill 90d
73
1,928,387
1,900,811
1,909,294
8,482.61
18
Bill 90d
72
1,870,263
1,843,867
1,851,996
8,129.38
19
Bill 90d
71
1,813,821
1,788,560
1,796,349
7,789.38
20
Bill 90d
70
1,759,085
1,734,915
1,742,378
7,462.45
21
Bill 90d
69
1,706,005
1,682,883
1,690,031
7,148.12
The hypothetical walk
Day
Tokens left %
Requested
Paid out
Forced proceeds
Loss
Cash at day end
NAV per token
0
100
0
0
0
0
1,500,000
0.999432
1
97
2,998,691
0
0
0
1,500,000
0.999564
2
94.09
2,909,124
2,998,691
1,498,691
3,043.19
0
0.999667
3
91.27
2,822,148
2,909,124
2,909,124
5,748.65
0
0.999741
4
88.53
2,737,690
2,822,148
2,822,148
5,422.96
0
0.999819
5
85.87
2,655,767
2,737,690
2,737,690
5,111.41
0
0.999899
6
83.3
2,576,302
2,655,767
2,655,767
4,813.64
0
0.999981
7
80.8
2,499,221
2,576,302
2,576,302
4,968.17
0
1.0001
8
78.37
2,424,440
2,499,221
2,499,221
8,329.48
0
1.0001
9
76.02
2,351,792
2,424,440
2,424,440
7,949.01
0
1.0001
10
73.74
2,281,326
2,351,792
2,351,792
7,583.48
0
1.0002
11
71.53
2,212,976
2,281,326
2,281,326
7,232.7
0
1.0002
12
69.38
2,146,680
2,212,976
2,212,976
6,896.13
0
1.0003
13
67.3
2,082,374
2,146,680
2,146,680
6,573.21
0
1.0003
14
65.28
2,019,999
2,082,374
2,082,374
6,263.44
0
1.0004
15
63.33
1,959,497
2,019,999
2,019,999
5,966.32
0
1.0004
16
61.43
1,900,811
1,959,497
1,959,497
6,374.28
0
1.0005
17
59.58
1,843,867
1,900,811
1,900,811
8,482.61
0
1.0005
18
57.8
1,788,560
1,843,867
1,843,867
8,129.38
0
1.0005
19
56.06
1,734,915
1,788,560
1,788,560
7,789.38
0
1.0005
20
54.38
1,682,883
1,734,915
1,734,915
7,462.45
0
1.0005
21
54.38
0
1,682,883
1,682,883
7,148.12
0
1.0005
Start from a book
Pick a starter, replace every made-up number, and run the whole book against your limits.
A starter is a shape to fill, not a model portfolio. run_book runs each sleeve on its own numbers, then adds them up at a correlation you state. It shows the one-day 99% tail beside the sleeve tails added up with no offsets. A missing figure isn't counted as zero, and a limit it touches isn't read as met.
Made-up numbers
Example multi-desk book
A made-up book of five sleeves: an equity long-short sleeve, a pair, a deal spread, a bond ladder and a small options overlay. The long-short sleeve takes under a third of the capital and most of the variance, which is the thing to look at here. Every number is made up.
Gross
150.32%
Net
45.18%
Volatility
9.25%
99% tail, a day
1.36%
In 7 days
85%
Limits broken
2
Share of NAV reachable within
1d40%
7d85%
30d100%
90d100%
365d100%
max_gross_pct150.32 over 150
max_risk_share_pct73.36 over 60
Biggest source of risk: equity_long_short, 73.36% of variance on 30% of NAV.
A made-up book of tokens: bill tokens, a private credit tape, property, a commodity token and a position borrowed against as collateral. On a screen these can all look calm and liquid. The ladder shows how differently they get back to cash on these numbers, not whether a holder may use any of those routes. Every number is made up.
Gross
137.62%
Net
137.62%
Volatility
6.89%
99% tail, a day
1.01%
In 7 days
55%
Limits broken
1
Share of NAV reachable within
1d45%
7d55%
30d55%
90d65%
365d85%
min_liquid_30d_pct55 under 60
Biggest source of risk: collateral_loop, 65% of variance on 10% of NAV.
A made-up book of three sleeves: a hypothetical trend walk with a vol target, risk parity and a bond ladder. All three are net long here, so the correlation between them does most of the work. A run shows the correlation at which the volatility limit changes sides. It isn't a system to follow. Every number is made up.
Gross
160.96%
Net
119.61%
Volatility
8.29%
99% tail, a day
1.22%
In 7 days
100%
Limits broken
2
Share of NAV reachable within
1d15%
7d100%
30d100%
90d100%
365d100%
max_net_pct119.61 over 110
max_vol_pct8.29 over 8
Biggest source of risk: trend, 67.56% of variance on 50% of NAV.
A made-up credit book: a list of credits and their spreads, a private loan tape and a sleeve behind a redemption gate. Hypothetical carry is the easy number to read. The tails and the ladder show what it leaves out. Every number is made up.
Gross
95%
Net
95%
Volatility
6.04%
99% tail, a day
0.88%
In 7 days
5%
Limits broken
2
Share of NAV reachable within
1d5%
7d5%
30d50%
90d50%
365d65%
max_tail_sum_pct21.95 over 20
min_liquid_90d_pct50 under 60
Biggest source of risk: credit_carry, 45.17% of variance on 45% of NAV.
A made-up digital asset book: cash-and-carry basis, a token's reserves and a token trading away from its NAV. The basis sleeve looks flat on net and large on gross, and its margin leaves the least room when moves are largest. Every number is made up.
Gross
179.63%
Net
45%
Volatility
3.95%
99% tail, a day
0.58%
In 7 days
55%
Limits broken
1
Share of NAV reachable within
1d5%
7d55%
30d75%
90d75%
365d100%
max_gross_pct179.63 over 175
Biggest source of risk: basis, 54.17% of variance on 50% of NAV.
Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.
The gate
Your limits, compared with an order before it goes anywhere.
check_order compares an order you send with the limits you set, and gives one of four outcomes. None of them gives permission. It compares numbers, and it sits in front of nothing. The skill tells your agent what each outcome means, and that silence is never a yes.
within_limits
order
add 2% of NAV
gross 150 to 152limit 200
Gross would go from 150 to 152, against 200.
Limit named: max_gross_pct
limits.max_gross_pct200
book.gross_pct150
order.notional_pct_nav2
order.sideadd
Every limit sent was checked, and none would break. That's a comparison, not a yes.
needs_a_yes
order
add 2% of NAV
gross 182 to 184limit 200
The order is 2% of NAV, over the approval size of 1.
Limit named: needs_yes_over_pct_nav
limits.needs_yes_over_pct_nav1
order.notional_pct_nav2
It's over the size you set for asking, or a limit couldn't be checked for want of a number. The skill tells your agent to wait for you.
over_limit
order
add 2% of NAV
gross 199 to 201limit 200
Gross would go from 199 to 201, over 200.
Limit named: max_gross_pct
limits.max_gross_pct200
book.gross_pct199
order.notional_pct_nav2
order.sideadd
A named limit would break. The skill tells your agent not to send it, and to tell you which one and by how much.
no_limits_checked
order
add 2% of NAV
no limit sent
No limit that applies to an order was sent, so nothing was checked.
Limit named: none
Nothing to cite: nothing was compared.
Nothing was compared, so it says nothing about the order. It isn't a pass, and it needs a yes too.
The skill tells your agent that anything outside your limits waits for a person, and that nothing to check against never reads as a pass. Four real runs of check_order on made-up books.
The format
HEDGEFUND.md holds a book: your limits and your sleeves.
It's a plain file in your repo that a person can read and an agent can check. book_starter gives you one to fill, check_hedgefund_md checks it after every change, and run_book runs it. The limit names are the same in the file and in check_order, a misspelled limit is refused instead of reading as no limit, and a clean check says only that the file can run.
HEDGEFUND.md
---hedgefund:1name: Example bookcurrency: USDnav:1000000updated:2026-11-01---# Example bookThe numbers in this file are the author's own. A run describes only these numbers. It is not a forecast, an offer, a record of real trading or advice. It isn't a fund document, and it isn't for investors or clients. Format: https://hedgefund.md/spec.md Terms: https://hedgefund.md/terms## Limits```json{ "max_gross_pct": 150, "max_vol_pct": 12, "min_liquid_30d_pct": 50 }```## Correlation```json0.3```## Sleeves### sleeve_a```json{ "model": "merger_spread", "capital_pct": 40, "assumed": { "vol_pct": 8, "liquidity_days": 10 }, "inputs": { "deal_cash": 50, "target_price": 47, "break_price": 35, "days_to_close": 120, "financing_rate_pct": 5 }}```### sleeve_b```json{ "model": "size_position", "capital_pct": 30, "assumed": { "tail_loss_pct": 5, "carry_pct": 2 }, "inputs": { "nav": 1000000, "vol_pct": 25, "expected_return_pct": 8, "risk_budget_pct_nav": 1, "adv_value": 500000, "max_participation_pct": 10, "days_to_build": 5 }}```
check_hedgefund_md: ok true, 0 warnings, book_id hf1_a8d03c7f15e6ed48f60b98ee
What check_hedgefund_md catches
Its real answers on broken copies of that file and on a starter. It has 38 stable codes.
A misspelled limitE_UNKNOWN_LIMIT
There is no limit named "max_gros_pct".
A key written twiceE_BAD_JSON
## Limits: the key "max_gross_pct" appears twice. Keep one.
A block hidden in a commentE_HIDDEN_BLOCK
This sits inside an HTML comment, so a reader wouldn't see it. Move it into plain view, or delete it.
Inputs a model refusesE_BAD_INPUTS
Sleeve sleeve_a (merger_spread): days_to_close must be at least 1.
A template's numbers left inW_TEMPLATE_NUMBERS
Sleeve equity_long_short still has the long_short_book template's made-up numbers.
A book past its own limitW_LIMIT_OVER
Gross at 150.32% of NAV is over max_gross_pct 150.
curl -fsSLhttps://hedgefund.md/hedgefund.mjs -o hedgefund.mjs # read it before you run itnode hedgefund.mjs starter tokenized_assets > HEDGEFUND.mdnode hedgefund.mjs check HEDGEFUND.md
Customize
Your limits, written into the skill.
25 settings in 7 groups. Start from a preset, change anything, and your settings are written into HEDGEFUND.md. Every setting is a number or a fixed choice, so a shared link can't slip words into the file. The same settings work as URL parameters, MCP prompt arguments, the build_settings tool and /api/v1/build_settings.
Start from
An example to edit, not advice on where your lines belong. No borrowed exposure, orders stay drafts, every order needs its own yes, a token needs a redemption right, and every backtest run counts.
Exposure
How much the book may carry, by gross and by net.
2 of 2 set
25 of 25 set
HEDGEFUND.md · your settings
##Your limits
Set by the person you work for, and only that person can change them. Limits an agent drafted count only after that person says yes. If their HEDGEFUND.md and these lines differ, stop and ask. A limit is a line the person chose. It isn't advice on where a line belongs, and being inside it isn't an approval. Every name here goes into the ## Limits block of their HEDGEFUND.md and to check_order as it stands, except max_name_share_pct, max_redemption_wait_days and max_pool_share_pct. A book refuses a name it doesn't know, so you check those three yourself.
###Exposure
-Gross: at most 100% of NAV, longs plus shorts. (max_gross_pct)
-Net: at most 100% of NAV, long or short. Read it by factor exposure as well as by weight, because a low net by weight can hide a large market exposure. (max_net_pct)
###Risk
-Book volatility: at most 10% a year, at a correlation you state. That correlation is an assumption, so run it higher too. (max_vol_pct)
-One-day 99% tail: at most 1.5% of NAV. This figure is normal and comes from volatility, so read the sleeve tails beside it. (max_var99_pct)
-Drawdown stop: at 10% from the peak, no order that adds risk. A reduce can still go the usual way. Tell the person. (drawdown_stop_pct)
-Single name: at most 10% of NAV. The same issuer across several products counts as one name. (max_name_share_pct)
###Liquidity
-Liquidity cover: liquid assets at least 1.5 times near-term calls. Count what can reach cash under stress terms, not normal ones. (min_liquidity_cover)
-Ladder: at least 50% of NAV reachable within 30 days. (min_liquid_30d_pct)
-Volume: at most 10% of a day's volume, on the way in and on the way out. Volume falls when you need to leave. (max_adv_participation_pct)
-Settlement: nothing that takes more than 5 days to settle. For a token, that means days to cash through redemption, not how fast it trades. (max_settle_days)
-Exit: no position that takes more than 10 days to leave by trading. (max_days_to_exit)
###Tokenized assets
-Redemption: no token with a wait over 30 days, counting notice, gate and queue at this position's size. (max_redemption_wait_days)
-Pool depth: a token position at most 10% of the pool it would leave through, measured on the pool's cash side. (max_pool_share_pct)
-A token with no redemption right isn't allowed. A token that gives a right only to approved accounts counts as none unless this person holds the token in an approved account of their own. (token_no_redemption)
-Ask before any token whose reserves no one independent has examined. An issuer's own statement doesn't count. (unaudited_reserves)
##Your rules
Set by the person you work for, and only that person can change them. Where a rule here and the rest of this file differ, the rule wins. If a rule blocks the task, stop and ask; don't work around it. Silence is never a yes. needs_yes_over_pct_nav goes to check_order and the ## Limits block of their HEDGEFUND.md as it stands.
###Approvals
-Run check_order first, then draft the order for the person to send. You send nothing. (orders)
-Every order needs its own yes, with its size, side and venue in front of the person. (needs_yes_over_pct_nav)
-Ask before any asset class the book doesn't hold today. (new_asset_class)
-Ask before any venue, custodian or pool the book doesn't use today. (new_venue)
-Never move money, post collateral or sign anything without the person's yes to that exact move. Never hold, copy or ask for keys, seed phrases or passwords. (money_moves)
-Never write marketing, performance claims or offering text for any fund or token. Never suggest how to raise money. (fund_marketing)
###Backtests
-Hold out at least 30% of the data before the first run, and look at it once. (min_holdout_pct)
-Send every run to deflated_sharpe as a trial: kept, dropped or tweaked. (count_trials)
##Your output
How the person you work for wants results written. Follow these unless a rule above says otherwise.
###Output
-Write rates and shares in percent. (units)
-Round results to 2 decimal places, or fewer if the weakest input can't bear that many. (decimals)
A strong model can write the formula. This is what it leaves out.
Ask a strong model how long a 25% request takes under a 5% gate, and you may well hear 5 quarters. If the gate is on the tokens still outstanding, it takes 6. These templates were written around mistakes like that one. Each result says where its answer flips and what it left out, and it says so in the same place every time.
Where the answer flips
Every result gives the input value where the outcome changes. On the T-bill token template, forced sales begin above 0.0755% a day. On the backtest template, the deflated Sharpe falls under 95% at 31 trials. That tells you which number to go and measure.
What it left out, by name
Every result carries a not_modeled list: recall risk on a short, early exercise, liquidity providers leaving a pool, other borrowers selling into the same pool. The list sits in the same result as the number, so pass them along together.
Same inputs, same bytes
The math core has its own log and exp and a seeded generator, built so the same inputs and seed give the same bytes on the page, the API, MCP or the local library. Each result carries an inputs_hash, so two readers can see they ran the same inputs. That shows the arithmetic repeats, not that it's right. Ask a chat model twice and you may get two answers.
Net isn't exposure
The long-short template reads 20% net by weight and carries 72.5% exposure to the market factor. The hedge that flattens it would break both the gross and the net limit. The result says so.
A gate shrinks
Where a gate is a share of what's left, a 40% request at a 10% gate takes 5 dates, not 4. If the fastest assets sell first, the holders who stay end up with what couldn't be sold. On the gates template, carrying value says 98.76 per 100 and exit value says 85.84.
Two clocks on one loan
The collateral template sits 17 stdevs from its line on the oracle's clock and 1.79 on the redemption clock. A liquidation comes after the fall, so it sells into a pool that has already moved. Selling into today's depth would understate the bad debt.
A backtest counts its tries
A hypothetical annual Sharpe of 1.8 over 1,260 periods reads 99.99% on its own and 87.57% after 100 trials. deflated_sharpe says in every result that it measures selection only, and can't see lookahead or fitting nobody counted.
Small things that flip a sign
Cornish-Fisher takes excess kurtosis, and plain kurtosis can land it on the wrong side of the normal figure. A zero-vol call with time left is intrinsic on the discounted forward, not on the spot. Loss per remaining token adds each day's hit, because dividing the total by the tokens left charges them for what earlier leavers already took. The tests check each of these.
A limit that reads numbers, not arguments
A strong model can be talked past a limit, and an AI agent can talk itself past one. check_order only compares numbers, and it can't stop an agent that ignores the answer. An order with no limits behind it comes back no_limits_checked, which isn't a pass.
Use it in your stack
Paste it, install it, or call it.
The skill alone gives an agent the method. The MCP server and API add the tools and your settings. No key, no account.
Paste the prompt into a system prompt or project instructions. Or keep the file in the repo and point AGENTS.md at it.
terminal
curl -fsSLhttps://hedgefund.md/hedgefund.md -o HEDGEFUND.mdecho "Whenever a task models an asset or a book, sizes a position, checks an order against limits, works out a fund's fees or redemption terms, tests a backtest, or works with a tokenized asset, follow HEDGEFUND.md." >> AGENTS.md
For agents that read a skills folder: install the skill so it loads when the topic comes up, and add the MCP server for the tools.
Any client that speaks remote MCP over HTTP can add it as a custom connector. Read-only, so there is nothing to authorize.
connector
url: https://hedgefund.md/mcptransport: streamable-http # stateless, JSON responsestools:24 models, run_book, book_starter, check_hedgefund_md, build_hedgefund_md, check_order, build_settings, whats_newprompts: hedgefund # the skill, with your settings
The model tools take GET query parameters or a POST JSON body; run_book, check_order and the file tools take POST only. CORS open. An OpenAPI document is at /openapi.json. Send positions by POST, because a URL can land in a server log.
terminal
# Model tools: GET or POST https://hedgefund.md/api/v1/<tool>. Book tools: POST only.curl -shttps://hedgefund.md/api/v1 | jq '.tools[].name'curl -s"https://hedgefund.md/api/v1/commodity_token?spot_per_unit=2000&units_per_token=0.01&position_value=250000&storage_bps=35&insurance_bps=15&mint_fee_bps=25&redeem_fee_bps=25&min_redeem_units=400&delivery_cost=1500&market_premium_pct=1.25&cash_rate_pct=4&futures_carry_pct=5&holding_years=3&exit_discount_pct=1" | jq .summarycurl -s"https://hedgefund.md/api/v1/settings" | jq '.presets[].id'
Working calls against the API and the local library. The full reference is at /api/v1 and /openapi.json.
Run the T-bill token model by POST. No key; nothing is stored. Made-up numbers, not a real token.
curl.sh
# Run the T-bill token model by POST. No key; nothing is stored. Made-up numbers, not a real token.curl -shttps://hedgefund.md/api/v1/tokenized_bills \ -H'content-type: application/json' \ -d'{"rungs":[{"days":30,"face":15000000,"yield_pct":4},{"days":60,"face":20000000,"yield_pct":4.5},{"days":90,"face":25000000,"yield_pct":5},{"days":180,"face":40000000,"yield_pct":5.5}],"cash":1500000,"tokens_outstanding":100000000,"mgmt_fee_bps":20,"admin_custody_bps":10,"mint_redeem_fee_bps":5,"settle_days":1,"daily_redemption_pct":3,"stress_days":20,"rate_shock_bps":200,"bid_ask_bps":10}' \ | jq '{summary, flags, flips, not_modeled, inputs_hash}'# The skill with your limits written incurl -s"https://hedgefund.md/hedgefund.md?preset=tokenized_assets&max_pool_share_pct=2" -D - -o SKILL.md | grep -i x-settings
The same code as a library: run a starter book, then compare one order with its limits. Made-up numbers.
library.mjs
// The same code as a library: run a starter book, then compare one order with its limits. Made-up numbers.import{ checkOrder, runBook, starter }from"./hedgefund.mjs";const{ book }=starter("tokenized_assets");const run =runBook(book);console.log(run.summary);console.log(run.book_id, run.complete);// check_order takes the book as it stands now. A run fills in gross, net and the tail. Drawdown and// liquidity cover are yours to send, and a limit with no number behind it can't be checked.const checked =checkOrder({ order:{ notional_pct_nav:6, side:"add", direction:"long", tokenized:true, settle_days:3, sleeve:"bill_tokens"}, book: run.for_check_order, limits: book.limits,});console.log(checked.outcome, checked.needs_yes);console.log(checked.summary);
Run it on your own machine: no dependencies, and nothing is sent anywhere. Every number in a starter is made up.
local.sh
# Run it on your own machine: no dependencies, and nothing is sent anywhere. Every number in a starter is made up.curl -fsSLhttps://hedgefund.md/hedgefund.mjs -o hedgefund.mjs # read it before you run itnode hedgefund.mjs list # every model, by desknode hedgefund.mjs starter # the starter booksnode hedgefund.mjs starter tokenized_assets > HEDGEFUND.mdnode hedgefund.mjs check HEDGEFUND.md # warns W_TEMPLATE_NUMBERS until you send your ownnode hedgefund.mjs book HEDGEFUND.md | jq '{summary, flips, limit_checks, not_modeled, book_id}'# One model, on your own numbersnode hedgefund.mjs template tokenized_bills > mine.json # replace every number in itnode hedgefund.mjs run tokenized_bills mine.json | jq '{summary, flags, flips, not_modeled, inputs_hash}'
Call a model over MCP (stateless JSON-RPC over HTTP POST). Made-up numbers, not a real loan.
mcp.mts
// Call a model over MCP (stateless JSON-RPC over HTTP POST). Made-up numbers, not a real loan.const res = await fetch("https://hedgefund.md/mcp", { method: "POST", headers: { "content-type": "application/json", accept: "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "rwa_collateral", arguments: { collateral_value: 10000000, debt: 7000000, liquidation_threshold_pct: 80, liquidation_penalty_pct: 5, asset_vol_pct: 15, oracle_lag_hours: 24, redemption_days: 90, pool_cash_depth: 30000000, pool_token_depth: 300000, borrow_rate_pct: 7, asset_yield_pct: 9, }, }, }),});const { result } = await res.json();const { summary, flips, not_modeled, inputs_hash } = result.structuredContent;console.log(summary);console.log(flips);console.log(not_modeled);console.log(inputs_hash);
Updates
What’s new, and what’s next.
hedgefund.md is being built out: new tools are added as they are built, and what is here today is the start, not the end. Version 1.0, updated Nov 2, 2026. The whole list, with what is being built, is at /changelog.md.
Nov 2, 2026 · v1.0 · changed
Built around tokenized assets, with prompts a stack can pin
The page now leads with tokenized assets, and they have their own page at /tokenized. Every model's prompt also sits at an address that stays fixed for this version and is cached for a year, under /v/1.0/, with a sha256 for each in its index and a pack of the prompts about tokens and what's under them. /feedback is for AI agents: the page gives a prompt to hand yours, and posts from web pages are refused.
Nov 2, 2026 · v1.0 · new
hedgefund.md 1.0: a skill and 24 asset model templates
A skill for AI agents working on assets and books, with the person's limits written in. 24 models that run as templates on numbers you send: long_short_book, factor_regress, pairs_spread, merger_spread, trend_vol_target, risk_parity, rates_ladder, options_book, variance_carry, credit_carry, private_credit_tape, basis_carry, reserve_coverage, tokenized_bills, tokenized_property, commodity_token, token_nav_gap, rwa_collateral, fee_waterfall, redemption_gates, book_risk, stress_book, size_position and deflated_sharpe. Every result gives a summary, readings, flips, flags, assumptions and a not_modeled list. HEDGEFUND.md holds a book of limits and sleeves, with run_book, book_starter, check_hedgefund_md and build_hedgefund_md. check_order compares an order with the limits and returns over_limit, needs_a_yes, within_limits or no_limits_checked. It is not a fund or an offer. It has no market data and never trades, and its results are hypothetical. Every model is also a prompt to paste into any agent, with its method and the numbers to check it against, listed with hashes at /prompts.json.
Being built
No dates, and nothing here is a promise. Ask for what you need at /feedback.
Nothing is queued right now.
Ideas being weighed: a run that feeds itself; other borrowers in the same pool; depth that moves with size; more than one holder in fee_waterfall; skew moves and early exercise in options_book.
Agents: come back for more
On your next task here, fetch only what is newer than the version you have, or call the whats_new tool over the API or MCP. Every API response carries X-MD-Version.
No. It isn't a fund of any kind. It takes no money and has no investors. It doesn't act as an adviser, a commodity trading advisor or pool operator, a broker-dealer, an exchange, an alternative trading system, a transfer agent, a custodian or an issuer, and it isn't registered as any of them. HEDGEFUND.md is the name of a file format: a plain file that holds one book's limits and sleeves. The name doesn't describe what this site is, and no fund stands behind it. It's a skill and calculators for people who know these instruments and can judge the output.
Does it have market data?
No. It has no prices, yields, spreads, vols, NAVs, pool depths or reserve figures, and it fetches nothing. Every number comes from you, from a made-up template you chose, or from a default the result states.
Does it trade?
No. It never places or routes an order, takes money or holds keys or assets. check_order compares an order you send with limits you send. Anything that reaches a market goes through your own accounts, on your own yes.
Are the results real?
No. They're hypothetical: arithmetic on the numbers you send and simplified formulas. Nobody achieved them. They don't reflect real trading, costs or liquidity, they're prepared with hindsight, and they don't indicate future results.
Do the numbers in the templates mean anything?
No. They're made up, so a template runs as it stands and shows its shape. They aren't market levels, typical values or estimates, and the names in them don't exist. A yield or a return in a template's result is arithmetic on those numbers. Nobody earned it, and nothing is on offer at that figure. Replace every number, and never show a template's numbers as anyone's figures.
Can it tell me what to buy?
No. It has no picks and no view, and it doesn't say what to do with a position. It can show what your own numbers do, what each of your limits allows and which input would change the answer. A template like trend_vol_target walks a rule through prices you send. That's a hypothetical look back, not a signal to follow. What to do about any of it is yours.
Is a tokenized asset here a security?
That isn't answered here. It's a legal question for your own counsel, and so are who may hold a token and how it may move. A model does the same arithmetic on the terms you send, and running one says nothing about whether you may buy, hold, sell, pledge or transfer a token.
Can I show results to investors?
No. The terms forbid it for anything from this site, its API or its MCP server. Don't show any output to investors or clients, present it as anyone's performance, or use it to market an investment, including pitch books, tear sheets, fact sheets and investor letters. The skill tells your agent to refuse. A copy you run yourself is under MIT, but the law on performance and marketing claims doesn't change, and following it is yours, with your own counsel.
What's not here?
Market data, prices, picks or signals of our own, trading, custody, any fund or token offering, and investment advice. Beyond that, each result lists what its own formula leaves out in not_modeled.
Can't a strong model do this already?
It can write most of these formulas, and it should read this skill while it does. What the templates add is the flip points, the not_modeled lists, repeatable output, and tests aimed at specific mistakes. The skill adds questions a model doesn't think to ask, such as what the oracle does on a weekend.
Where do the formulas come from?
They're public formulas, simplified, and every result states the one it used. The tests compare the models with figures worked by hand and with a separate reference script. They can still be wrong, so check what matters.
Do you keep my book?
No. A tool uses what you send only to answer that request. A position list is still sensitive, so send it by POST rather than GET, because a URL can land in a server log, or run the local library, which sends nothing here. Labels can be made up.
Can I use this at work?
It's MIT. Your firm's rules on code, data and AI still apply, and whether a position list may leave the building is their call. Ask your compliance team. This site can't answer for them, and if you manage other people's money, nothing here meets your duties to them.
Is this advice?
No. Nothing here is investment, legal, tax, accounting or regulatory advice, a recommendation, or an offer of any security, token or fund interest. HEDGEFUND.md is a method for software agents plus calculators that work on the numbers you send. Results are hypothetical and may be wrong. Check them yourself, and ask a qualified person when it matters.
Can an agent set up its own settings?
It can draft them: the same settings work as URL parameters, MCP prompt arguments and the build_settings tool. The skill and the tool both say that drafted settings count only after the person says yes. Nothing technical stops an agent from ignoring that, so read what it sends you.
Does a tool result mean something is approved?
No. Tools calculate, compare and check. They don't approve, enforce or certify anything, and they can be wrong.
Can I change everything?
Yes. Start from a preset, change any setting above, and your choices are written into the file. Or edit the Markdown yourself. It's MIT, so keep your copy next to your code.
Do you track anything?
We count page views, copies, skill fetches and API and MCP calls to learn what is useful, without cookies or stored IP addresses. The desk runs in your browser, so what you type or drag there never reaches us. We count that a model was opened or changed, and which one. We never record your settings values or what you send to a tool. Details in the terms.
1.0Use at your own risk: hedgefund.md is not a fund, not an offer of any security, token or fund interest, and not advice. Results are hypothetical, may be wrong, and are not a record of real trading. Don't use them to market an investment. See the terms.