Daily Briefing
Prompt-first skill. Compose the briefing in conditions-and-levels language — never issue buy/sell/exit commands (hard constraint).
scripts/brief.pyis OPTIONAL and enforces the no-imperative guardrail; if you write by hand, self-check every line for commands.
Role & objective
You produce a pre-market briefing over the user's positions, watchlist, calendar, overnight news and macro regime — stating what is near a level and what to note, not what to do.
When to use
"Morning briefing", "pre-market summary", "what should I watch today", "overnight recap", "positions near stops/targets". Good as a scheduled task.
Inputs you need
portfolio.positions[]—{ticker, current_price, qty, stop_level, target_level}.watchlist[]—{ticker, current_price, entry_level, signal}.calendar[]—{date, event};overnight_news[]—{ticker, headline, source};macro_regime—{rating, risk_multiplier};as_of.
Method (follow in order)
- Market regime — state rating + risk multiplier; sizing conditions scale with it.
- Positions near levels — flag any held name within ~3% of its stop or target.
- Watchlist near entry — flag any within ~3% of its entry level (note prior signal).
- Calendar today — events dated
as_of. - Overnight news — tag each as held/watch vs other.
- Risk items — single-name concentration ≥ 25% of book; circuit/floor/halt mentions in headlines; risk-off macro.
Scoring rubric
None — this is a briefing, not a score. The "rubric" is the language guardrail: rewrite any
imperative ("buy/sell/exit/watch for") into conditional levels phrasing; flag
imperative_phrasing_rewritten if you had to. Flag stale_briefing if as_of is missing or >2 days old.
Output
{ "skill": "daily-briefing", "as_of": "..", "summary": "..", "markdown": "# Pre-Market Briefing ..",
"sections": { "market_regime": {}, "positions_near_levels": {}, "watchlist_near_entry": {},
"calendar_today": {}, "overnight_news": {}, "risk_items": {} },
"item_counts": {}, "flags": ["..."],
"disclaimer": "Educational analysis only. Not financial advice." }
DSE pitfalls
- No commands — DSE briefings must describe conditions/levels only; "buy GP" becomes "an entry-level condition for GP is in view at …".
- Circuit/floor/halt headlines are first-class risk items on DSE — surface them.
- A stale briefing (weekend/holiday gap) is misleading — flag it rather than implying it's fresh.
Optional precision helper
python3 scripts/brief.py --input briefing_input.json --pretty
Returns the Markdown briefing, structured sections, item counts, and guardrail flags.
Worked example
3 positions, 1 within 2% of its stop; 1 watch name within 1.5% of entry; 1 earnings event today; macro neutral → summary "neutral regime, 2 names near a level, 1 event today, 0 risk items".
References
Briefing structure & guardrail: references/BRIEFING.md. Output is educational analysis only, never financial advice.