Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Apply Fireflies.ai security best practices for API keys and webhook verification. Use when securing API keys, verifying webhook signatures, or auditing Fireflies.ai security configuration. Trigger with phrases like "fireflies security", "fireflies secrets", "secure fireflies", "fireflies webhook signature", "fireflies HMAC".
.claude/skills/jeremylongshore-fireflies-security-basics/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -47% | 0% |
Harden Fireflies bearer authentication, GraphQL selections, webhook signatures, logs, and privileged mutations against secret and meeting-data exposure.
Protect two independent secrets: the API bearer key for outbound GraphQL and the Webhooks V2 signing secret for inbound HMAC verification. Verify X-Hub-Signature over the raw body as sha256=HEX_DIGEST with a timing-safe comparison before parsing.
For authenticated operations, inject FIREFLIES_API_KEY from an approved secret manager and send it only as Authorization: Bearer REDACTED_KEY to https://api.fireflies.ai/graphql. Never print, commit, place in a URL, forward to a browser, or include the key in evidence. Webhook signing secrets are separate credentials and must not be reused as API keys.
Use Read, Glob, and Grep to inspect code, configuration, tests, and evidence. Use Write/Edit only for approved implementation or documentation changes. Do not query Fireflies, retrieve meeting content, create an AskFred thread, upload media, change account state, replay an event, or deploy merely because this skill was invoked.
Require approval before any production key or signing-secret change, privacy/share mutation, role change, recording/upload, or transcript deletion.
Return the exact operation or event surface, environment, authorization class, selected field groups, validation results, content-free metrics, decisions, and a concise pass/fail receipt. Keep secrets and meeting-derived content out of general output.
Before reporting success, rerun the smallest relevant deterministic check, compare actual state with the requested outcome and current contract, verify no secret or meeting-derived content entered logs or artifacts, and record unresolved uncertainty explicitly.
Read official Fireflies.ai evidence before relying on a field, filter, event, permission, plan limit, mutation, or processing state.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 737,530 | 28,155 | -96% | 1 | 1 | 0% | 3,195 | 4,082 | +28% | 0 | 0 | — |
case-02 | fail→fail | 19,056 | 17,572 | -8% | 1 | 1 | 0% | 3,536 | 5,059 | +43% | 0 | 0 | — |
case-03 | fail→pass | 18,183 | 10,423 | -43% | 1 | 1 | 0% | 2,843 | 3,566 | +25% | 0 | 0 | — |
case-04 | pass→pass | 12,307 | 12,019 | -2% | 1 | 1 | 0% | 2,359 | 3,901 | +65% | 0 | 0 | — |
case-05 | fail→pass | 10,506 | 1,760 | -83% | 1 | 1 | 0% | 1,748 | 1,778 | +2% | 0 | 0 | — |
case-06 | fail→pass | 7,748 | 3,204 | -59% | 1 | 1 | 0% | 1,299 | 2,082 | +60% | 0 | 0 | — |
case-07 | fail→pass | 19,890 | 2,446 | -88% | 1 | 1 | 0% | 3,613 | 1,929 | -47% | 0 | 0 | — |
case-08 | pass→pass | 10,364 | 2,517 | -76% | 1 | 1 | 0% | 1,782 | 1,955 | +10% | 0 | 0 | — |
case-09 | fail→pass | 11,558 | 4,232 | -63% | 1 | 1 | 0% | 2,077 | 2,195 | +6% | 0 | 0 | — |
case-10 | fail→pass | 5,549 | 2,591 | -53% | 1 | 1 | 0% | 997 | 1,948 | +95% | 0 | 0 | — |
case-11 | pass→pass | 5,230 | 2,564 | -51% | 1 | 1 | 0% | 808 | 1,998 | +147% | 0 | 0 | — |
case-12 | pass→pass | 2,879 | 2,535 | -12% | 1 | 1 | 0% | 443 | 1,840 | +315% | 0 | 0 | — |
case-13 | pass→pass | 5,112 | 2,607 | -49% | 1 | 1 | 0% | 898 | 1,915 | +113% | 0 | 0 | — |
case-14 | pass→pass | 9,373 | 3,247 | -65% | 1 | 1 | 0% | 1,571 | 2,134 | +36% | 0 | 0 | — |
case-15 | pass→pass | 4,822 | 4,870 | +1% | 1 | 1 | 0% | 796 | 2,367 | +197% | 0 | 0 | — |
case-16 | pass→pass | 7,066 | 2,875 | -59% | 1 | 1 | 0% | 1,324 | 1,916 | +45% | 0 | 0 | — |
case-17 | pass→pass | 11,798 | 11,297 | -4% | 1 | 1 | 0% | 1,921 | 3,158 | +64% | 0 | 0 | — |
case-18 | pass→pass | 5,573 | 3,201 | -43% | 1 | 1 | 0% | 914 | 2,048 | +124% | 0 | 0 | — |
case-19 | pass→pass | 11,215 | 4,003 | -64% | 1 | 1 | 0% | 1,681 | 2,152 | +28% | 0 | 0 | — |
case-20 | fail→fail | 13,235 | 16,349 | +24% | 1 | 1 | 0% | 2,523 | 4,738 | +88% | 0 | 0 | — |
case-21 | fail→fail | 12,459 | 17,619 | +41% | 1 | 1 | 0% | 2,064 | 4,383 | +112% | 0 | 0 | — |
case-22 | fail→fail | 11,219 | 12,746 | +14% | 1 | 1 | 0% | 1,973 | 3,696 | +87% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.