fireflies-enterprise-rbac
RBAC and permission configuration for Fireflies.ai workspace management and security.
Install
mkdir -p .claude/skills/fireflies-enterprise-rbac && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6297" && unzip -o skill.zip -d .claude/skills/fireflies-enterprise-rbac && rm skill.zipInstalls to .claude/skills/fireflies-enterprise-rbac
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Configure Fireflies.ai workspace roles, channels, privacy controls,Key capabilities
- →List and manage workspace members
- →Assign users to specific roles
- →Organize transcripts into channels
- →Configure transcript privacy levels
- →Audit transcript access permissions
How it works
It utilizes GraphQL mutations to update user roles, meeting privacy settings, and channel assignments within an organization's workspace.
Inputs & outputs
When to use fireflies-enterprise-rbac
- →Managing team workspace access
- →Setting up meeting channels
- →Configuring transcript privacy and sharing
About this skill
Fireflies.ai Enterprise RBAC
Overview
Manage workspace access control in Fireflies.ai using roles, channels, privacy levels, and the sharing API. Fireflies uses per-seat licensing with workspace roles and channel-based transcript organization.
Prerequisites
- Fireflies Business or Enterprise plan
- Workspace admin privileges (or API key from admin account)
- Understanding of your team structure
Workspace Roles
| Role | Capabilities |
|---|---|
| Admin | Full workspace control, manage members, access all transcripts |
| Member | Record meetings, view own + shared transcripts |
| Guest | View shared transcripts only (may not consume a seat) |
Instructions
Step 1: List Workspace Members
set -euo pipefail
curl -s -X POST https://api.fireflies.ai/graphql \
-H "Authorization: Bearer $FIREFLIES_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "{ users { name email user_id is_admin num_transcripts } }"}' \
| jq '.data.users[] | {name, email, admin: .is_admin, transcripts: .num_transcripts}'
Step 2: Set User Roles via API
// Promote or change a user's role
async function setUserRole(userId: string, role: string) {
return firefliesQuery(`
mutation($userId: String!, $role: String!) {
setUserRole(user_id: $userId, role: $role)
}
`, { userId, role });
}
// Usage: setUserRole("user-id-123", "admin")
Step 3: Organize Transcripts with Channels
// List all channels
const channels = await firefliesQuery(`{
channels {
id
title
is_private
created_by
members { user_id email name }
}
}`);
// Move transcripts to a channel
async function assignToChannel(transcriptIds: string[], channelId: string) {
return firefliesQuery(`
mutation($ids: [String!]!, $channelId: String!) {
updateMeetingChannel(transcript_ids: $ids, channel_id: $channelId)
}
`, { ids: transcriptIds, channelId });
}
Organize by department:
- Sales channel: All client/prospect calls
- Engineering channel: Sprint reviews, architecture discussions
- Leadership channel (private): Board meetings, strategy sessions
Step 4: Control Transcript Privacy
// Privacy levels (most restrictive to least)
type PrivacyLevel =
| "owner" // Only meeting organizer
| "participants" // Only meeting participants
| "teammatesandparticipants" // Workspace members + participants
| "teammates" // All workspace members
| "link"; // Anyone with the link
async function setTranscriptPrivacy(transcriptId: string, privacy: PrivacyLevel) {
return firefliesQuery(`
mutation($id: String!, $privacy: String!) {
updateMeetingPrivacy(transcript_id: $id, privacy_level: $privacy)
}
`, { id: transcriptId, privacy });
}
// Default new transcripts to participants-only
await setTranscriptPrivacy("transcript-id", "participants");
Step 5: Share Meetings with External Users
// Share a transcript with up to 100 email recipients
async function shareMeeting(transcriptId: string, emails: string[], expiryDays = 30) {
return firefliesQuery(`
mutation($id: String!, $emails: [String!]!, $expiry: Int) {
shareMeeting(transcript_id: $id, emails: $emails, expiry_days: $expiry)
}
`, { id: transcriptId, emails, expiry: expiryDays });
}
// Revoke access
async function revokeAccess(transcriptId: string, email: string) {
return firefliesQuery(`
mutation($id: String!, $email: String!) {
revokeSharedMeetingAccess(transcript_id: $id, email: $email)
}
`, { id: transcriptId, email });
}
// Rate limit: 10 share operations per hour, up to 50 emails each
Step 6: User Groups for Bulk Access
// List user groups
const groups = await firefliesQuery(`
query($mine: Boolean) {
user_groups(mine: $mine) {
id name
members { user_id email name }
created_at
}
}
`, { mine: false });
// Use groups to manage channel membership in bulk
Step 7: Audit Transcript Access
async function auditTranscriptAccess(transcriptId: string) {
const { transcript } = await firefliesQuery(`
query($id: String!) {
transcript(id: $id) {
id title
privacy
organizer_email
shared_with
channels { id }
workspace_users
}
}
`, { id: transcriptId });
console.log(`Transcript: ${transcript.title}`);
console.log(`Privacy: ${transcript.privacy}`);
console.log(`Owner: ${transcript.organizer_email}`);
console.log(`Shared with: ${transcript.shared_with?.join(", ") || "none"}`);
console.log(`Channels: ${transcript.channels?.map((c: any) => c.id).join(", ") || "none"}`);
console.log(`Workspace users: ${transcript.workspace_users?.join(", ") || "none"}`);
return transcript;
}
Recommended Enterprise Configuration
privacy_defaults:
internal_meetings: "teammatesandparticipants"
external_meetings: "participants"
leadership_meetings: "owner"
channel_structure:
- name: "Sales"
private: false
auto_assign: "meetings with external participants"
- name: "Engineering"
private: false
auto_assign: "meetings with 'sprint' or 'standup' in title"
- name: "Leadership"
private: true
members: "C-suite + VPs only"
sharing_policy:
max_expiry_days: 30
require_approval: true # For external sharing
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Cannot set role | Not workspace admin | Use admin API key |
| Channel not found | Invalid channel ID | List channels first |
| Share rate limited | 10/hour limit | Queue share operations |
| Privacy update fails | Transcript not owned | Only organizer can change privacy |
Output
- Workspace members audited with roles and utilization
- Channels created for department-based transcript organization
- Privacy levels configured per meeting type
- Sharing controls with expiry and revocation
Resources
Next Steps
For migration strategies, see fireflies-migration-deep-dive.
When not to use it
- →When performing standard transcript retrieval
- →When managing personal meeting settings only
Prerequisites
Limitations
- →Requires workspace admin privileges
- →Limited to Business or Enterprise plans
How it compares
This approach programmatically enforces organizational security policies across multiple meetings instead of manually updating settings in the web UI.
Compared to similar skills
fireflies-enterprise-rbac side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| fireflies-enterprise-rbac (this skill) | 1 | 27d | Review | Advanced |
| windows-ui-automation | 17 | 8mo | Review | Advanced |
| linux-production-shell-scripts | 7 | 6mo | Review | Intermediate |
| cursor-prod-checklist | 4 | 27d | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
windows-ui-automation
martinholovsky
Expert in Windows UI Automation (UIA) and Win32 APIs for desktop automation. Specializes in accessible, secure automation of Windows applications including element discovery, input simulation, and process interaction. HIGH-RISK skill requiring strict security controls for system access.
linux-production-shell-scripts
davila7
This skill should be used when the user asks to "create bash scripts", "automate Linux tasks", "monitor system resources", "backup files", "manage users", or "write production shell scripts". It provides ready-to-use shell script templates for system administration.
cursor-prod-checklist
jeremylongshore
Execute production readiness checklist for Cursor IDE setup. Triggers on "cursor production", "cursor ready", "cursor checklist", "optimize cursor setup". Use when working with cursor prod checklist functionality. Trigger with phrases like "cursor prod checklist", "cursor checklist", "cursor".
openevidence-prod-checklist
jeremylongshore
Production readiness checklist for OpenEvidence clinical AI deployments. Use when preparing for production launch, conducting pre-deployment reviews, or auditing OpenEvidence integration for compliance. Trigger with phrases like "openevidence production", "openevidence go-live", "openevidence checklist", "deploy openevidence", "openevidence readiness".
posthog-enterprise-rbac
jeremylongshore
Configure PostHog enterprise SSO, role-based access control, and organization management. Use when implementing SSO integration, configuring role-based permissions, or setting up organization-level controls for PostHog. Trigger with phrases like "posthog SSO", "posthog RBAC", "posthog enterprise", "posthog roles", "posthog permissions", "posthog SAML".
prowler-provider
prowler-cloud
Creates new Prowler cloud providers or adds services to existing providers. Trigger: When extending Prowler SDK provider architecture (adding a new provider or a new service to an existing provider).