| name | firebase-ops |
| description | Use for Firebase operations in the Gofannon Mk III project, including scoped deploys, Functions and gcloud log inspection, emulator startup and troubleshooting, Firestore/Storage/Remote Config rule deploys, project switching, and Firebase CLI recovery steps. |
Firebase Ops
Use this skill when the user asks about Firebase deploys, logs, emulator management, or any Firebase CLI operation in the Gofannon Mk III project.
Project Firebase services
This repo uses:
- Firestore —
firestore.rules, firestore.indexes.json
- Functions —
functions/ (Node.js TypeScript, builds to lib/)
- Hosting — SPA from
build/ (Vite)
- Storage —
storage.rules
- Remote Config —
remoteconfig.template.json
- Cloud Run session worker —
workers/session-worker/; deploy with gcloud run deploy, not firebase deploy --only functions
Scoped deploys
Always prefer scoped deploys.
firebase deploy --only functions
firebase deploy --only hosting
firebase deploy --only firestore:rules
firebase deploy --only firestore:indexes
firebase deploy --only storage
firebase deploy --only remoteconfig
firebase deploy --only functions,hosting
firebase deploy --only functions:myFunctionName
firebase deploy --only functions:codebase:functionName
gcloud run deploy session-worker --source workers/session-worker --region us-central1
Do not use firebase deploy --only functions for workers/session-worker/ changes; it will leave the deployed worker revision unchanged.
Build before deploy
The project has predeploy hooks in firebase.json:
- Functions run
npm run lint and npm run build automatically
- Hosting runs
npm run build automatically
If you need to skip predeploy (emergency fix):
firebase deploy --only functions --no-predeploy
Logs
Firebase Functions logs (production)
firebase functions:log --limit=50
firebase functions:log --tail
firebase functions:log --only myFunctionName
firebase functions:log --limit=200 | tail -n 50
gcloud logging (production, more powerful)
gcloud logging read "resource.type=cloud_function" --limit=50 --format=json
gcloud logging read "resource.type=cloud_function AND jsonPayload.function_name=myFunctionName" --limit=50 --format=json
gcloud logging read "resource.type=cloud_function AND severity>=ERROR" --limit=50 --format=json
gcloud logging read "resource.type=cloud_function AND timestamp>\"$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)\"" --limit=50
gcloud logging read "resource.type=cloud_run_revision" --limit=50 --format=json
gcloud logging read 'resource.type="cloud_run_revision" AND resource.labels.service_name="session-worker"' --limit=100 --format=json
gcloud logging tail 'resource.type="cloud_run_revision" AND resource.labels.service_name="session-worker"'
Emulator logs (local development)
cat firebase-debug.log 2>/dev/null | tail -n 100
cat functions/firebase-debug.log 2>/dev/null | tail -n 100
cat firestore-debug.log 2>/dev/null | tail -n 50
cat pubsub-debug.log 2>/dev/null | tail -n 50
Emulator commands
firebase emulators:start
firebase emulators:start --only functions,firestore
firebase emulators:start --only hosting
firebase emulators:start --import=./emulator-data
firebase emulators:export ./emulator-data
firebase functions:shell
Common operations
Get current Firebase project
firebase projects:list
firebase use
Switch project
firebase use project-id
Set a function config / environment variable
firebase functions:config:set myservice.key="value"
Note: This project uses .env files for runtime config (topic names, hosting site ids). User secrets go in Firestore, not in function config.
Check Firestore rules before deploy
firebase deploy --only firestore:rules --dry-run
Failure modes and recovery
Error: Cannot find module './lib/index.js' — Functions were not built. Run cd functions && npm run build manually, then redeploy.
functions predeploy error: Command terminated with non-zero exit code — Lint or build failed. Check functions/ for TypeScript errors.
- Deploy takes too long / hangs — Check your network or use
firebase deploy --only functions --debug for verbose output.
- Logs show
permission-denied — Firestore rules may be out of sync. Deploy rules: firebase deploy --only firestore:rules.
- Function cold start / timeout — Check for heavy imports or unawaited promises in the function handler.
Example invocations
Deploy just the functions
Show me the last 20 log lines for processAgentQueueMessage
Start the emulator with functions and firestore only