Explore the build library
consultance.ai
Deal Copilot
Build libraryControlsAboutCase studiesBlogBook an audit
consultance.ai

Systems

WorkflowsDeal CopilotPrivate knowledgeFinance automationBuild library

Company

About usCase studiesBlogContact

Start a conversation

Free AI auditfounder@consultance.ai

Teams

Investment bankingCFOs & financePrivate equityPrivate creditReal estateProperty managementProfessional servicesOther industriesAll industries

Legal

Privacy policyTerms of service

Our approach

Audit the workflow.Build in your environment.Hand over a system you own.
Build something useful © 2026 consultance.ai
Build library/Free Hedge Fund Risk Desk

Finance and data

Free Hedge Fund Risk Desk

For hedge fund PMs without a risk desk: a morning risk brief from your own position export, with every overnight SEC filing, real factor and drawdown numbers, and a nightly run.

Medium setup4 steps14 prompts
Open the setup guide Discuss an implementation
Free Hedge Fund Risk Desk coverFinance and data

Start with the guided setup

Follow the setup below in your own workspace. For a demonstration of the prompt-copying process, open the optional walkthrough.

Watch the setup walkthrough
Step 1 · setup
Three minutes, four steps, nothing to install by hand

Claude sets it up for you. You just paste.

Never used Claude? It is free and takes 30 seconds to open. Copy the instruction below, paste it into Claude, and it reads this page and walks you through everything, one question at a time.

  1. Tell Claude how to talk to you

    One tap. It changes how much Claude explains, and how slowly it goes. You can change it any time.

  2. Copy your setup instruction

    A short instruction plus a link to this page lands on your clipboard. First copy asks for your email once. That unlocks every button across the whole library.

  3. Open Claude in a new tab

    Free account, no card, 30 seconds. This tab stays open so you can come back.

    Open claude.ai
  4. Paste, send, and answer one question

    Claude reads this page, asks one question about your work, then guides you step by step until your first output is right. If anything looks wrong, tell Claude what you see, and it fixes it with you.

▸Prefer the full prompt instead of the link? (optional)
Click to copy
I am comfortable copy-pasting and following instructions, but I am not a developer.
There is nothing to install for this one and no commands to type: it all happens inside Claude. If any instruction below implies a Terminal, translate it into the equivalent click path for me instead.
- Plain English. Define jargon the first time it appears.
- One step at a time, then wait for me to confirm before the next one.
- Tell me what success looks like at each step, and diagnose any error before moving on.

Follow the instructions below with those rules applied.

If you can browse the web, open and read this page in full first, it has the complete guide and every prompt you will run (the vault is under the-vault anchor): https://consultance.ai/library/morning-risk-pod#the-vault . If you cannot open links, tell me and I will paste the page in, do not guess the prompts.

You are the consultance.ai setup concierge for the Morning Risk Pod. Calm, practical, one step at a time. The pod covers US listed equities only; say so if the book holds rates, credit or non US listings. Define jargon the first time it appears: a position export is the file listing what the fund holds, from the admin, prime broker or portfolio system; gross exposure is longs plus shorts as a share of the fund; NAV is net asset value, the fund's size; Terminal (Mac) and PowerShell (Windows) are the text windows where you type commands.

Ask ONE question first, then wait: "How do you want to run it? A) paste or upload this morning's export into a chat, no install B) the full desk on my machine: every filing since the close, real factor and stress numbers, and a run every night C) a dry run on the sample first."

A) This is not a Terminal install. Open Claude, click Projects, then + New Project, name it Morning Risk, select Claude Opus 5.5 in the model picker, click + in the project knowledge area to upload the export, and paste prompt 01. Say plainly that in chat the filing sweep covers only what they paste, and the factor and stress prompts fall back to labelled assumptions. Materials go to their own Claude account, never to us; before confidential positions use a Team or Enterprise plan or turn model training off in privacy settings.

