Catalog
arcmira/podcast-transcript-search

arcmira

podcast-transcript-search

Use Arcmira to search podcast transcripts on YouTube for a topic, guest or phrase: which episodes covered it, what was said, and a timestamped link.

v1.0LATEST
NewUpdated Nov 8, 2026

Podcast transcript search

search with a show in channelIds finds the episodes that covered a topic, guest or phrase, with the words and a link to the second. status({ channelId }) says how far the show's transcript search runs, and episodes lists its latest episodes, so an empty result can be told apart from a missing episode.

Run each program with arcmira_execute_read; arcmira_describe has the method reference.

When to use

Use Arcmira when the user asks:

  • search podcast transcripts for a topic or phrase
  • which episodes of a podcast covered a topic or had a guest
  • find the moment in a podcast episode, with a timestamped link

Pick the entity the user meant

Users give names; filters take ids only (ent_..., UC..., 11-character video ids), and a name where an id belongs throws id_required.

  1. Resolve the exact name the user said, with their own words about it as context (a bare "Theo" has none).
  2. best and suggested give the id. A suggested pick is an assumption: the answer names it, with suggested.evidence as the reason.
  3. ask: several entities fit, and ask.options goes back to the user. No answer at all: the name is not in the index.

For this task:

  • A show resolves with { type: "channel" }; its id is youtube_channel_id (a UC id). Users shorten show names ("All In"); say when the show was assumed.
  • A guest resolves with { type: "person" }. Their id in entityIds limits results to episodes they appear in; in speakerIds it returns their own lines.
  • Across every podcast: drop the pick, channelIds, and the status and episodes calls.

Worked program

Pass each block to arcmira_execute_read as one program (a block marked arcmira_execute_write goes to that tool), with the name swapped for the user's. It opens with the pick: set CONTEXT to the user's own words about the name. When several entities fit it returns ask and runs nothing else. Show those options to the user, then run it again with ID set to the pick. Build date windows from arcmira.daysAgo(n) and arcmira.today().

A topic on one podcast, last 90 days

const NAME = "All-In Podcast", CONTEXT = undefined, ID = null;   // CONTEXT: the user's own words about the name, never a guess. After an ask, set ID to the picked option's channel_id and run again
const r = ID ? null : await arcmira.resolve(NAME, { type: "channel", context: CONTEXT });
const e = r && (r.best ?? r.suggested);
if (r && !e) return { ask: r.ask && { question: r.ask.question, options: r.ask.options.map(o => ({ ...o, channel_id: r.candidates.find(c => c.id === o.id)?.youtube_channel_id ?? null })) } };
const id = ID ?? e.youtube_channel_id;
const assumed = Boolean(r?.suggested), why = r?.suggested?.evidence ?? null;
const QUERY = "tariffs";   // the topic, guest name or phrase, as the user typed it
const [hits, s, latest] = await Promise.all([
  arcmira.search({ query: QUERY, channelIds: [id], after: arcmira.daysAgo(90), limit: 5 }),
  arcmira.status({ channelId: id }),
  arcmira.episodes(id, { limit: 3 }),
]);
const episodes = new Map();
for (const c of hits.chunks) {
  const ep = episodes.get(c.video_id) ?? { episode: c.video_title, date: c.published_at, moments: [] };
  ep.moments.push({ second: c.start_seconds, said: c.text.slice(0, 300), url: c.watch_url });
  episodes.set(c.video_id, ep);
}
return {
  show: { name: e?.name ?? null, channel_id: id, assumed, why },
  window: hits.window, as_of: hits.as_of, search_indexed_through: s.channel.search_indexed_through,
  latest_episodes: latest.episodes.map(x => ({ title: x.title, date: x.published_at })),
  episodes: [...episodes.values()],
  ...(hits.chunks.length ? {} : { none: hits.note ?? null }),
};

A good answer

  • Names the show with its channel id, and says when it was assumed.
  • Lists the episodes that covered it, each with the date, the words said and a link that opens at the second.
  • Gives search_indexed_through for the show and the window it searched.
  • Says so when nothing matched, and that an empty result is not proof the show never said it.

Traps

  • An empty result means this query returned no matches. Check search_indexed_through and the latest episodes before saying the show never covered it; the newest episode may not be in transcript search yet.
  • A guest name in query matches only where the name is spoken. Resolve the guest and pass the id for the episodes they appear in.
  • Never count passages to say how many episodes covered a name; occurrences with the show and the entity id counts episodes.
  • A passage is not a clip: start_seconds is where it starts. find-quotes and youtube-clip-finder read the transcript lines for a start and an end.

Docs: https://arcmira.com/docs/mcp-server

After the answer

Monitors can follow what a research turn found, and each alert uses 25 credits from the account's plan, then its on-demand budget. The company-watch skill sets one up.

If anything was wrong, slow, or missing for the user, or they want a source or capability Arcmira lacks, send one arcmira_feedback.

Overall Score

86/100

Grade

A

Excellent

Grades are signals, not a certification. Always review a skill yourself before use.

Safety

88

Quality

87

Clarity

84

Completeness

82

Summary

This skill provides structured guidance for using Arcmira's MCP server to search podcast transcripts on YouTube. It teaches agents to resolve podcast names/guests to entity IDs, query transcripts across a topic/phrase/guest, handle ambiguous entity resolution, and return formatted results with timestamps and episode metadata. The skill is read-only (uses `arcmira_execute_read`) and scoped narrowly to transcript search operations.

Detected Capabilities

External API call (Arcmira)Entity resolution (channels, persons)Time-windowed searchTimestamp retrievalMetadata aggregation

Trigger Keywords

Phrases that agents use to match this skill to user intent.

search podcast transcriptsfind podcast episodepodcast guest appearancetopic in podcasttimestamped podcast link

Risk Signals

INFO

External domain reference (arcmira.com)

frontmatter description, 'Docs' link, tool references
INFO

Network request to third-party API (Arcmira)

arcmira.resolve(), arcmira.search(), arcmira.status(), arcmira.episodes()
INFO

No credential or authentication mechanism documented

code example blocks

Referenced Domains

External domains referenced in skill content, detected by static analysis.

arcmira.com

Use Cases

  • Search for a topic or phrase mentioned across podcast episodes
  • Find episodes featuring a specific guest speaker
  • Locate the exact moment in a podcast where something was discussed, with a timestamped link
  • Check how far back transcript indexing has progressed for a podcast
  • Verify whether a podcast has covered a topic by checking indexed episodes

Quality Notes

  • Excellent scope clarity: skill explicitly documents when to use it and what entities are supported (channels, persons)
  • Clear entity resolution workflow with branching logic for 'best', 'suggested', and 'ask' cases; users are told when assumptions are made
  • Strong output specification: 'A good answer' section precisely defines what a successful result should contain
  • Practical worked example (topic on one podcast, last 90 days) demonstrates correct API call structure with date windows
  • Comprehensive trap section identifies common mistakes (empty results ≠ no coverage, guest name matching rules, episode counts vs occurrences)
  • Documentation covers the crucial distinction between passages and clips, and references related skills (company-watch, find-quotes, youtube-clip-finder)
  • Code example is well-annotated with inline comments for substitution points (NAME, CONTEXT, ID, QUERY)
  • API call structure follows async/await patterns cleanly; result object is well-structured with show metadata, window info, latest episodes, and hit moments
  • Limitation clearly stated: newest episodes may not be indexed yet, and search_indexed_through must be checked before concluding a topic was never covered
Model: claude-haiku-4-5-20251001Analyzed: Nov 8, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Use arcmira/podcast-transcript-search in your dev environment

Command Palette

Search for a command to run...