SAI-podcast-rag-index
Atomic SAI skill. Index a directory of transcript .md files (YAML frontmatter, one per episode) into an existing ChromaDB RAG store by delegating to a rag-index-updater-style index.py. Pure mechanism — no operator paths or collection baked in; the caller supplies indexer_scripts / manifest_path directly or via a private config_path. Hash-skips unchanged files. Use whenever you need to index transcripts, add transcripts to a RAG, or embed episodes for semantic lookup.
- License 许可
- Apache-2.0
- 最近更新
- 2026-07-17
- Stars
- ★ 30
- Forks
- 14
01 前言 Front Matter
- name
- SAI-podcast-rag-index
- description
- Atomic SAI skill. Index a directory of transcript .md files (YAML frontmatter, one per episode) into an existing ChromaDB RAG store by delegating to a rag-index-updater-style index.py. Pure mechanism — no operator paths or collection baked in; the caller supplies indexer_scripts / manifest_path directly or via a private config_path. Hash-skips unchanged files. Use whenever you need to index transcripts, add transcripts to a RAG, or embed episodes for semantic lookup.
02 资源文件 7
- 其他canaries.jsonl325 B
- 其他edge_cases.jsonl710 B
- 其他profiles/claude_code/canaries.jsonl633 B
- 参考文档README.md2.1 KB
- 脚本runner.py7.1 KB
- 参考文档skill.yaml2.6 KB
- 其他workflow_regression.jsonl634 B
03 SKILL.md 正文
Trigger manifest — podcast-rag-index (atomic, autonomous)
Code: skills/podcast-rag-index/
Manifest: skill.yaml (3-tier cascade)
Entry point: runner.py → run(inputs)
Cascade plan
1. locate_indexer (rules) → resolve indexer_scripts (input or config_path); fail-closed if unset
2. scan_inputs (rules) → diff input_dir vs manifest (new+changed only)
3. run_indexer (rules) → shell to index.py → ChromaDB upsert
Invocation
.venv/bin/python3.12 \
skills/podcast-rag-index/runner.py run \
--inputs-json '{
"input_dir": "~/Media/transcripts/<show-slug>",
"config_path": "<your-private-overlay>/config/podcast_ingest.yaml"
}'
config_path supplies operator values (indexer_scripts, manifest_path) from
the private side. Or pass indexer_scripts directly. "force": true re-indexes
even if hash unchanged. Invoke by absolute path (hyphenated folder name).
Why a thin wrapper
The operator's index.py owns embed + chunk + upsert + the ChromaDB collection.
This skill only scopes the scan to one directory and reuses that indexer — one
source of truth, no second codepath to drift.
Composes with
- Upstream:
SAI-local-transcribe - Companion: a general-purpose
rag-index-updater(full-tree variant) - Downstream consumer: a
rag-content-lookup(semantic search over results)
04 同仓库更多 Skills
sample-glob
暂无简介
sample-alpha
Synthetic skill for sai-overlay deploy tests. Not a real skill.
sample-incoming
Fixture for PR 7 (scaffold-claude-code-skill). Simulates a Claude-Code skill discovered in the plugin-install path with no skill.yaml manifest. The scaffold subcommand reads this dir and emits a starter skill.yaml v2 with a single claude_code profile.
SAI-podcast-download
Atomic SAI skill. Download podcast episode audio from an RSS feed or a Spotify show URL (resolved to RSS via the iTunes Search API — Spotify itself blocks audio downloads). Resume-safe, retry-aware. Emits a manifest.json that downstream skills (local-transcribe, podcast-rag-index) consume. Use whenever you need to download a podcast, grab episodes of a show, pull audio for a Spotify show URL, or any workflow needs raw podcast MP3s as input.
SAI-local-transcribe
Atomic SAI skill. Fully-local audio transcription via Whisper (mlx-whisper on Apple Silicon, faster-whisper fallback elsewhere). No audio leaves the machine; no API keys. Accepts a single audio file, a directory, or a podcast-download manifest.json. Writes one .md per input with YAML frontmatter compatible with a rag-index-updater pipeline. Use whenever you need to transcribe audio, run whisper on a file, transcribe all episodes in a folder, or any workflow needs text from audio.