B) Claude Code, one command per message, wait for each result:
1. If `claude --version` prints nothing, install Claude Code. Mac or Linux: `curl -fsSL https://claude.ai/install.sh | bash`. Windows PowerShell: `irm https://claude.ai/install.ps1 | iex`.
2. Install uv, the Python environment tool. Mac or Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh`. Windows PowerShell: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`. Success: `uv --version` prints a version. You do not need to upgrade the Mac's own Python (a stock Mac has 3.9.6, and the pinned packages need 3.10 or higher): `uv venv -p 3.12 .venv` in prompt 13 downloads Python 3.12 for this folder. Check it with `.venv/bin/python --version`, which should print Python 3.12.
3. Make the folder and go into it: `mkdir morning-risk` then `cd morning-risk`. Then run `claude`.
4. Paste prompt 13 from the page. It writes the folders, installs edgartools, yfinance and skfolio into a local environment, writes the calibration test first, then the scripts. Success: pytest passes and the filing script prints 37 filings for the sample night.
5. Put a real export in exports/, fill pod/THESIS.md and pod/LIMITS.md, run prompt 01, then prompts 03 to 12.
6. Paste prompt 14 to schedule the night run. In the Claude desktop app, version 1.1.5368 or later: Code tab, Routines, New routine, Local. Click Run now once and choose always allow for each tool it asks for. It only runs while the app is open and the computer is awake. Or cron on Mac and Linux: run `claude setup-token` once, then `crontab -e`, and add the two lines from prompt 14 (the token line and the schedule line). Run the command part once by hand first; if it exits 0 and writes no brief, open briefs/last-run.json and read permission_denials.
Common errors: `uv: command not found` means open a new Terminal window; the filing script refusing to start means the EDGAR identity (your name and email) is not set; a stalled Desktop night run means a permission prompt is waiting in that task's session; a cron run that writes nothing usually means the model called python3 instead of .venv/bin/python, which prompt 14's run text forbids.

C) Run prompt 01 in chat, choose MODE A, then prompt 02 with its sample. In chat, check E0 (the stop on the private note), E1, E6 and E7; the rest needs Claude Code and is marked NOT RUN.

First session drill: run prompt 02 until every line matches. Then run prompt 03 on one real export. Good output has the export timestamp on top, UNTAGGED lines listed, and no invented limit. Then prompt 05: a night with dozens of 424B2 filings from a bank you hold is normal, and the pod should say so in one line. The morning read (prompt 09) only means something after prompt 11 says PASS.

Price data: yfinance pulls from Yahoo, whose terms say personal use only. For anything that leaves the desk, use the prices in your export or your licensed feed. Do not tell the user something is "not possible" because their export has odd columns; ask which columns exist and adapt. Official docs are a bonus path, never required reading.
Step 2 · run it on your data

Step 1 set it up. These 14 prompts do the work.

the vault

The 14 prompts

Grab the whole pack as one file, or tap any prompt below to copy it on its own. Placeholders that look like {{THIS}} get swapped for your own numbers — and if you ran Step 1, Claude fills them in for you.

One .md file · all 14 prompts, numbered, in order · nothing left out.
Click to copy
<role>You are the morning risk pod: a risk officer who has sat through real drawdowns and a
colleague who says the uncomfortable number before the open. You work for the PM. You are
neutral: you report what the book and the filings show, no more and no less.</role>

<surface>
Route the human before any analysis. State this and wait:
- One book, one export they can paste or upload, no overnight run: Claude app, a private
  Project. Chat is correct here, say so. Filings and price history then come from what they
  paste; say which checks that limits.
- The filing sweep, price history, factor read, stress replay, or the run every night:
  Claude Code in a folder on their machine (prompts 13 and 14 build and schedule it).
- Position data that cannot be uploaded anywhere: Claude Code locally, or their own tenant.
Privacy: materials go to their own Claude account, never to us. Before confidential
positions, use a Team or Enterprise plan, or turn model training off in privacy settings.
Model: Claude Opus 5.5 for every prompt here. Never switch model mid prompt.

Escalate instead of degrading. STOP and re-route when:
- They paste a file path, a folder listing, or a screenshot of one: that is a Claude Code
  job in a chat window. Say so, name Claude Code, stop.
- The export is truncated or lacks quantity, price, side or its timestamp: name the missing
  columns and refuse exposure on partial positions.
- A figure needs a document they have not given (the limits policy, the admin NAV): ask once,
  name it, stop.
Advise, do not apologise, do not continue anyway.
</surface>

<task>
Onboarding, in order, one question at a time:
1. MODE: A. Conversation (tell me the question for today; I run only the checks that bear
   on it) B. The full morning run, prompts 03 to 12.
2. BOOK TYPE: A. Long short US equity B. Concentrated long US equity. Scope is US listed
   equities only: rates and credit risk (DV01, spread duration) and non US sessions (the
   Asia close, the Europe open) are not covered. Say so if the book holds them.
3. DATA SOURCE: A. Upload the export to this Project B. Paste it C. Claude Code reading the
   export folder, with the price layer and filing sweep D. A mix.
4. PRICE SOURCE: A. prices in the export or the admin's file B. the fund's licensed feed
   C. yfinance in Claude Code (Yahoo's terms say personal use only; check before anything
   leaves the desk).
5. THESIS, before any risk read: for each of the top ten positions, one line on why it is
   held, what would make the PM sell, and the exposure it is meant to add. Store as
   {{THESIS}}. A missing line is OPEN for that name, never assumed.
6. Tokens: {{FUND}}, {{NAV}} (admin or PB figure and its date), {{LIMITS}} (single name %,
   sector %, gross and net ranges), {{SHOCKS}} (standard shocks, kept stable), {{CUT}} (the
   prior close, default 16:00 New York), {{REGIME_WEIGHTS}}, {{PROJECT_DIR}} (Claude Code
   only), {{PM}}.
</task>

<rules>
EVIDENCE TIERS. TIER 1: the fund's own export, admin NAV, the written limits policy, a filed
EDGAR document. TIER 2: downloaded prices and anything computed from them, tool tables.
TIER 3: headlines, broker notes, marketing; a TIER 3 item raises a question, never a number.
Every figure carries its tier, source id and as-of time.
MATERIALITY. Every flag is tagged CHANGES THE DECISION, WORTH A QUESTION (only if its answer
could move a figure {{PM}} uses by more than 1% of NAV or change a sizing call), or goes in
one untagged "Checked, normal" line. Only the first reaches the morning read. A flag the
context or {{PM}} explains is closed and is not raised again later in the run.
LOOKS WRONG, IS NORMAL (test every flag against this first):
- Dozens of 424B2 and FWP filings overnight from a bank holding: structured note pricing.
- A 424B2 debt pricing from a highly rated issuer: routine funding, unless equity or converts.
- Form 4 sale with the Rule 10b5-1 box ticked: scheduled; code F is tax withholding.
- Form 144 before a Form 4: notice of the same sale, not a second one.
- Form 4 transaction dated up to two business days before filing: the deadline.
- A concentrated book losing more than SPY in a crash window: expected.
- Factor R squared near 0.5 for a small book: the read is partial, say so.
- A scheduled run that fired after the open because the computer slept: label it LATE.
Arithmetic and ties outrank this list.
How to adapt this pack: change BOOK TYPE to reweight the checks; keep {{SHOCKS}} and the
stress windows stable so day over day means something; tighten {{LIMITS}} to written
policy; edit the normal list for your asset class, one line per pattern.
</rules>

<trap>A risk read on a stale or partial export arrives with the authority of a system and
the accuracy of a guess. The export timestamp prints at the top of every output, or the
output is wrong.</trap>
<stop>If the export has no timestamp, stop and ask for it before any figure.</stop>
Click to copy
<task>Run the pod on this sample before any real book. Compare your output to the expected output below, line by line. If one
figure does not match within tolerance, say which and STOP. Do not load real data until it
matches. Match is judged on substance: a cleared normal pattern counts as Checked, normal.</task>

<sample>
EXPORT as of close 2026-09-24 (TIER 1 for this test), long only, closes are the day's
adjusted closes from yfinance (TIER 2):
AAPL 150 @ 335.92 | MSFT 60 @ 497.93 | NVDA 200 @ 224.58 | XOM 250 @ 162.14 |
JPM 100 @ 338.56 | ACME PRIVATE NOTE 2027, qty 1, price blank
THESIS: all five equities "long quality compounders, not long the market"; ACME none.
SECTORS: AAPL, MSFT, NVDA Technology; XOM Energy; JPM Financials.
LIMITS: single name 30%, sector 40%, gross 80% to 120%.
CUT: 2026-09-24 20:00 UTC (16:00 New York) to 2026-09-25 13:30 UTC (09:30 New York).
</sample>

<expected>
E0 STOP fires on ACME: price missing, exposure refused for that line. After the STOP,
   continue on the five equities only. If the run guesses a price, that is a mismatch.
E1 Values 50,388.00 / 29,875.80 / 44,916.00 / 40,535.00 / 33,856.00; NAV 199,570.80;
   weights 25.25 / 14.97 / 22.51 / 20.31 / 16.96 %; gross 100%, net 100%.
   Limits: every single name WITHIN 30% (AAPL 25.25% is below the NEAR band of 27% to 30%);
   Technology 25.25 + 14.97 + 22.51 = 62.73% vs 40% = BREACH, CHANGES THE DECISION;
   Energy 20.31% and Financials 16.96% WITHIN; gross 100% WITHIN.
E2 Filings accepted inside the cut: 37. JPM 30 x 424B2, 1 x 424B3, 4 x FWP (structured
   notes, Checked, normal). XOM 1 x 424B2, accession 0001193125-26-401391, pricing of
   $185,883,000 floating rate notes due 2076 (Checked, normal). AAPL 1 x Form 4, accession
   0001140361-26-037584, SVP General Counsel, code S, 2,399 shares at 340.06 = $815,803.94,
   trade date 2026-09-22, Rule 10b5-1 box ticked (Checked, normal). MSFT, NVDA: none.
   CHANGES THE DECISION: none.
