01-projects/investing/plugin/skills/edgar-watch

SKILL

investing-edgar-watch

Foundational EDGAR muscle for the investing capability. Pulls capex from hyperscaler 10-Qs, summarizes direction (up/down/flat) per company and in aggregate, and writes a structured brief the thesis layer consumes as phase-marker anchor data.

Status: scaffold v0 (2026-05-17). The implementation (EDGAR HTTP client, XBRL parser, capex extraction) lands in a future build session. This file is the SOP shape future sessions execute against.

Why this skill exists

The AI-infra theses (memory, power, DC infra) all sit downstream of hyperscaler capex direction. If GOOGL/AMZN/MSFT/META capex inflects flat or down, the demand-side anchor for those theses is breaking — that's a phase-marker flip that should drive exit decisions, not a "we'll check next quarter" delay.

EDGAR is free, primary-source, and machine-readable via XBRL. There is no excuse for reading capex direction from a Bloomberg headline.

Inputs

If invoked before all Tier 1 filings exist for the named quarter, fail loudly with a list of who has not yet filed. Do not produce a partial brief.

Invocation

/investing:edgar-watch              # latest filed quarter, all Tier 1
/investing:edgar-watch 2026-Q1      # specific quarter
/investing:edgar-watch 2026-Q1 +t2  # include Tier 2 (ORCL, AAPL)

Cron schedule

Run 8 weeks after quarter end, by which time all hyperscalers have filed their 10-Q:

Wire via /schedule skill when implementation lands.

Target companies

Tier 1 (hyperscalers, always included):

Company Ticker CIK
Alphabet GOOGL 0001652044
Amazon AMZN 0001018724
Microsoft MSFT 0000789019
Meta META 0001326801

Tier 2 (cloud-adjacent capex, opt-in via +t2):

Company Ticker CIK
Oracle ORCL 0001341439
Apple AAPL 0000320193

Data source

SEC EDGAR free API. No auth required — just a User-Agent header per SEC rules.

SEC rules (load-bearing):

Process

Step 1 — Discover new filings

For each target CIK, fetch the submissions index and filter for form == "10-Q" filings dated after the last run. State file at ~/.claude/state/edgar-watch-last-run.json tracks per-CIK most-recent-accession.

If the named quarter is missing for any Tier 1 company, fail with {company} has not yet filed 10-Q for {quarter}. Do not partial-fill.

Step 2 — Extract capex from the cash flow statement

Capex lives in the cash-flow statement as "Purchases of property and equipment" (or company-specific variants). Pull via XBRL companyfacts using these tags in priority order:

  1. us-gaap:PaymentsToAcquirePropertyPlantAndEquipment — standard GAAP tag, covers GOOGL/AMZN/MSFT/META reliably
  2. us-gaap:PaymentsToAcquireProductiveAssets — fallback
  3. Company-specific extension tags — last resort, requires per-company override map

Extract the value for the quarter's reporting period (compare start/end dates against quarter boundaries). Always pull the as-reported number — restatements are noted separately, not silently overwritten.

Step 3 — Capture management commentary on capex guidance

The 10-Q MD&A section contains forward-looking capex language. The companyfacts XBRL feed doesn't expose this — fetch the filing HTML and grep for capex-related sentences.

Constraint: quote-pulls are ≤15 words each, verbatim, in quotes. Do NOT paraphrase guidance. If a company gives a number ("we expect ~$80B capex in fiscal 2026"), pull that sentence exactly.

If MSFT or another company discloses AI-specific capex breakouts (e.g. "AI infrastructure"), capture the line item separately in the brief.

Step 4 — Compute deltas

Per company:

Aggregate across Tier 1: sum capex this quarter vs sum prior quarter vs sum YoY → aggregate direction.

Step 5 — Write the quarterly pulse brief

File at ~/rdco-vault/01-projects/investing/anchors/hyperscaler-capex/<YYYY-Q>-quarterly-pulse.md.

Frontmatter:

---
date: YYYY-MM-DD
type: investing-anchor-pulse
anchor: hyperscaler-capex
quarter: YYYY-QN
companies_tier1: [GOOGL, AMZN, MSFT, META]
companies_tier2: []
aggregate_direction: UP|DOWN|FLAT
source: sec-edgar-10-q
tags: [investing, anchor, hyperscaler-capex, <quarter>]
---

Body sections (required):

  1. ## Aggregate read — one paragraph: aggregate direction, total capex this quarter, vs prior quarter, vs YoY. Lead with the verdict.
  2. ## Per-company table — markdown table: | Company | This Q ($B) | Prior Q ($B) | QoQ % | YoY Q ($B) | YoY % | Direction |
  3. ## Guidance quote-pulls — per company, ≤15-word verbatim quotes from the 10-Q MD&A on forward capex.
  4. ## AI-specific breakouts — capture any company that separately discloses AI infra capex. Skip the section if no company does.
  5. ## Thesis cross-reference — which active investing theses (in ~/rdco-vault/01-projects/investing/theses/) depend on this anchor, and whether this quarter's read confirms or breaks the demand-side argument. Match by tag overlap (memory, power, dc-infra, ai-infra).
  6. ## Restatements / amendments — note any 10-Q/A amendments that changed prior-period capex.

Step 6 — Return

One-line summary:

hyperscaler-capex <YYYY-QN> | aggregate <UP|DOWN|FLAT> | <X%> QoQ | <Y%> YoY | brief: <path>

Edge cases

Companion script (stub interface — implement in future session)

Path: ~/.claude/scripts/edgar-fetch.py

Sketch interface (do NOT implement tonight):

# edgar-fetch.py — SEC EDGAR client + XBRL capex extractor

USER_AGENT = "Ray Data Co edgar-watch ben@raydata.co"
RATE_LIMIT_MS = 100  # spacing between requests

def list_filings(cik: str, form: str = "10-Q") -> list[dict]:
    """Fetch submissions index, return filings matching form."""

def get_company_facts(cik: str) -> dict:
    """Fetch full XBRL companyfacts payload."""

def extract_capex(facts: dict, period_start: str, period_end: str) -> dict:
    """Pull capex line item for the named period.
    Tries GAAP tags in priority order, then company-specific overrides.
    Returns {value, tag_used, as_reported_date}."""

def fetch_filing_html(accession: str) -> str:
    """Pull the 10-Q HTML for MD&A guidance extraction."""

# CLI:
#   edgar-fetch.py filings <CIK>
#   edgar-fetch.py capex <CIK> --period 2026-Q1
#   edgar-fetch.py guidance <CIK> --accession <accession>

Dependencies

Install into ~/.claude/scripts/edgar-venv/ when the implementation lands:

No paid feeds. No API keys. No 1Password entries required (EDGAR is unauthenticated).

Caveats (load-bearing — read every time)

Related

Changelog