Claude Code Plugins

Community-maintained marketplace

Feedback

Search WaveCap transcriptions with text queries and filters. Use when the user wants to find specific transcriptions, search for keywords, or query transcription history.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name wavecap-search
description Search WaveCap transcriptions with text queries and filters. Use when the user wants to find specific transcriptions, search for keywords, or query transcription history.

WaveCap Search Skill

Use this skill to search through transcription history in WaveCap.

Search Transcriptions for a Stream

Basic Search

curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?search=fire&limit=20" | jq

Search Parameters

Parameter Type Default Description
search string - Text to search for in transcriptions
limit int 100 Maximum results to return
before ISO8601 - Get transcriptions before this timestamp
after ISO8601 - Get transcriptions after this timestamp
order string desc Sort order: asc or desc

Search with Time Range

# Search in the last hour
AFTER=$(date -u -v-1H +"%Y-%m-%dT%H:%M:%SZ")
curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?search=emergency&after=$AFTER" | jq
# Search within a specific date range
curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?search=incident&after=2025-01-15T00:00:00Z&before=2025-01-16T00:00:00Z" | jq

Pagination

The response includes pagination hints:

{
  "transcriptions": [...],
  "hasMoreBefore": true,
  "hasMoreAfter": false
}

To get the next page:

# Get the timestamp of the last result, then use it as 'before'
LAST_TIMESTAMP="2025-01-15T12:30:00Z"
curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?before=$LAST_TIMESTAMP&limit=20" | jq

Search Across All Streams

To search across all streams, first get the stream list, then query each:

# Get all stream IDs
STREAMS=$(curl -s "http://localhost:8000/api/streams?includeTranscriptions=false" | jq -r '.[].id')

# Search each stream
for STREAM_ID in $STREAMS; do
  echo "=== Stream: $STREAM_ID ==="
  curl -s "http://localhost:8000/api/streams/$STREAM_ID/transcriptions?search=YOUR_QUERY&limit=5" | jq '.transcriptions[] | {timestamp, text}'
done

Format Search Results

Show just text and timestamps

curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?search=fire" | \
  jq '.transcriptions[] | "\(.timestamp): \(.text)"' -r

Show with confidence scores

curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?search=ambulance" | \
  jq '.transcriptions[] | {time: .timestamp, text, confidence: (.confidence * 100 | floor | tostring + "%")}'

Filter by confidence threshold

curl -s "http://localhost:8000/api/streams/{STREAM_ID}/transcriptions?limit=50" | \
  jq '[.transcriptions[] | select(.confidence > 0.8)] | length'

Transcription Fields

Each transcription contains:

{
  "id": "uuid",
  "streamId": "stream-id",
  "text": "transcribed text",
  "timestamp": "2025-01-15T12:30:00Z",
  "confidence": 0.95,
  "duration": 30.5,
  "segments": [...],
  "recordingUrl": "/recordings/file.wav",
  "reviewStatus": "pending",
  "correctedText": null,
  "alerts": [...]
}

Tips

  • The search is case-insensitive
  • Use order=asc to get oldest results first (useful for timeline analysis)
  • Combine after and before for precise time windows
  • Large result sets should use pagination to avoid timeouts