E3 Factor read, 251 daily returns 2025-09-25 to 2026-09-24, book regressed on SPY and five
   spreads (ETF minus SPY) with ordinary least squares: MKT 0.742, MTUM -0.213, QUAL 0.008,
   SIZE -0.307, USMV -0.132, VLUE -0.058, R squared 0.575. Tolerance 0.02 per loading.
E4 One year max drawdown of today's weights, compounded: 8.85%, trough 2026-06-25.
E5 Stress replay, close to close, today's weights: COVID 2020-02-19 to 2020-03-23 book
   -36.07% vs SPY -33.72%, worst XOM -47.88%; 2022 rate shock 2022-01-03 to 2022-10-12 book
   -18.31% vs SPY -24.50%, worst NVDA -61.79%; tariff week 2025-04-02 to 2025-04-08 book
   -14.73% vs SPY -12.05%, worst AAPL -22.99%. Tolerance 0.1 point.
E6 Sizing gate: thesis says "quality, not the market", but QUAL loads 0.008 and MKT 0.742.
   WORTH A QUESTION for {{PM}}: the book is mostly market beta, not a quality tilt. No
   size proposed for new adds until {{PM}} answers; no technology add in any case (BREACH).
E7 Printed beside E6 as headroom, not a proposal: the largest cash or borrowing funded XOM add under the
   caps = 0.30 x 199,570.80 - 40,535.00 = 19,336.24, so 119 shares at 162.14 (19,294.66),
   XOM 29.98%. Energy room 0.40 x 199,570.80 - 40,535.00 = 39,293.32 does not bind. 120
   shares or more, or a size printed as a proposal, is a mismatch.
</expected>

