Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when reviewing Firebase code against security model and best practices. Triggers on "review firebase", "check firebase", "validate", "audit firebase", "security review", "look at firebase code". Validates configuration, rules, architecture, and security.
.claude/skills/aiskillstore-firebase-development-validate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 26% | 0% |
This sub-skill validates existing Firebase code against proven patterns and security best practices. It checks configuration, rules, architecture consistency, authentication, testing, and production readiness.
Key principles:
Do not use for:
firebase-development:project-setupfirebase-development:add-featurefirebase-development:debugCreate checklist with these 9 steps:
Validate required sections:
hosting - Array or object presentfunctions - Source directory, runtime, predeploy hooksfirestore - Rules and indexes filesemulators - Local development configCheck hosting pattern matches implementation (site:, target:, or single).
Reference: docs/examples/multi-hosting-setup.md
Critical settings:
json{ "emulators": { "singleProjectMode": true, "ui": { "enabled": true } } }
Verify all services in use have emulator entries.
Reference: docs/examples/emulator-workflow.md
Check for:
isAuthenticated(), isOwner())diff().affectedKeys().hasOnly([...]) for client writescollectionGroup() queriesReference: docs/examples/firestore-rules-patterns.md
Identify pattern in use:
middleware/, tools/, CORS, health endpointshared/Critical: Don't mix patterns. Verify consistency throughout.
Reference: docs/examples/express-function-architecture.md
For API Keys:
collectionGroup('apiKeys') queryactive: true flaguserId to requestFor Firebase Auth:
request.auth.uidReference: docs/examples/api-key-authentication.md
All .ts files should start with:
typescript// ABOUTME: Brief description of what this file does // ABOUTME: Second line with additional context
bashgrep -L "ABOUTME:" functions/src/**/*.ts # Find missing
Check for:
functions/src/__tests__/**/*.test.tsfunctions/src/__tests__/emulator/**/*.test.tsvitest.config.ts and vitest.emulator.config.ts existbashnpm test && npm run test:coverage
All handlers must:
{ success: boolean, message: string, data?: any }console.errorSecurity checks:
grep -r "apiKey.*=" functions/src/).env files in .gitignoreallow read, write: if true; in rulesProduction checks:
npm audit cleannpm run buildnpm test.firebasercallow write: if false;diff().affectedKeys() validation| Issue | Fix | |-------|-----| | Missing singleProjectMode | Add to emulators config | | No default deny rule | Add match /{document=**} { allow: if false; } | | Mixed architecture | Migrate to consistent pattern | | Missing ABOUTME | Add 2-line header to all .ts files | | No integration tests | Add emulator tests for workflows | | Inconsistent response format | Standardize to {success, message, data?} | | No error handling | Add try-catch to all handlers | | Secrets in code | Move to environment variables |
For general code quality review beyond Firebase patterns, invoke superpowers:requesting-code-review.
After validation, provide:
docs/examples/multi-hosting-setup.mddocs/examples/api-key-authentication.mddocs/examples/express-function-architecture.mddocs/examples/firestore-rules-patterns.mddocs/examples/emulator-workflow.md| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | fail→pass | 15,976 | 10,937 | -32% | 1 | 1 | 0% | 2,885 | 3,438 | +19% | 0 | 0 | — |
case-01 | pass→fail | 20,957 | 11,876 | -43% | 1 | 1 | 0% | 3,004 | 1,839 | -39% | 0 | 0 | — |
case-02 | fail→fail | 24,168 | 13,409 | -45% | 1 | 1 | 0% | 3,296 | 1,741 | -47% | 0 | 0 | — |
case-20 | pass→pass | 15,512 | 9,551 | -38% | 1 | 1 | 0% | 2,680 | 2,918 | +9% | 0 | 0 | — |
case-03 | fail→fail | 28,087 | 2,857 | -90% | 1 | 1 | 0% | 5,113 | 1,823 | -64% | 0 | 0 | — |
case-04 | pass→pass | 12,784 | 4,314 | -66% | 1 | 1 | 0% | 2,108 | 2,165 | +3% | 0 | 0 | — |
case-05 | pass→pass | 8,862 | 3,765 | -58% | 1 | 1 | 0% | 1,394 | 2,014 | +44% | 0 | 0 | — |
case-06 | pass→pass | 11,364 | 5,574 | -51% | 1 | 1 | 0% | 2,053 | 2,409 | +17% | 0 | 0 | — |
case-08 | fail→pass | 9,151 | 3,604 | -61% | 1 | 1 | 0% | 1,333 | 1,843 | +38% | 0 | 0 | — |
case-09 | fail→pass | 13,862 | 4,996 | -64% | 1 | 1 | 0% | 2,623 | 2,321 | -12% | 0 | 0 | — |
case-10 | fail→pass | 16,106 | 6,583 | -59% | 1 | 1 | 0% | 2,805 | 2,688 | -4% | 0 | 0 | — |
case-11 | fail→pass | 15,086 | 9,334 | -38% | 1 | 1 | 0% | 2,249 | 2,832 | +26% | 0 | 0 | — |
case-12 | fail→pass | 11,811 | 5,889 | -50% | 1 | 1 | 0% | 1,854 | 2,329 | +26% | 0 | 0 | — |
case-13 | pass→pass | 8,069 | 4,946 | -39% | 1 | 1 | 0% | 1,382 | 2,318 | +68% | 0 | 0 | — |
case-14 | pass→pass | 13,085 | 10,245 | -22% | 1 | 1 | 0% | 2,315 | 3,363 | +45% | 0 | 0 | — |
case-15 | pass→pass | 16,325 | 6,419 | -61% | 1 | 1 | 0% | 2,547 | 2,460 | -3% | 0 | 0 | — |
case-21 | pass→pass | 12,716 | 13,775 | +8% | 1 | 1 | 0% | 2,437 | 3,959 | +62% | 0 | 0 | — |
case-16 | fail→pass | 11,537 | 1,874 | -84% | 1 | 1 | 0% | 1,462 | 1,682 | +15% | 0 | 0 | — |
case-17 | pass→pass | 9,830 | 7,165 | -27% | 1 | 1 | 0% | 1,824 | 2,673 | +47% | 0 | 0 | — |
case-18 | pass→pass | 7,955 | 4,336 | -45% | 1 | 1 | 0% | 1,238 | 2,135 | +72% | 0 | 0 | — |
case-19 | pass→pass | 26,250 | 9,708 | -63% | 1 | 1 | 0% | 2,212 | 3,038 | +37% | 0 | 0 | — |
case-22 | pass→pass | 12,680 | 10,393 | -18% | 1 | 1 | 0% | 2,065 | 3,335 | +62% | 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, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.