| name | ops-check-logs |
| description | Check application logs from local processes, browser console, React Native device logs, or remote AWS CloudWatch. Supports log tailing, filtering, and error searching across all platforms. |
| allowed-tools | ["Bash","Read"] |
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} — set BACKEND_DIR in .claude/settings.local.json if your backend is elsewhere
Discovery
- Read backend
package.json to discover logs:*, logs:watch:*, and aws:signin:* scripts
- Extract function names from
logs:{env} scripts (typically set via FUNCTION_NAME env 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:local or bun 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 the current runtime's tool-discovery mechanism to search for playwright browser.
-
Navigate to the app:
browser_navigate to the target URL (discover from e2e/constants.ts or .env.* files)
-
Capture console messages:
browser_console_messages — returns all console.log, console.warn, console.error output
-
Check for failed network requests:
browser_network_requests — shows all HTTP requests including 4xx/5xx failures
-
Run custom JS to inspect state:
browser_evaluate with 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) or F12
- Console tab — JS errors, warnings, and log output
- Network tab — failed API requests (filter by
4xx or 5xx)
- 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:local or bun start:dev
- Press
j in 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
Android Logs
adb logcat *:E
adb logcat -s ReactNativeJS
adb logcat -s ReactNativeJS:V *:S
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-errors skill
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}"
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
If this is an interactive local session and credentials are expired, refresh the backend's local
AWS signin flow. In a headless or remote-routine session, do not start an SSO browser/device flow;
use the preconfigured ~/.aws/config profile backed by AWS_ACCESS_KEY_ID /
AWS_SECRET_ACCESS_KEY environment credentials.
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 scripts or the remote-routine ~/.aws/config profile.
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:
eas build:list --limit 5
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.