eas-observe

Instrument Expo apps with expo-observe and query performance metrics via the EAS CLI.

Updated Sep 6, 2026
One-click install
npx skills add https://github.com/sombek/fitness-guidance-app --skill eas-observe-sombek
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: eas-observe
Source: https://github.com/sombek/fitness-guidance-app/tree/main/mobile/.agents/skills/eas-observe
Command: npx skills add https://github.com/sombek/fitness-guidance-app --skill eas-observe-sombek

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Mobile teams lack visibility into how their production Expo apps actually start up and navigate in the field. This Skill guides adding EAS Observe instrumentation to an Expo project, querying the collected telemetry from the terminal, and interpreting metrics like cold launch, TTR, and TTI to diagnose slow startups. ## Core Features & Use Cases - Instrumentation setup: Add expo-observe to an Expo project with the correct SDK-specific API (AppMetricsRoot on SDK 55, ObserveRoot and useObserve on SDK 56+), plus per-route navigation metrics via Expo Router or React Navigation integrations, custom events with Observe.logEvent, and error reporting with ObserveErrorBoundary. - CLI querying: Run the six eas observe:* commands (metrics-summary, metrics, routes, events, session, versions) with correct flags, aliases, pagination, and JSON output shapes. - Metrics interpretation: Apply target thresholds and diagnostic patterns using automatic TTI params (frame rate, device state, network state) to distinguish slow-but-smooth launches from main-thread contention or environmental throttling. - Use Case: After users report slow startup, run eas observe:metrics tti --sort slowest --days 7, pull a sessionId from the JSON output, and replay the full session timeline with eas observe:session to find the blocking request. ## Quick Start Ask the assistant to add EAS Observe instrumentation to your Expo project's root layout and mark the app interactive after initial data loading finishes.

Frequently Asked Questions about eas-observe

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add EAS Observe to an Expo project?

Install expo-observe with npx expo install, wrap your root layout export with AppMetricsRoot.wrap on SDK 55 or ObserveRoot.wrap on SDK 56+, then call markInteractive once the screen is genuinely usable. A development or production build is required since the native library does not work in Expo Go.

How do I query EAS Observe metrics from the terminal?

Use the six eas observe:* commands: metrics-summary for per-version aggregates, metrics for individual samples, routes for per-route navigation stats, events for custom logEvent data, session for a full session timeline, and versions for the app version hierarchy. All support --days, --platform, and --json flags.

Does expo-observe work in Expo Go?

No, expo-observe is a native library and does not work in Expo Go. You need a development build or production build created with eas build, and debug builds do not dispatch metrics unless you set dispatchInDebug: true in configure().

What is the difference between TTR and TTI in EAS Observe?

TTR (time to first render) is measured automatically when the root is wrapped with the Observe HOC, targeting under 2 seconds including cold launch. TTI (time to interactive) is not automatic; you must call markInteractive() once the screen is genuinely usable, targeting under 3 seconds.

Why is my EAS Observe query rejected with a plan upgrade error?

EAS Observe is a paid EAS service, and the server rejects queries the account plan does not include with EAS_OBSERVE_PLAN_UPGRADE_REQUIRED or EAS_OBSERVE_FEATURE_NOT_AVAILABLE_IN_FREE_TIER. The free plan allows up to 10,000 monthly active users with limited features.

Does EAS Observe replace crash reporting tools like Sentry?

No, EAS Observe has no crash reporting. It records unhandled JS errors, render errors via ObserveErrorBoundary, and handled errors via Observe.reportError as non-fatal exception events, but you should use Sentry or BugSnag for actual crash reporting.