.claude/skills/ingest/SKILL.md
Single-source ingestion pipeline: process one source (interview transcript, podcast, article, video, filing, screenshot set) that mentions many entities and data points into the vault. Handles source acquisition (YouTube transcription, article fetch, screenshot reading), full entity/data point enumeration, vault survey, image routing by concept, note creation/expansion, and daily note logging. Use whenever the user provides a URL, transcript, set of screenshots, or other single source for vault processing. Triggers on /ingest, or when the user pastes a YouTube URL, article link, or says 'ingest this', 'process this interview', 'add this to the vault'.
npx skillsauth add kleinster2/financial-charts ingestInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Process one source into the vault. Usage: /ingest URL or /ingest (then provide source in chat).
CLAUDE.md defines note structure, formatting, and hard gates. docs/research-workflow.md defines source separation and two-track verification. docs/vault-note-guide.md defines note voice and update discipline. This skill sequences the ingestion workflow and codifies rules that only emerge during single-source processing.
Detect source type and acquire content:
| Source type | Acquisition |
|---|---|
| YouTube URL | python scripts/transcribe_youtube.py URL --save /tmp/transcript.txt (--language pt for Portuguese) |
| Screenshots/images | Read all images via Read tool |
| Article URL | WebFetch; if 403 → Chrome MCP (get_page_text); if interactive → visual scrolling |
| SEC filing | python scripts/parse_sec_filing.py TICKER (never WebFetch on sec.gov) |
| User-pasted text | Use directly |
Entity sweep at triage. Before deciding whether content is worth ingesting, check ALL named entities — headline actors, secondary firms, origin firms, counterparties — for vault presence. Report which have notes and which don't. A story may not deserve ingestion, but a missing vault note for a mentioned entity is a gap worth surfacing regardless.
Present before analyzing. The user may not have read the source. Before any vault work, present:
After presenting the summary, proceed immediately to Phase 1. Always assume full sweep — process every entity, every data point, every angle. Do not ask "what's the scope?" or "which slice?" — the answer is always "all."
Process the entire source. Every paragraph, every aside, every throwaway detail.
Enumerate three lists:
Entities — every actor, concept, product, event, country, person, firm mentioned. Include secondary mentions ("they're competing with X" counts). Absence of evidence is not evidence of absence.
Data points — every price, AUM figure, percentile, growth rate, date, deal term, production volume, headcount. Exact figures with attribution.
Images/charts — for each screenshot or chart provided, identify which CONCEPT it depicts, not which source it came from. A yield percentile chart is a "CLO yield data" chart, not a "Rieder interview chart."
Present enumeration to user as a table before vault work begins.
Classify every data point from Phase 1 before writing anything into the vault:
Verifiable facts — numbers, dates, policy decisions, market data that can be independently checked:
For each verifiable fact: research it. If confirmed, write with attribution to both the source speaker and the confirming data. If contradicted, flag the discrepancy in the note — "Rieder cited X; [source] shows Y." If unverifiable (no accessible source), write as a claim attributed to the speaker, not as established fact.
Sourced opinions — views, predictions, frameworks, interpretive claims:
For each opinion: attribute to the speaker. Note whether it aligns with or contradicts existing vault views (check the relevant concept note for other voices). If contrarian, say so. If consensus, say so. Don't present one person's view as established truth.
The gate: Do not write unverified factual claims as facts. The vault's value depends on accuracy — a wrong number written confidently is worse than a gap.
For each enumerated entity:
python scripts/check_before_create.py "Name" for new entitiesReport a survey table:
| Entity | Status | What's new from this source | |---|---|---| | [[Entity A]] | Full note | New AUM figure, quote | | [[Entity B]] | Stub | Full expansion warranted | | [[Entity C]] | Missing | Create — mentioned 3x with hard data |
Every row gets processed. No silent skips.
Charts follow concepts, not sources. For each image:
investing/attachments/ with a descriptive name tied to the concept (e.g., clo-yield-percentile-mar2026.png), not the sourceNew tickers:
python scripts/add_ticker.py TICKER/api/chart/lw?tickers=TICKER&start=...&primary=TICKERwc -c — under 1KB = error JSON, not PNGProcess the full survey table:
Existing notes — expand:
docs/vault-note-guide.md)docs/research-workflow.mdNew notes — create:
python scripts/check_before_create.py "Name"python scripts/check_note_compliance.py <file> on actor notesStubs for dead links: frontmatter + one-liner + Quick stats + Related
3+ actors touched by one event → create Event note in Events/. Actor notes carry short summary + wikilink.
Update investing/Daily/YYYY-MM-DD.md. Run date to confirm current date.
Placement rule: Entries go in the ## Notes created/expanded section — BEFORE any ## News ingestion, ## Edit log, or other ## headers. The section boundary is the next ## header (two hashes + space), not --- horizontal rules.
Format:
### [Source title] ([source type], [date])
- **[[Entity A]]** — one-line summary of what was added/changed
- **[[Entity B]]** — one-line summary
Every entity touched must appear here — the daily note hook validates this.
Cross-vault gate: After completing updates, check sibling vaults per docs/cross-vault-rules.md. Flag to user.
These rules are specific to single-source ingestion. General vault rules live in CLAUDE.md and docs/.
## Notes created/expanded section, before ## News ingestion or ## Edit logdevelopment
Subscribe to change notifications on a Google Drive file or folder.
development
Export Google Contacts directory to a Google Sheets spreadsheet.
development
Share a Google Drive folder and all its contents with a list of collaborators.
development
Share Google Drive files with all attendees of a Google Calendar event.