Ops: Check Logs
View and search logs across all platforms and environments.
Argument: $ARGUMENTS — target and optional filter (e.g., dev errors, staging api, local, browser, device ios, production {function})
Path Convention
- Frontend: Current project directory (
.) - Backend:
${BACKEND_DIR:-../backend-v2}— setBACKEND_DIRin.claude/settings.local.jsonif your backend is elsewhere
Discovery
- Read backend
package.jsonto discoverlogs:*,logs:watch:*, andaws:signin:*scripts - Extract function names from
logs:{env}scripts (typically set viaFUNCTION_NAMEenv var) - Read
.env.{environment}to find Sentry DSN for error correlation
Local Process Logs
Local services run in foreground processes. Their logs are captured in the terminal where they were started.
- Frontend: stdout from
bun start:localorbun start:dev(Metro bundler) - Backend: stdout from
IS_OFFLINE=true bun run start:local(Serverless Offline)
If services were started via the ops-run-local skill with run_in_background, check the background task output file.
Browser Console Logs (Expo Web)
For inspecting JavaScript errors, warnings, and console.log output in the browser at runtime.
Via Playwright MCP Tools (automated)
Use when you need to capture browser logs programmatically during UAT or debugging.
-
Load Playwright tools — use
ToolSearchto search forplaywright browser. -
Navigate to the app:
browser_navigateto the target URL (discover frome2e/constants.tsor.env.*files)
-
Capture console messages:
browser_console_messages— returns allconsole.log,console.warn,console.erroroutput
-
Check for failed network requests:
browser_network_requests— shows all HTTP requests including 4xx/5xx failures
-
Run custom JS to inspect state:
browser_evaluatewith script:JSON.stringify(performance.getEntriesByType('resource').filter(r => r.duration > 1000).map(r => ({name: r.name, duration: r.duration})))
Via Browser DevTools (manual)
When a developer is debugging interactively:
- Open the app in Chrome (
http://localhost:8081) - Open Chrome DevTools:
Cmd+Option+I(macOS) orF12 - Console tab — JS errors, warnings, and log output
- Network tab — failed API requests (filter by
4xxor5xx) - Performance tab — runtime performance profiling
React Native Device Logs
For inspecting logs on iOS and Android devices/simulators when running the native app.
React Native DevTools (primary — press j)
The modern debugging tool for Expo apps (React Native 0.76+):
- Start the app:
bun start:localorbun start:dev - Press
jin the Metro terminal to open React Native DevTools - Available tabs:
- Console — interactive JS console connected to the app
- Sources — set breakpoints, step through code
- Network — inspect fetch requests and media loads
- Memory — heap snapshots and memory profiling
Expo Developer Menu (press m)
Press m in the Metro terminal to open the Developer Menu on the connected device:
- Toggle performance monitor (RAM, JS heap, Views, FPS)
- Toggle element inspector
- Open JS debugger
- Reload app
iOS Logs
# Via Expo CLI (logs appear in Metro terminal automatically)
# Just run the app — console.log output streams to the terminal
# Via Xcode Console (native-level logs)
# Open Xcode > Devices and Simulators (Shift+Cmd+2) > Open Console
# Via macOS Console app (simulator logs)
# Open Console.app > filter by process name
Android Logs
# Via Expo CLI (logs appear in Metro terminal automatically)
# Just run the app — console.log output streams to the terminal
# Via adb logcat (native-level logs, verbose)
adb logcat *:E # Errors only
adb logcat -s ReactNativeJS # React Native JS logs only
adb logcat -s ReactNativeJS:V *:S # JS logs verbose, suppress everything else
# Via Android Studio Logcat
# Open Android Studio > View > Tool Windows > Logcat
# Filter by package name or "ReactNativeJS"
Production Crash Logs (Device)
For production crash investigation on native platforms:
- iOS: Xcode Crashes Organizer (TestFlight/App Store builds)
- Android: Google Play Console > Crashes section
- Both: Sentry captures JS-level crashes — use
ops-monitor-errorsskill
Remote Logs (CloudWatch via Serverless Framework)
Discover available log scripts from the backend package.json (matching logs:* and logs:watch:*).
Prerequisites
cd "${BACKEND_DIR:-../backend-v2}"
bun run aws:signin:{env}
View Recent Logs
cd "${BACKEND_DIR:-../backend-v2}"
FUNCTION_NAME={fn} bun run logs:{env}
Tail Logs (follow mode)
cd "${BACKEND_DIR:-../backend-v2}"
FUNCTION_NAME={fn} bun run logs:watch:{env}
Remote Logs (AWS CLI — Advanced Filtering)
For more advanced filtering, use the AWS CLI directly. Discover the AWS profile from backend package.json aws:signin:* scripts.
Discover Log Groups
aws logs describe-log-groups \
--profile {aws-profile} \
--region us-east-1 \
--query 'logGroups[].logGroupName' \
--output text | tr '\t' '\n'
Filter for Errors (last 30 minutes)
aws logs filter-log-events \
--profile {aws-profile} \
--region us-east-1 \
--log-group-name "{log-group}" \
--start-time $(date -v-30M +%s000) \
--filter-pattern "ERROR" \
--query 'events[].message' \
--output text
Tail Live Logs
aws logs tail "{log-group}" \
--profile {aws-profile} \
--region us-east-1 \
--follow \
--since 10m
EAS Build Logs
For frontend build issues:
# List recent builds
eas build:list --limit 5
# View specific build details
eas build:view {build-id}
Output Format
Report log findings as:
| Source | Timestamp | Level | Context | Message | |--------|-----------|-------|---------|---------| | CloudWatch | 2024-01-15T10:30:00Z | ERROR | api | Connection timeout to RDS | | Browser | — | ERROR | console | TypeError: Cannot read property 'name' | | Device | — | WARN | ReactNativeJS | VirtualizedList: missing keys |
Include a summary of findings: total errors, warnings, and any patterns observed.