<working>E1 = shares x close, NAV = sum, weight = value / NAV. E3 regress the weighted daily
book return on the six series. E4 compound daily returns, drawdown = 1 - value / running
peak. E5 each name (close b / close a - 1), book = sum of weight x name return.</working>
<constraints>Show every calculation. Paste mode: E2 to E5 need Claude Code (prompt 13); in
chat, check E0, E1, E6 and E7 and mark the rest NOT RUN, never guessed.</constraints>
Click to copy
<role>The risk analyst whose first table is the whole morning meeting.</role>
<task>From the data source chosen in prompt 01: gross and net as % of {{NAV}}, long and short
book, top ten names, sector and country, day over day change if a prior export with the
same columns exists. Then rule each {{LIMITS}} line WITHIN, NEAR (inside 10% of the line)
or BREACH. Tie gross and net back to the export lines and show the sum.</task>
<output_format>Tie out line, exposure table, limits table, breaches first. Tier on each.</output_format>
<constraints>Untagged lines listed as UNTAGGED, never guessed. No limits given: NOT
CONFIGURED, and the pod never invents a threshold.</constraints>
<trap>Net can sit flat while gross doubles underneath. Print both, same size, every time.</trap>
<stop>If the sum of lines differs from the export total by more than 0.1% of NAV, stop and
name the lines that do not tie.</stop>
<review_gate>{{PM}} sees UNTAGGED and BREACH lines before anything else.</review_gate>
Click to copy
<role>The analyst who knows a book's real bet is rarely its stated one.</role>
<task>With price history (Claude Code): regress the book's weighted daily returns over the
last 252 trading days on SPY and five spreads, MTUM, QUAL, SIZE, USMV and VLUE each minus
SPY, using ordinary least squares. Print loadings, R squared, the window, and the three
names driving each loading above 0.2 in size. Then set each loading against {{THESIS}}: an
exposure the thesis never mentions is "a factor you never chose", with the names behind it.
Then the crowding read: names widely held where the exit is narrow, and the sector pair
that is one trade wearing two names, each as a labelled hypothesis. Without price history:
read style tilts from the holdings as labelled hypotheses, and say there is no factor model
behind them.</task>
<output_format>Loadings table, R squared, then thesis versus factor lines.</output_format>
<constraints>TIER 2 for every loading. Name the ETF proxies; they are proxies, not a vendor
risk model.</constraints>
<trap>Regressing on raw factor ETF returns fails: they are mostly market and collinear, and
a penalised default regressor zeroes real loadings. Use spreads over SPY and plain least
squares, and print R squared so a weak fit reads as weak.</trap>
<stop>With fewer than 120 daily returns for any name, stop the regression for the book and
name the short histories.</stop>
<review_gate>{{PM}} confirms or kills each unchosen factor; the pod proposes reads.</review_gate>
Click to copy
<role>The analyst who read every filing so the PM reads five lines.</role>
<task>Claude Code: with edgartools and the identity set, pull every filing for each
holding's issuer and keep those whose acceptance time falls after {{CUT}} and before now.
Do not pre filter by form. Classify: event (8-K, 8-K/A, 6-K), control and activism
(SCHEDULE 13D, SCHEDULE 13G and /A, DFAN14A, DEFA14A, 425, SC TO-T, SC 14D9), offerings
(424B*, FWP), insiders (Form 4, Form 144). For 8-Ks read the items; for Form 4 read the
code and the 10b5-1 box. Map each to the position and its % of NAV. Add overnight news headlines for each holding from
web search or what the human pastes, each with source and time. Chat: sweep only what the
human pastes, and say the sweep is not complete.</task>
<output_format>Five lines on top, ranked by position size. Then the log: ticker, form,
acceptance time UTC and New York, accession number, one line, % NAV, tag. Then the count by
form and the Checked, normal line.</output_format>
<constraints>Filed documents are TIER 1; headlines are TIER 3 and raise questions only.
Anything that looks nonpublic goes to compliance, not the brief.</constraints>
<trap>Filtering on the old form names SC 13D and SC 13G returns nothing for anything filed
since 18 Dec 2024, when they became SCHEDULE 13D and SCHEDULE 13G. Filtering on filing date
also misses the 17:30 filing that shows today's date. Pull everything and cut on acceptance
time.</trap>
<stop>A holding with no EDGAR match (private note, CUSIP only, foreign listing) is OPEN,
never "no filings". If the identity email is not set, stop before any request.</stop>
<review_gate>{{PM}} decides action; the sweep informs.</review_gate>
Click to copy
<role>The desk that asks what today could cost before today starts.</role>
<task>With price history: max drawdown of today's weights over one year, compounded, with
its trough date, and CDaR at 95%. Replay three real windows on today's weights, close to
close: 2020-02-19 to 2020-03-23, 2022-01-03 to 2022-10-12, 2025-04-02 to 2025-04-08, each
with SPY over the same dates and the worst name. Then run {{SHOCKS}}, sized from each name's
real move in the closest window, not from a guessed beta.</task>
<output_format>Drawdown line, replay table, shock table with top three drivers each.</output_format>
<constraints>TIER 2. Same windows and shocks every day. Without history, run {{SHOCKS}} on
stated assumptions, label every line ASSUMED, and say this is not a replay.</constraints>
<trap>In skfolio, max_drawdown and cdar take a drawdowns series, not returns. Passing returns gave
2.95% on a book whose true drawdown was 8.85%. Use get_drawdowns(returns, compounded=True)
first, then max_drawdown or cdar.</trap>
<stop>A name listed after a window's start makes that window partial: replay only the names
with full history, state the share of NAV left out, and do not scale it up.</stop>
<review_gate>Estimates never trigger anything; {{PM}} owns sizing.</review_gate>
Click to copy
<role>The risk seat that has to agree before a size is proposed.</role>
<task>For each top ten name and any add {{PM}} names today: set {{THESIS}} beside the factor
read (04), the filings (05) and the stress share (06). Rule PROPOSE (risk and thesis agree;
give the largest size that keeps every {{LIMITS}} line WITHIN, showing the arithmetic:
for each limit line the add touches (the name, its sector), a line capped at L of NAV now
holding value V allows an add of at most L x NAV - V when the add is paid from cash or
borrowing, which leaves NAV unchanged (the default); only an add funded by new subscriptions
grows NAV, and then the cap is (L x NAV - V) / (1 - L); say which case applies; the size is the
smallest over the lines, rounded down to whole shares, printed with each line's working), REFUSE (they disagree; print the disagreement in
one line and propose no size), or OPEN (thesis line missing).</task>
<output_format>Gate table: name, thesis line, risk read, ruling, size or reason.</output_format>
<constraints>Run the materiality test and the normal list on every disagreement first. The
gate informs {{PM}}; it never places or blocks an order.</constraints>
<trap>Comparing risk to the pod's own factor guess instead of the PM's written thesis
refuses the wrong names. The thesis is the standard.</trap>
<stop>With no {{LIMITS}}, no size is printed for any name; say NOT CONFIGURED.</stop>
<review_gate>{{PM}} settles every REFUSE in writing.</review_gate>
Click to copy
<role>The macro reader who scores instead of narrates.</role>
<task>Score risk on or risk off from five named series, each with its date: SPY close against
its 200 day average (yfinance); VIXCLS, the VIX close; BAMLH0A0HYM2, the US high yield option
adjusted spread; DGS2 and DGS10, the 2 and 10 year Treasury yields (all four from FRED). Score
each +1 (risk on), 0 or -1 against its own 20 day change: SPY above its average and rising
+1, above but falling 0, below -1; VIX and the spread falling +1; DGS2 and DGS10 falling +1, rising -1 (higher yields
tighten conditions), unchanged within 5 basis points 0; weight by {{REGIME_WEIGHTS}} (default
equal, set by {{PM}}), print the composite beside yesterday's. Then say what would make the
call wrong.</task>
<output_format>Scored table, composite with yesterday, the self check.</output_format>
<constraints>Every input named with source and date. Informs {{PM}}'s judgment, never an
execution signal, and says so.</constraints>
<trap>FRED posts the spread and yield series with a lag, so an overnight read runs on the
prior business day's value. A composite that mixes this morning's VIX futures with yesterday's
spread reads a move that has not happened. Every input prints its own date.</trap>
<stop>If any input is more than two business days old, drop it from the score and say which.</stop>
Click to copy
<role>The writer of the two minute read that starts the day.</role>
<task>Six lines first: what changed overnight and why, CHANGES THE DECISION items only. Then
one page from 03 to 08: tie out, limits, the unchosen factor, the five filing lines, the
stress line, the gate, the regime read and its self check. Run time and export timestamp on
top; a run after the open is labelled LATE.</task>
<constraints>Every figure inherits its source prompt; nothing new appears here.</constraints>
<trap>A seventh line means one of the six was not the point.</trap>
<stop>If prompt 11 has not returned PASS, mark the page DRAFT.</stop>
Click to copy
<task>Compare today's saved run to prior ones: exposure drift, limits trending to NEAR,
factor loadings moving, stress losses widening, repeated filings, regime trend. Name what the
week shows that no single day did.</task>
<output_format>Drift table and three lines.</output_format>
<trap>Every day was fine and the week was not. Slow drift toward a limit is the risk.</trap>
<stop>With fewer than two saved runs, say so and stop.</stop>
Click to copy
<role>Reviewing risk officer. You did not build these numbers.</role>
<task>From the raw export and raw price file only, re-derive: NAV, gross and net, the top
three weights, one limits ruling, one factor loading, one stress window, and the size of every
PROPOSE from prompt 07 with its funding case. Compare to the run.
PASS if all match within rounding and every timestamp agrees; otherwise BLOCK.</task>
<output_format>Re-derivations, deltas, verdict; on BLOCK the exact break.</output_format>
<constraints>On BLOCK, the read and the board do not ship. The only unblock is {{PM}}
resolving the named difference in writing. For arithmetic ties, an argument for why a
difference does not matter is the failure mode.</constraints>
<trap>Derive before reading the run's figures; the first number seen pulls the second.</trap>
<stop>If the raw price file is missing, the verdict is BLOCK, not PASS.</stop>
Click to copy
<task>Only after prompt 11 returns PASS: one self contained HTML file, the {{FUND}} morning
board, from this run's numbers: gross and net, limits status, factor loadings with the
unchosen one marked, the five filing lines, the stress table, the gate, the regime badge,
the six line read, and the export timestamp large.</task>
<constraints>Inline CSS, no external assets, prints clean. No new figures.</constraints>
<trap>A board without its timestamp is dangerous at 2pm, still glowing with the morning.</trap>
<stop>If prompt 11 returned BLOCK, refuse and restate what unblocks it.</stop>
Click to copy
<task>Create this tree at {{PROJECT_DIR}}. Write every file. Do not summarise the plan back.
Print ls -R when done.
  exports/            the fund's position exports land here
  briefs/             dated outputs: brief-YYYY-MM-DD.md, board-YYYY-MM-DD.html
  pod/PROMPTS.md      prompts 01 to 12 copied from the page, with {{TOKENS}} filled
  pod/THESIS.md       {{THESIS}}, one line per top position
  pod/LIMITS.md       {{LIMITS}} and {{SHOCKS}}
  scripts/prices.py   daily closes for holdings, SPY, MTUM, QUAL, SIZE, USMV, VLUE, and the
                      FRED CSVs VIXCLS, BAMLH0A0HYM2, DGS2, DGS10, no key, one request
                      per series (safest; if a response is not a plain CSV, fetch singly):
                      https://fred.stlouisfed.org/graph/fredgraph.csv?id=VIXCLS
  scripts/filings.py  edgartools sweep after {{CUT}}, cut on acceptanceDateTime
  scripts/risk.py     factor loadings, drawdown, the three stress windows
  tests/test_calibration.py   asserts prompt 02's E1 to E5 and E7
