Ask Andrew ships a Markdown corpus for The Andrew Faris Podcast and gives AI coding agents a skill for answering questions with episode-level, timestamped sources. Installation builds only the local QMD index; it does not download video, audio, captions, or transcripts.
- Ships a catalog of every podcast video with its YouTube URL.
- Ships a readable Markdown document for each episode.
- Ships 90-second Markdown segments with episode metadata and timestamps.
- Registers those segments as a dedicated QMD collection.
- Installs an
ask-andrewskill for Codex and Claude Code. - Returns retrieved context with clickable YouTube timestamps so the agent can answer without inventing attribution.
- Syncs incrementally: reruns skip episodes already transcribed.
Requirements: macOS or Linux, Python 3.10+, and curl. The setup script
installs the package in an isolated virtual environment and installs QMD from
its official installer when QMD is not already available.
git clone https://github.com/poseljacob/ask-andrew.git
cd ask-andrew
./setup.shEnsure ~/.local/bin is on your PATH, then search directly:
ask-andrew search "How should I think about Meta attribution?"Or invoke the installed $ask-andrew skill in Codex or Claude Code and ask a
normal question:
What does Andrew recommend for evaluating creative performance?
ask-andrew sync [--limit N] [--jobs N] [--force]
ask-andrew catalog [--output-dir corpus]
ask-andrew audit-captions [--jobs N]
ask-andrew index
ask-andrew search "question" [--limit N] [--format markdown|json]
ask-andrew doctor
corpus/
├── catalog.json
├── caption-coverage.json
├── transcript-manifest.json
├── metadata/
│ └── VIDEO_ID.json
├── transcripts/
│ └── VIDEO_ID.md
└── segments/
└── VIDEO_ID/
├── 000000.md
├── 000090.md
└── ...
setup.sh configures the CLI to use the checked-out corpus/ directory.
index owns the QMD collection named ask-andrew; it replaces that collection
registration without running a global QMD update.
Pull the latest prebuilt corpus and re-index:
git pull
./setup.shEnd-user installation never downloads from YouTube. The maintainer-only
ask-andrew sync command rebuilds corpus source files for an authorized
release.
Maintainers can refresh non-transcript release metadata independently:
ask-andrew catalog --output-dir corpus
ask-andrew audit-captions --output-file corpus/caption-coverage.jsonThe caption audit resumes from its existing output. If YouTube throttles a large pass, retry only failed videos conservatively:
ask-andrew audit-captions --jobs 1 --delay 5The skill runs QMD BM25 search through the package CLI. Each result is enriched from the matching local segment:
{
"title": "Episode title",
"start_seconds": 540,
"context": "Retrieved transcript passage...",
"citation_url": "https://www.youtube.com/watch?v=VIDEO_ID&t=540s",
"transcript_source": "automatic_captions"
}The skill must paraphrase by default, distinguish Andrew's statements from its own synthesis, and cite material claims as:
[Episode title — 09:00](https://www.youtube.com/watch?v=VIDEO_ID&t=540s)python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/python -m unittest discover -s tests -vBundled-corpus smoke test:
.venv/bin/ask-andrew configure --data-dir "$PWD/corpus"
.venv/bin/ask-andrew index --data-dir "$PWD/corpus"
.venv/bin/ask-andrew search "wrong problem opportunity selection"This project is not affiliated with or endorsed by Andrew Faris, AJF Growth, or YouTube.
The transcript corpus is redistributed with permission from the rights holder. Copyright in the podcast-derived corpus remains with its respective owner and is not relicensed under the repository's MIT code license. No video or audio binaries are included. Verify important details against the linked episode because captions can contain errors.