src/skills/write-memo/SKILL.md
Produces a buyside-quality investment memo as a self-contained HTML file. The memo is opinionated and falsifiable — it leads with a variant view and steelmans the bear case. The output is the deliverable; the chat response is just a header summary plus the file path.
Copy and track progress:
Investment Memo Progress:
- [ ] Step 1: Frame the trade (direction, horizon, variant view)
- [ ] Step 2: Gather data (financials, market, filings)
- [ ] Step 3: Build Bear / Base / Bull scenarios
- [ ] Step 4: Optional DCF anchor for base case
- [ ] Step 5: Draft memo content (fill all slots)
- [ ] Step 6: Self-critique pass
- [ ] Step 7: Render HTML to .dexter/memos/
- [ ] Step 8: Report header summary + file path
Confirm or ask for the following before drafting:
If the user does not provide a variant view: do not ask repeatedly. Gather data in Step 2 first, then derive a candidate variant view from where your model meaningfully diverges from consensus (e.g., "our '27 EPS is $X vs consensus $Y because [driver]"). Present it as a draft and let the analyst accept, refine, or replace before you proceed to Step 5.
Issue these tool calls in parallel:
Call get_financials:
"[TICKER] annual income statements last 5 years" — revenue, operating income, net income, EPS, margins"[TICKER] annual cash flow statements last 5 years" — operating CF, capex, FCF"[TICKER] latest balance sheet" — debt, cash, shares outstanding"[TICKER] financial metrics snapshot" — P/E, EV, ROIC, FCF growth, debt/equity, margins"[TICKER] segmented financials" — segment revenue, segment margins (if multi-segment)"[TICKER] earnings history last 8 quarters" — beats/misses, surprises"[TICKER] company facts" — sector, industry, market cap"[TICKER] KPI guidance" and "[TICKER] KPI metrics" — management-provided KPIs and guidanceCall get_market_data:
"[TICKER] price snapshot" — current price, 52-week range, market cap"[TICKER] historical prices last 12 months" — for return / multiple compression context"[TICKER] insider trades last 6 months" — recent buys/sells, dollar amounts"[TICKER] institutional holdings" — top holders, recent additions / reductions"[TICKER] news last 30 days" — recent material eventsCall read_filings:
Call memory_search with the ticker — surfaces any prior notes, prior memos, or user-provided constraints (e.g., risk tolerance, sector exposure already in book).
Call x_search for recent material chatter on the ticker. Skip if the thesis is fundamental and not catalyst-driven this week.
Construct Bear / Base / Bull scenarios. Each scenario is driver-based, not a single number pulled from the air.
For each scenario specify:
Then compute:
Asymmetry check: if upside/downside < 2x, flag this prominently. A weak-asymmetry setup is a coin flip, not a trade. Either revise the scenarios honestly, or note the weak asymmetry in the memo (do not hide it).
For base case, optionally invoke the dcf-valuation skill via the skill tool to produce an intrinsic value anchor. Use it as a cross-check against your base-case price target, not as a replacement.
Read the template and style guide:
Fill every slot. Slots are listed in the template — do not skip any. Slot-specific guidance:
{{variant_view}}Three sentences max. Lead with the divergence from consensus: what we see, why we think it, why the market hasn't priced it. If the user did not provide one, this is where your derived candidate goes.
{{thesis_bullets}}3-5 bullets, each in this format:
[Claim] — [Evidence with a specific number]. Wrong if [observable falsifier].
Example:
Ad-tier reaches 15% of subs by '27 — Q1 disclosed 40M ad-tier subs (+85% YoY) on a 270M base; trajectory implies 15% mix at constant adds. Wrong if ad-tier ARPU compresses below $8 due to inventory glut.
Each bullet must be falsifiable. No "great management", "strong moat", "wide TAM" without a specific operational metric behind it.
{{business_snapshot}}4-5 lines max. What they sell, how they make money, segment mix, unit economics that matter for the thesis. No founding-year boilerplate. Pull verbatim from the 10-K Item 1 where it tightens the language.
{{whats_priced_in}}Current multiple, implied growth or margin assumption embedded in that multiple, sellside consensus numbers (revenue, EPS for FY+1 and FY+2). Then one sentence on where your model diverges and by how much.
{{scenario_table}}Render as an HTML table. Columns: Bear / Base / Bull. Rows: Probability, Revenue growth (FY27), EBIT margin (FY27), Exit multiple, Price target, Return. Color returns: positive class="pos", negative class="neg".
{{bull_narrative}}, {{base_narrative}}, {{bear_narrative}}One paragraph each (3-5 sentences). Each is a coherent world, not a list of factors:
{{catalysts_table}}Table with columns: Event, Date / Quarter, Expected Impact. 3-5 entries. Dates should be specific (Q3 '26, Aug '26 earnings, Investor Day Nov '26).
{{risks_table}}Table with columns: Risk, Mitigant, Tripwire. The tripwire is the observable data point that would invalidate the thesis (e.g., "Q3 ad-tier ARPU prints below $8", "top customer renewal pushed past Q4"). Tripwires distinguish a hedge fund memo from a sellside report.
{{position_management}}Three short lines: suggested sizing (% NAV) anchored to conviction × asymmetry; entry price (current or limit); stop level or scale-out trigger.
{{monitoring_kpis}}3-5 KPIs to track quarterly. These are the metrics that confirm or kill the thesis — not generic ones (revenue growth, EPS) but specific ones tied to your variant view.
Before rendering, verify every check. If any fail, revise the relevant section before continuing.
memo-template.html via read_file{{slot}} placeholder with the content you drafted{{date}} to today's date in YYYY-MM-DD format{{analyst}} from memory if known, otherwise blank.dexter/memos/[TICKER]_[DIRECTION]_[YYYY-MM-DD].html via write_file
LONG or SHORT (uppercase).dexter/memos/NFLX_LONG_2026-05-24.html.md source file if the user explicitly requested oneThe path uses forward slashes. The write_file tool will create the .dexter/memos/ directory if it does not exist.
Final chat response should be exactly this format and nothing more:
[TICKER] · [LONG/SHORT] · Target $X (+Y% / -Y%) · Asymmetry [N.Nx] · [Conviction]
Memo saved to .dexter/memos/[FILENAME].html
Open with: open .dexter/memos/[FILENAME].html
Do not paste the full memo content into the chat. The file is the deliverable. The chat output is a scannable header.
.md file alongside unless explicitly requested