with one click
earnings-orchestrator
// Predict stock direction post 8-K earnings & refine using 10-Q/10-K outcomes
// Predict stock direction post 8-K earnings & refine using 10-Q/10-K outcomes
Predict stock direction after an 8-K earnings release from a prebuilt earnings context bundle
Post-event causal attribution — explains why a stock moved after 8-K earnings, compares against prediction, writes reusable lessons for future predictions. Production invocation via SDK embed (main session), not fork.
Core Neo4j schema reference with all labels, relationships, data types, and indexes. Use when exploring database structure, checking field types, or understanding the financial knowledge graph schema.
V1105_LONGDESC_START_MARKER. This skill tests v2.1.105's skill-description cap raise from 250 to 1536 characters. If this description appears truncated in the skill listing system-reminder at around character 250, the cap was not raised; if it appears truncated at around 1536, the cap was raised correctly per changelog. The test sentinel markers are placed at specific character offsets: V1105_OFFSET_100 is at char 100 approximately, V1105_OFFSET_300 is at char 300 approximately (old cap would truncate this), V1105_OFFSET_700 is at char 700 approximately, V1105_OFFSET_1000 is at char 1000, V1105_OFFSET_1200 is at char 1200, V1105_OFFSET_1400 is at char 1400, and V1105_END_MARKER is the last visible sentinel. This description also contains deliberately redundant filler to reach the target length without substantive content since the purpose is only to verify truncation behavior rather than to provide meaningful guidance. filler filler filler filler filler filler filler filler filler filler filler filler filler
Child skill for v2.1.107 nesting retest — writes marker and returns
v2.1.107 retest: parent skill invokes child skill (Skill→Skill nesting, sequential workflow continuation)
| name | earnings-orchestrator |
| description | Predict stock direction post 8-K earnings & refine using 10-Q/10-K outcomes |
| model | opus |
| permissionMode | dontAsk |
| hooks | {"PostToolUse":[{"matcher":"Bash","hooks":[{"type":"command","command":"python3 $CLAUDE_PROJECT_DIR/.claude/hooks/build_orchestrator_event_json.py"}]}]} |
| allowed-tools | ["Task","TaskCreate","TaskList","TaskGet","TaskUpdate","Skill","Bash","Write","Read","Edit","Glob","Grep","EnterPlanMode","ExitPlanMode"] |
| disallowedTools | ["mcp__neo4j-cypher__write_neo4j_cypher"] |
| skills | ["earnings-prediction","earnings-attribution"] |
Goal: Predict stock direction post 8-K earnings release & refine predictions methodology using 10-Q/10-K filing, news & analysis, transcripts, presentations, web search and actual return outcomes.
Two phases per quarter:
Invoke when user asks about:
Run discovery script:
get_quarterly_filings {TICKER}
Output columns: accession_8k|filed_8k|market_session_8k|accession_10q|filed_10q|market_session_10q|form_type|fiscal_year|fiscal_quarter|lag
Events manifest is built automatically at:
earnings-analysis/Companies/{TICKER}/events/event.json
Each row becomes:
quarter_label: {fiscal_quarter}_FY{fiscal_year}accession_no: accession_8kfiling_datetime: filed_8kRead earnings-analysis/Companies/{TICKER}/events/event.json and process events in the order listed.
Filter logic (minimal):
for event in event.json.events:
q = event.quarter_label
result = earnings-analysis/Companies/{TICKER}/events/{q}/prediction/result.json
if result exists: skip
else: enqueue event for prediction
Output: list of queued events (at least quarter_label, accession_8k, filed_8k, market_session_8k).
Placeholder (later): create deterministic task graph / resume-safe plan per event.
For each queued event (same order as event.json):
Ensure earnings-analysis/Companies/{TICKER}/events/{quarter_label}/prediction/ exists.
If prediction/context.json is missing, write it ONCE (do not overwrite if it exists):
Context file (written only if missing):
{
"schema_version": 1,
"ticker": "{TICKER}",
"quarter_label": "{quarter_label}",
"accession_8k": "{accession_8k}",
"filed_8k": "{filed_8k}",
"market_session_8k": "{market_session_8k}",
"pit_datetime": "{filed_8k}"
}
Skill: earnings-prediction
Args (minimal): ticker={TICKER} quarter_label={quarter_label} accession_no={accession_8k} filing_datetime={filed_8k}
Completion signal: earnings-analysis/Companies/{TICKER}/events/{quarter_label}/prediction/result.json exists.
Placeholder (later): poll tasks / spawn downstream work when unblocked.
Placeholder (later): validate all per-event outputs are present + schema-valid before marking complete.
Placeholder (later): build cumulative CSVs / indices from per-event outputs.
Echo ORCHESTRATOR_COMPLETE {TICKER}.
Canonical discovery script:
.claude/skills/earnings-orchestrator/scripts/get_quarterly_filings.py - Get 8-K earnings events with matched 10-Q/10-K filingsExposed on PATH as:
get_quarterly_filingspython3 $CLAUDE_PROJECT_DIR/.claude/hooks/build_orchestrator_event_json.py → rebuilds events/event.json after discoverySee .claude/filters/rules.json for:
Events manifest: earnings-analysis/Companies/{TICKER}/events/event.json (rebuilt every run)
Context bundle (shared by predictor + learner): earnings-analysis/Companies/{TICKER}/events/{quarter_label}/context_bundle.{json,txt} (promoted to quarter root per obsidian_thinking.md 2026-04-17)
Prediction: earnings-analysis/Companies/{TICKER}/events/{quarter_label}/prediction/result.json
Learning (renamed from attribution/ per obsidian_thinking.md 2026-04-17): earnings-analysis/Companies/{TICKER}/events/{quarter_label}/learning/result.json
prediction/result.json exists, prediction is skipped.context_bundle.json (quarter root) is written only if missing (never overwritten by orchestrator).learning/result.json exists and is valid, derived-write recovery runs (ticker/global lesson appends) then learning analysis is skipped. If the existing file is invalid or corrupt, it is deleted and the learner re-runs.Version 1.0 | 2026-02-04 | Initial structured format