plugins/lisa-expo-agy/skills/ops-check-logs/SKILL.md
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.
npx skillsauth add codyswanngt/lisa ops-check-logsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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})
.)${BACKEND_DIR:-../backend-v2} — set BACKEND_DIR in .claude/settings.local.json if your backend is elsewherepackage.json to discover logs:*, logs:watch:*, and aws:signin:* scriptslogs:{env} scripts (typically set via FUNCTION_NAME env var).env.{environment} to find Sentry DSN for error correlationLocal services run in foreground processes. Their logs are captured in the terminal where they were started.
bun start:local or bun start:dev (Metro bundler)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.
For inspecting JavaScript errors, warnings, and console.log output in the browser at runtime.
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 outputCheck for failed network requests:
browser_network_requests — shows all HTTP requests including 4xx/5xx failuresRun 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})))When a developer is debugging interactively:
http://localhost:8081)Cmd+Option+I (macOS) or F124xx or 5xx)For inspecting logs on iOS and Android devices/simulators when running the native app.
j)The modern debugging tool for Expo apps (React Native 0.76+):
bun start:local or bun start:devj in the Metro terminal to open React Native DevToolsm)Press m in the Metro terminal to open the Developer Menu on the connected device:
# 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
# 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"
For production crash investigation on native platforms:
ops-monitor-errors skillDiscover available log scripts from the backend package.json (matching logs:* and logs:watch:*).
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.
cd "${BACKEND_DIR:-../backend-v2}"
FUNCTION_NAME={fn} bun run logs:{env}
cd "${BACKEND_DIR:-../backend-v2}"
FUNCTION_NAME={fn} bun run logs:watch:{env}
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.
aws logs describe-log-groups \
--profile {aws-profile} \
--region us-east-1 \
--query 'logGroups[].logGroupName' \
--output text | tr '\t' '\n'
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
aws logs tail "{log-group}" \
--profile {aws-profile} \
--region us-east-1 \
--follow \
--since 10m
For frontend build issues:
# List recent builds
eas build:list --limit 5
# View specific build details
eas build:view {build-id}
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.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.