Skip to content

Add PodSips API key + podcast search skill#106

Open
devin-ai-integration[bot] wants to merge 1 commit into
developfrom
devin/1782590538-podsips-integration
Open

Add PodSips API key + podcast search skill#106
devin-ai-integration[bot] wants to merge 1 commit into
developfrom
devin/1782590538-podsips-integration

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

Adds a new PODSIPS_API_KEY integration and a dynamic podsips_search skill for searching podcast transcripts via the PodSips API.

Part 1 — KeyStore (KeyStore.swift)

New Key.podsips + Service.podsips entry:

  • Stored in Keychain alongside other keys
  • Appears in Settings → Keys as "PodSips" with description linking to developer.podsips.com

Part 2 — host.getApiKey(alias) bridge (JSRuntime.swift)

Exposes a new synchronous bridge function so dynamic JS skills can read API keys from the Keychain:

// host.getApiKey("podsips") → reads KeyStore.shared.value(for: .podsips)
let getApiKey: @convention(block) (String) -> String? = { alias in
    return JSRuntime.resolveApiKey(alias: alias)
}

A static aliasToKey map resolves friendly names (lowercase) → KeyStore.Key. Also maps exa, openai, deepgram, etc. so any future dynamic skill can reuse it.

Part 3 — podsips_search skill (BundledSkillSeeds.swift)

Bundled seed → auto-written to Workspace/Skills/podsips_search/ on first launch. Behavior:

  1. host.getApiKey("podsips") — early-return with helpful error if missing
  2. GET https://api.podsips.com/api/v1/search?q={query} with Bearer auth
  3. Returns { summary, clips: [{ podcast, episode, speaker, timestamp, text, context }] }
  4. Handles 401/403 (bad key), 429 (rate limit), and network errors

How to test: Settings → Keys → PodSips → paste your key → ask Loop to search podcasts (e.g. "search podcasts about AI safety").

Link to Devin session: https://app.devin.ai/sessions/e0d9473e431540b5aa1ca2b90969afd6

- Add PODSIPS_API_KEY to KeyStore (Key enum, Service enum, display
  name, subtitle) so it appears in Settings → Keys
- Add host.getApiKey(alias) bridge to JSRuntime so dynamic JS skills
  can read API keys from the Keychain by friendly alias
- Add podsips_search as a bundled skill seed (Workspace/Skills/
  podsips_search/) that calls the PodSips /search endpoint with
  Bearer auth and returns structured clip results

Co-Authored-By: bot_apk <apk@cognition.ai>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author
Original prompt from API User

Repository: https://github.com/theashbhat/LoopHarness

We need to add a new API key integration and a corresponding on-device skill for the PodSips podcast transcript search API.

#``# Part 1: Add PodSips API Key to Settings → Keys

Loop already manages several API keys in Settings → Keys (OpenAI, Deepgram, ElevenLabs, Exa, Cursor, etc.). Add a new key entry for PodSips:

  • Key identifier: PODSIPS_API_KEY (friendly alias: podsips)
  • Display name: "PodSips"
  • Description: "Podcast transcript search API — get timestamped clips by topic"
  • Store it in the Keychain alongside the other keys
  • Expose it to the skill runtime so skills can access the value via host (e.g. host.getApiKey("podsips") or similar pattern — match however existing keys are exposed to the skill runtime)

#``# Part 2: Create the PodSips Podcast Search Skill

Create a new skill at Workspace/Skills/podsips_search/ that:

Name: podsips_search

Description: Search podcast transcripts by topic and get back timestamped clips with speaker names, episode metadata, and context. Powered by PodSips API.

Parameters:

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Natural-language topic or idea to search for across podcast transcripts (e.g. 'AI safety', 'founding lessons from Stripe', 'mental models for decision making')"
    },
    "limit": {
      "type": "integer",
      "description": "Max number of results to return. Default 5.",
      "default": 5
    }
  },
  "required": ["query"]
}

API Details (PodSips REST API):

  • Base URL: https://api.podsips.com/api/v1
  • Search endpoint: GET /search?q={query} — returns timestamped transcript chunks with speaker names, episode metadata
  • Series search: GET /series/search?q={query}
  • Episode details: GET /episodes/{id}
  • Full transcript: GET /transcript/{episode_id}
  • Auth: Bearer token via PODSIPS_API_KEY
  • Docs: https://developer.podsips.com/

Skill behavior:

  1. R... (989 chars truncated...)

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@vercel

vercel Bot commented Jun 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
loop-harness Ready Ready Preview, Comment Jun 27, 2026 8:04pm

@devin-ai-integration devin-ai-integration Bot requested a review from ashbhat June 27, 2026 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants