plugins/lisa-expo-copilot/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.
development
Prepare a machine — a fresh laptop or a throwaway container — to run coding agents, before any repository exists. Detects which of Lisa's supported agents (Claude Code, Codex, Cursor, OpenCode, Antigravity, Copilot) are already installed, asks which credential manager the machine uses (Bitwarden, 1Password, Doppler, Vault, AWS, or none), and installs only what is missing, each by its vendor's own preferred method. Idempotent, headless by default, and emits a Dockerfile for a spin-up/spin-down environment. Run it on a new machine, in a container, or before cloning anything.
tools
Provision and verify a remote execution environment for a host project — Codex Cloud today, other remote surfaces as they are added. Generates a repository-owned setup script that installs the declared toolchain, materializes secrets through lisa-secrets-access, and runs the project's own hook. Provisions by API where one exists, by driving the vendor console where one does not, and by emitting exact config otherwise — then proves the result with the same read-back regardless of which tier did the work. Use before dispatching any work with executionEnv.
tools
Bring a developer's machine in line with the toolchain the project declares. Reports every tool in remoteEnv.tools that is missing, outdated, or unpinned for this platform, and installs the missing ones into ~/.local/bin from the same pinned, checksummed entries the remote surfaces use — but only when asked. Same manifest, same pins, same installers as lisa-setup-remote-env; what differs is consent and that the pin is a floor rather than an equality. Run it on a fresh checkout, after a manifest change, or when a tool fails at the moment of use.
tools
Route one unit of work to a remote execution surface. Reads the executionEnv parameter (local by default, codex-cloud or claude-web today), verifies the environment is provisioned and bound to this repository, submits a thin skill invocation, records the task identifier to .lisa/remote-dispatch.json, and exits without polling. Routing only — the remote runs the identical skill from the identical repository. Composable and inline: other skills invoke it via the Skill tool rather than users calling it directly.