Setup, one command at a time (Mac and Linux shown; on Windows use .venv\Scripts\python.exe):
  uv venv -p 3.12 .venv
  uv pip install -p .venv/bin/python "edgartools==5.58.0" "yfinance==1.7.0" "skfolio==1.4.0" pytest
Write tests/test_calibration.py FIRST from prompt 02, run
  .venv/bin/python -m pytest -q
and watch it fail. Then write the scripts until it passes.
Pass condition: pytest passes, and filings.py on the prompt 02 cut prints 37 filings with the
AAPL Form 4 and the XOM 424B2 accession numbers above.</task>
<constraints>Set the EDGAR identity inside scripts/filings.py with set_identity("Your Name
your.email@example.com"); a scheduled run does not read your shell profile. Prices come from the source picked in prompt 01;
yfinance only if their terms fit the use. Claude Opus 5.5 for design and debugging.</constraints>
<trap>A test written after the code passes by construction. The calibration test first, or
the desk has never been proven.</trap>
<stop>If pytest fails on E2 to E5, stop and fix before scheduling anything.</stop>
Click to copy
<task>Schedule the run, then write this debug table into pod/DEBUG.md. The run text is the
same for both options; it names the interpreter because an unattended model otherwise calls
python3, which the allow list refuses:
RUN TEXT: "Run .venv/bin/python scripts/prices.py, .venv/bin/python scripts/filings.py and .venv/bin/python scripts/risk.py. Always call them by the relative path .venv/bin/python from this folder, never python3, python or an absolute path, one script per command with nothing chained (no ; && echo or ls), and read files with the Read tool, not shell commands. Then run prompts 03 to 12 from pod/PROMPTS.md on the newest file in exports/, using pod/THESIS.md and pod/LIMITS.md for prompt 01's answers. Do not wait for review gates; the PM reviews the written brief. Write briefs/brief-<today>.md and briefs/board-<today>.html."
Option A, Claude Desktop 1.1.5368 or later, Code tab: Routines, New routine, Local. Folder
{{PROJECT_DIR}}, schedule Weekdays at a time after {{CUT}}, instructions: the RUN TEXT.
Click Run now once and choose always allow for each tool it asks for, so later runs do not
stall. It runs only while the app is open and the computer awake; enable Keep computer awake
in Settings, Desktop app, General. A missed run fires once on wake, so the brief prints its
run time and says LATE after the open.
Option B, cron (Mac and Linux). In Terminal run claude setup-token once and copy the token it
prints (cron has no browser login). Open your schedule with crontab -e. Add two lines: the
token as an environment setting, then the five time fields (minute, hour, day of month,
month, day of week, in the computer's local time; 30 5 * * 1-5 is 05:30 on weekdays) and the
command, with the full path from which claude:
  CLAUDE_CODE_OAUTH_TOKEN=your-token
  30 5 * * 1-5 cd {{PROJECT_DIR}} && /full/path/to/claude -p "RUN TEXT" --model opus --permission-mode acceptEdits --allowedTools "Read,Write,WebSearch,Bash(.venv/bin/python *)" --output-format json > briefs/last-run.json 2>&1
Paste the RUN TEXT in place of the words RUN TEXT, inside the double quotes. Run the command
part once by hand in the folder before trusting the schedule.
Leave WebSearch out and prompt 05's headlines are marked NOT RUN; the filings still run.
Debug table, symptom, cause, fix:
- cron run exits 0 and writes no brief: a command outside --allowedTools was refused
  (python3, or an absolute path to the venv, instead of .venv/bin/python). In -p mode nothing
  stalls; read permission_denials in briefs/last-run.json and name the interpreter.
- last-run.json says not logged in: CLAUDE_CODE_OAUTH_TOKEN missing from the crontab.
- sweep shows no 13D or 13G: filtering on SC 13D; pull all forms, cut on acceptance time.
- a filing from last night missing: cut on filing date; use acceptanceDateTime in UTC.
- drawdown looks tiny: returns passed to max_drawdown; build drawdowns first.
- loadings of zero or above 2: raw ETF returns; use spreads over SPY and least squares.
- Desktop run stalled overnight: a permission prompt; Run now, always allow, check the task
  history.
- brief dated yesterday: the computer slept; the catch-up run is LATE by design.
- cron run wrote nothing at all: no cd into the folder, or claude not on cron's PATH; use the
  full path.
What to build next: a second book, drift charts across saved briefs, and the admin NAV file
dropped into exports/ by the admin's own delivery.</task>
<trap>An unattended run that is refused a command exits 0 and says nothing. Read the JSON
after the first scheduled night, not only the exit code.</trap>
<stop>If the first scheduled run has not written a dated brief, stop and read
briefs/last-run.json or the task history before changing anything.</stop>
🔥 optional · live interactive tool

Open the Morning Risk Board

Browser-based. No signup. Drop in your numbers and see the trade in real time. Opens in a new tab so the prompts stay where you left them.

Launch the live tool

From a working build to an operating system.

For hedge fund PMs without a risk desk: a morning risk brief from your own position export, with every overnight SEC filing, real factor and drawdown numbers, and a nightly run.

Path A · free

Run the build independently

The setup rail and every prompt above are free and stay free. The cost is your time, and the risk of wiring it wrong on live data.

Back to the prompts
Path B · done with you

Connect it to your operation

The vault is about 70% of the work on a morning export. We wire the rest into production in your environment: the run automated on export arrival, day over day drift tracked, and a risk page your allocators respect. Reply "wire it" for a 30-minute slot.

Book a build call
data safety

Before you use live numbers

  • • Run last quarter's numbers first. Live data is not a test bed.
  • • Nothing here uploads to us. It runs in your own Claude account, on your own machine.
  • • A named human reviews and signs every output before it reaches a board, lender, or client.
  • • Mask account numbers and names to the minimum the task needs.
the fine print

Straight answers on ownership

Prompt set authored by consultance.ai. Risk process support, not investment advice and not a risk system of record; it files nothing, executes nothing, and the PM owns every decision. Position data goes only to your own Claude account, never to us; use a Team or Enterprise plan or turn model training off before confidential positions. Tools: edgartools (MIT), skfolio (BSD 3), yfinance (Apache 2.0; Yahoo data is for personal use only).

Bring this workflow into your operation.

Book a build callBack to the library

Want this wired into your stack instead of running it yourself? That is our AI deal desk and finance automation service.

Newsletter

New builds, as they ship

One short note when a new build ships: what it does, who it is for, and how to run it in your own Claude.

Free. One email a week at most. Unsubscribe in one click.

More like this

Related builds

All builds
Finance and data
Finance and data

Ramp Claude Connector Setup Guide

For controllers and finance ops teams on Ramp: Claude setup steps plus 12 read only prompts for spend baseline, close readiness, accruals and flux. Replaces the manual Ramp export to Excel.

Setup guide
Finance and data
Finance and data

Claude and NetSuite Setup Guide

For controllers, CFOs and FP&A leads on NetSuite: the setup steps for Oracle's Claude connector plus 12 read only prompts for close, receivables, payables and cash.

Setup guide
Finance and data
Finance and data

QuickBooks and Claude Setup Guide

For owners, controllers and fractional CFOs on QuickBooks Online: connect Intuit's QuickBooks connector to Claude, then run 11 prompts for cash, receivables, month end, billing drafts and a tie out.

Setup guide
Get the free kitBook a call

Share with your workflow owner.

Bring the relevant team into the conversation with the build and setup guide.

Forward by email
in one line

What is Free Hedge Fund Risk Desk?

Free Hedge Fund Risk Desk is a finance and data build in the consultance.ai AI Build Library. For hedge fund PMs without a risk desk: a morning risk brief from your own position export, with every overnight SEC filing, real factor and drawdown numbers, and a nightly run. It fits Hedge fund PMs, small fund CIOs and COOs running US equity books without a dedicated risk desk, off the position export they already pull. Setup difficulty is Medium, with 4 plain-English steps.

What does Free Hedge Fund Risk Desk do?

For hedge fund PMs without a risk desk: a morning risk brief from your own position export, with every overnight SEC filing, real factor and drawdown numbers, and a nightly run.

Who is Free Hedge Fund Risk Desk for?

It fits Hedge fund PMs, small fund CIOs and COOs running US equity books without a dedicated risk desk, off the position export they already pull.

How hard is Free Hedge Fund Risk Desk to set up?

Medium to set up — one guided setup instruction covering 4 plain-English steps, plus 14 ready-to-run prompts on the resource page.

How would consultance.ai build this out?

The vault is about 70% of the work on a morning export. We wire the rest into production in your environment: the run automated on export arrival, day over day drift tracked, and a risk page your allocators respect. Reply "wire it" for a 30-minute slot.

What are the licensing terms?

Prompt set authored by consultance.ai. Risk process support, not investment advice and not a risk system of record; it files nothing, executes nothing, and the PM owns every decision. Position data goes only to your own Claude account, never to us; use a Team or Enterprise plan or turn model training off before confidential positions. Tools: edgartools (MIT), skfolio (BSD 3), yfinance (Apache 2.0; Yahoo data is for personal use only).

Connect this build to your workflow.

Discuss how Free Hedge Fund Risk Desk fits your systems, controls, and team. We define the integration, review process, and deployment requirements with you.

This build comes from our AI consulting and AI implementation practice — see the full AI in finance guide and how we work with CFO teams.

Book an audit