From secondbrain
Processes meeting transcripts from Fireflies into structured discussion documents with optional ADR extraction. Lists undocumented meetings or batches all for import.
npx claudepluginhub sergio-bershadsky/ai --plugin secondbrainThis skill uses the workspace's default tool permissions.
Process meeting transcripts from external providers into structured discussion documents, with optional ADR extraction from decisions.
Extracts key decisions, takeaways, action items with DRIs, and open questions from meeting transcripts, notes, or Slack threads. Handles single meetings or weekly batches.
Captures team discussions, meeting notes, and conversations into structured Markdown files with participants, key points, decisions, action items, and updates monthly YAML indexes.
Fetches Fireflies.ai meeting transcripts via GraphQL, processes speaker-diarized sentences, extracts action items and summaries for intelligence pipelines.
Share bugs, ideas, or general feedback.
Process meeting transcripts from external providers into structured discussion documents, with optional ADR extraction from decisions.
/secondbrain-transcribe <id | list | all>
id — specific meeting ID from the provider to processlist — show recent undocumented meetingsall — batch process all undocumented meetingsExamples:
/secondbrain-transcribe list
/secondbrain-transcribe 01KCY1N2ZMSVEKK0DJ0D0HM4CE
/secondbrain-transcribe all
Verify the project has transcription configured in .claude/data/config.yaml:
integrations:
transcription:
enabled: true
provider: fireflies
check_on_session_start: true
lookback_days: 7
fireflies:
api_key_env: FIREFLIES_API_KEY
If not configured, guide the user through setup:
.env.local)integrations section to configAlso verify that discussions entity is enabled (transcriptions create discussion documents).
Read .claude/data/config.yaml and extract:
integrations.transcription.provider — which provider to useintegrations.transcription.lookback_days — how far back to check (default: 7)team section — for participant name mappingLoad the provider-specific reference from references/provider-<name>.md for API details.
list — Fetch recent meetings from provider, filter against processed list, display table:
## Undocumented Meetings (Last 7 Days)
| ID | Date | Title | Duration | Participants |
|----|------|-------|----------|--------------|
| 01KCY1N2ZM... | 2026-03-28 | Team Sync | 40 min | Jane, John |
Run `/secondbrain-transcribe <id>` to process a specific meeting.
Run `/secondbrain-transcribe all` to process all meetings.
<id> — Process a specific meeting (continue to Step 3).
all — Iterate through all unprocessed meetings, processing each (continue to Step 3 for each).
Use the provider's client library to fetch meeting data. For provider-specific instructions, read the corresponding reference file:
references/provider-fireflies.mdThe client should be available at .claude/lib/<provider>.py in the user's project (scaffolded during init).
import sys
sys.path.insert(0, '.claude/lib')
# Provider-specific import
from fireflies import FirefliesClient
client = FirefliesClient()
transcript = client.get_transcript("<meeting-id>")
Use the tracking library to check if this meeting was already documented:
from tracking import is_meeting_processed
if is_meeting_processed("<meeting-id>"):
# Already processed — show existing doc location
If already processed, inform the user and show the existing discussion file path.
From the transcript, extract:
team config section. Match email patterns and name patterns to resolve full names.Use the provider's AI summary if available (e.g., Fireflies summary.overview, summary.action_items, summary.keywords).
Create a discussion document following the existing secondbrain-discussion patterns:
File path: docs/discussions/YYYY-MM-DD-<participant>-<topic-slug>.md
Frontmatter:
---
date: YYYY-MM-DD
participants:
- Jane Smith
- John Doe
topic: Meeting Title
status: documented
source: <provider_name>
meeting_id: <provider_meeting_id>
tags: [extracted, keywords]
---
Body template:
# Meeting Title
## Context
<From transcript summary or overview>
## Discussion Points
### Topic 1
<Details from transcript>
### Topic 2
<Details from transcript>
## Decisions
| Decision | Rationale | Owner |
|----------|-----------|-------|
| Decision from transcript | Context | Assignee |
## Action Items
- [ ] Item from transcript — Owner
- [ ] Item from transcript — Owner
## Open Questions
1. Unresolved items from discussion
---
*Source: <provider> transcript*
*Meeting ID: <id>*
*Documented: YYYY-MM-DD*
CRITICAL: Do NOT add the discussion to the VitePress sidebar. Discussion documents are auto-listed via the EntityTable component.
Scan decisions for architectural/technical choices:
ADR Candidates:
Present to user with confirmation for each:
## Potential ADRs from Meeting
Found 2 decisions that might warrant ADRs:
1. "Decided to use Docker Compose for local development"
→ Create ADR? [Y/N]
2. "Will implement Redis for caching layer"
→ Create ADR? [Y/N]
Never auto-create ADRs — always wait for user confirmation on each.
Present the full draft before writing:
## Meeting Transcript Documentation
**Meeting:** Jane <> John
**Date:** 2026-03-28
**Duration:** 40 minutes
**Provider ID:** 01KCY1N2ZMSVEKK0DJ0D0HM4CE
### Files to Create/Update
1. CREATE: docs/discussions/2026-03-28-john-doe-team-sync.md
2. UPDATE: .claude/data/discussions/2026-03.yaml (add record)
### ADRs to Create (if confirmed)
- ADR-0005: Docker Compose for Local Development
### Draft Document
---
[Document content]
---
Proceed with documentation?
After approval:
.claude/data/discussions/YYYY-MM.yaml):
- date: 'YYYY-MM-DD'
member: john
topic: Team Sync
file: docs/discussions/2026-03-28-john-doe-team-sync.md
source: fireflies
meeting_id: 01KCY1N2ZMSVEKK0DJ0D0HM4CE
/secondbrain-adr skill workflowIf a team section exists in config, map provider participant names/emails to team aliases:
team:
jane:
full_name: "Jane Smith"
patterns: ["jane@*", "Jane*"]
john:
full_name: "John Doe"
patterns: ["john@*", "John*"]
Match participant names/emails against patterns to resolve full names. Unmatched participants are kept as-is.
meeting_id and source in frontmatter