vybekiit 0.7.4 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +10483 -1704
- package/dist/global-skills/aws-cdk/SKILL.md +2 -1
- package/dist/global-skills/aws-cloudformation/SKILL.md +2 -1
- package/dist/global-skills/aws-serverless/SKILL.md +45 -44
- package/dist/global-skills/aws-serverless/assets/powertools-handler.py +2 -1
- package/dist/global-skills/aws-serverless/references/api-gateway.md +50 -470
- package/dist/global-skills/aws-serverless/references/architecture.md +47 -186
- package/dist/global-skills/aws-serverless/references/concurrency.md +44 -158
- package/dist/global-skills/aws-serverless/references/deployment.md +1 -1
- package/dist/global-skills/aws-serverless/references/event-sources.md +72 -391
- package/dist/global-skills/aws-serverless/references/lambda.md +69 -428
- package/dist/global-skills/aws-serverless/references/orchestration.md +65 -384
- package/dist/global-skills/aws-serverless/references/production.md +78 -415
- package/dist/global-skills/aws-serverless/references/troubleshooting.md +92 -619
- package/dist/global-skills/claimable-postgres/SKILL.md +60 -49
- package/dist/global-skills/design-my-data/SKILL.md +2 -0
- package/dist/global-skills/eas-app-stores/SKILL.md +8 -0
- package/dist/global-skills/eas-app-stores/references/play-store.md +2 -0
- package/dist/global-skills/eas-hosting/SKILL.md +8 -0
- package/dist/global-skills/eas-observe/SKILL.md +30 -8
- package/dist/global-skills/eas-observe/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-observe/references/metrics.md +54 -3
- package/dist/global-skills/eas-observe/references/queries.md +78 -17
- package/dist/global-skills/eas-observe/references/setup.md +164 -5
- package/dist/global-skills/eas-observe/references/third-party.md +136 -0
- package/dist/global-skills/eas-simulator/SKILL.md +63 -11
- package/dist/global-skills/eas-simulator/references/controllers.md +21 -2
- package/dist/global-skills/eas-simulator/references/run-your-app.md +16 -11
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +8 -5
- package/dist/global-skills/eas-update-insights/SKILL.md +8 -0
- package/dist/global-skills/eas-workflows/SKILL.md +15 -10
- package/dist/global-skills/eas-workflows/scripts/package.json +2 -7
- package/dist/global-skills/email-best-practices/.github/workflows/sync-skills.yml +30 -0
- package/dist/global-skills/email-best-practices/README.md +63 -0
- package/dist/global-skills/email-best-practices/references/accessibility.md +189 -0
- package/dist/global-skills/email-best-practices/references/compliance.md +125 -0
- package/dist/global-skills/email-best-practices/references/deliverability.md +121 -0
- package/dist/global-skills/email-best-practices/references/email-capture.md +129 -0
- package/dist/global-skills/email-best-practices/references/email-types.md +173 -0
- package/dist/global-skills/email-best-practices/references/list-management.md +157 -0
- package/dist/global-skills/email-best-practices/references/marketing-emails.md +115 -0
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +155 -0
- package/dist/global-skills/email-best-practices/references/transactional-email-catalog.md +418 -0
- package/dist/global-skills/email-best-practices/references/transactional-emails.md +92 -0
- package/dist/global-skills/email-best-practices/references/webhooks-events.md +167 -0
- package/dist/global-skills/email-best-practices/tests/README.md +35 -0
- package/dist/global-skills/email-best-practices/tests/scenarios/01-spam-deliverability.md +46 -0
- package/dist/global-skills/email-best-practices/tests/scenarios/02-multi-region-compliance.md +48 -0
- package/dist/global-skills/email-best-practices/tests/scenarios/03-retry-idempotency.md +36 -0
- package/dist/global-skills/email-best-practices/tests/scenarios/04-webhook-bounce-handling.md +52 -0
- package/dist/global-skills/email-best-practices/tests/scenarios/05-new-saas-email-plan.md +51 -0
- package/dist/global-skills/expo-animation/LICENSE +21 -0
- package/dist/global-skills/expo-animation/RECIPES.md +385 -0
- package/dist/global-skills/expo-animation/SKILL.md +267 -0
- package/dist/global-skills/expo-animation/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +8 -0
- package/dist/global-skills/expo-brownfield/SKILL.md +8 -0
- package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +53 -4
- package/dist/global-skills/expo-data-fetching/SKILL.md +8 -0
- package/dist/global-skills/expo-design-system/SKILL.md +356 -0
- package/dist/global-skills/expo-design-system/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-design-system/references/audit.md +185 -0
- package/dist/global-skills/expo-dev-client/SKILL.md +8 -0
- package/dist/global-skills/expo-dom/SKILL.md +8 -0
- package/dist/global-skills/expo-examples/SKILL.md +8 -0
- package/dist/global-skills/expo-migrate-module/SKILL.md +113 -0
- package/dist/global-skills/expo-migrate-module/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-migrate-module/references/compatibility.md +73 -0
- package/dist/global-skills/expo-migrate-module/references/example.md +212 -0
- package/dist/global-skills/expo-migrate-module/references/migration-map.md +306 -0
- package/dist/global-skills/expo-module/SKILL.md +11 -1
- package/dist/global-skills/expo-native-ui/SKILL.md +8 -0
- package/dist/global-skills/expo-project-structure/SKILL.md +114 -0
- package/dist/global-skills/expo-project-structure/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-router/SKILL.md +8 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +66 -33
- package/dist/global-skills/expo-skill-feedback/agents/openai.yaml +2 -2
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +8 -0
- package/dist/global-skills/expo-ui/SKILL.md +8 -0
- package/dist/global-skills/expo-upgrade/SKILL.md +15 -1
- package/dist/global-skills/expo-web-to-native/SKILL.md +8 -0
- package/dist/global-skills/extension-to-functions-codebase/SKILL.md +129 -0
- package/dist/global-skills/extension-to-functions-codebase/references/configuration-migration.md +161 -0
- package/dist/global-skills/extension-to-functions-codebase/references/destructuring-shim.md +122 -0
- package/dist/global-skills/extension-to-functions-codebase/references/signature-mapping.md +84 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +61 -19
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +6 -3
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +5 -1
- package/dist/global-skills/firebase-auth-basics/SKILL.md +4 -2
- package/dist/global-skills/firebase-basics/SKILL.md +5 -5
- package/dist/global-skills/firebase-crashlytics/SKILL.md +2 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -0
- package/dist/global-skills/firebase-firestore/SKILL.md +3 -6
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +4 -1
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +5 -1
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +4 -1
- package/dist/global-skills/harden/SKILL.md +2 -1
- package/dist/global-skills/instrument-feature-flags/SKILL.md +1 -0
- package/dist/global-skills/instrument-feature-flags/references/COMMANDMENTS.md +5 -0
- package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/android.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/api.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/best-practices.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/django.md +38 -5
- package/dist/global-skills/instrument-feature-flags/references/dotnet.md +10 -4
- package/dist/global-skills/instrument-feature-flags/references/elixir.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/flask.md +17 -5
- package/dist/global-skills/instrument-feature-flags/references/flutter.md +7 -5
- package/dist/global-skills/instrument-feature-flags/references/go.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/ios.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/java.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/laravel.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/next-js.md +74 -8
- package/dist/global-skills/instrument-feature-flags/references/nodejs.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/php.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/python.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/react-native.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/react.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/ruby.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/rust.md +6 -4
- package/dist/global-skills/instrument-feature-flags/references/usage.md +41 -4
- package/dist/global-skills/instrument-feature-flags/references/web.md +7 -5
- package/dist/global-skills/instrument-product-analytics/SKILL.md +2 -1
- package/dist/global-skills/instrument-product-analytics/references/COMMANDMENTS.md +5 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +12 -14
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +25 -21
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-django.md +75 -55
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-fastapi.md +3 -6
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-flask.md +26 -16
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-3-6.md +8 -5
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-4.md +4 -4
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-framework.md +3 -3
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +8 -4
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-tanstack-start.md +20 -8
- package/dist/global-skills/instrument-product-analytics/references/android.md +46 -4
- package/dist/global-skills/instrument-product-analytics/references/angular.md +41 -5
- package/dist/global-skills/instrument-product-analytics/references/astro.md +41 -5
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +7 -4
- package/dist/global-skills/instrument-product-analytics/references/django.md +38 -5
- package/dist/global-skills/instrument-product-analytics/references/dotnet.md +10 -4
- package/dist/global-skills/instrument-product-analytics/references/elixir.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/flask.md +17 -5
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +49 -4
- package/dist/global-skills/instrument-product-analytics/references/go.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/identify-users.md +38 -7
- package/dist/global-skills/instrument-product-analytics/references/ios.md +14 -4
- package/dist/global-skills/instrument-product-analytics/references/laravel.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/next-js.md +74 -8
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +39 -7
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +40 -4
- package/dist/global-skills/instrument-product-analytics/references/php.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +21 -17
- package/dist/global-skills/instrument-product-analytics/references/python.md +15 -5
- package/dist/global-skills/instrument-product-analytics/references/react-native.md +41 -7
- package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +18 -4
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +18 -4
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +18 -4
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +18 -4
- package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/ruby.md +6 -4
- package/dist/global-skills/instrument-product-analytics/references/svelte.md +42 -6
- package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +31 -7
- package/dist/global-skills/instrument-product-analytics/references/usage.md +41 -4
- package/dist/global-skills/instrument-product-analytics/references/vue-js.md +42 -6
- package/dist/global-skills/manifest.json +6 -1
- package/dist/global-skills/neon/SKILL.md +235 -121
- package/dist/global-skills/neon-ai-gateway/SKILL.md +95 -16
- package/dist/global-skills/neon-functions/SKILL.md +242 -152
- package/dist/global-skills/neon-functions/references/ai-sdk.md +9 -3
- package/dist/global-skills/neon-functions/references/mastra-studio.md +1 -1
- package/dist/global-skills/neon-functions/references/mcp.md +13 -4
- package/dist/global-skills/neon-functions/references/sentry.md +165 -52
- package/dist/global-skills/neon-functions/references/sse.md +23 -6
- package/dist/global-skills/neon-object-storage/SKILL.md +40 -16
- package/dist/global-skills/neon-postgres/SKILL.md +63 -262
- package/dist/global-skills/neon-postgres-branches/SKILL.md +61 -50
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +22 -3
- package/dist/global-skills/resend/SKILL.md +6 -6
- package/dist/global-skills/resend/references/automations.md +2 -2
- package/dist/global-skills/resend/references/broadcasts.md +11 -3
- package/dist/global-skills/resend/references/domains.md +25 -3
- package/dist/global-skills/resend/references/installation.md +7 -7
- package/dist/global-skills/setup-payments/SKILL.md +4 -5
- package/dist/global-skills/stripe-best-practices/SKILL.md +32 -7
- package/dist/global-skills/stripe-best-practices/references/billing.md +11 -1
- package/dist/global-skills/stripe-best-practices/references/payments.md +23 -2
- package/dist/global-skills/stripe-best-practices/references/security.md +21 -11
- package/dist/global-skills/stripe-best-practices/references/tax.md +116 -11
- package/dist/global-skills/supabase/CHANGELOG.md +25 -0
- package/dist/global-skills/supabase/SKILL.md +5 -1
- package/dist/global-skills/supabase-postgres-best-practices/CHANGELOG.md +30 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +1 -1
- package/dist/global-skills/use-kit-mcp/SKILL.md +5 -5
- package/dist/global-skills/use-railway/SKILL.md +4 -4
- package/dist/global-skills/use-railway/references/iac.md +206 -57
- package/dist/global-skills/use-railway/scripts/railway-api.sh +7 -2
- package/dist/global-skills/xcode-project-setup/SKILL.md +2 -0
- package/package.json +12 -9
- package/LICENSE.md +0 -47
- package/dist/global-skills/eas-workflows/scripts/validate.js +0 -84
- package/dist/global-skills/expo-skill-feedback/scripts/skill-feedback.cjs +0 -118
- package/dist/global-skills/neon-functions/references/hono-websockets.md +0 -145
|
@@ -8,8 +8,19 @@ description: >-
|
|
|
8
8
|
include: "quick postgres", "temporary postgres", "no signup database",
|
|
9
9
|
"no credit card database", "instant DATABASE_URL", "npx neon-new", "neon.new",
|
|
10
10
|
"neon.new API", "claimable postgres API".
|
|
11
|
+
metadata:
|
|
12
|
+
parent: neon
|
|
13
|
+
source: https://github.com/neondatabase/agent-skills/tree/main/skills/claimable-postgres
|
|
11
14
|
---
|
|
12
15
|
|
|
16
|
+
**FIRST**: Use the parent `neon` skill for a Neon overview, getting started with Neon, Neon development best practices, and more.
|
|
17
|
+
|
|
18
|
+
If the `neon` skill is not installed, fetch it from https://neon.com/docs/ai/skills/neon/SKILL.md or install it with:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx skills add neondatabase/agent-skills --skill neon
|
|
22
|
+
```
|
|
23
|
+
|
|
13
24
|
# Claimable Postgres
|
|
14
25
|
|
|
15
26
|
Instant Postgres databases for local development, demos, prototyping, and test environments. No account required. Databases expire after 72 hours unless claimed to a Neon account.
|
|
@@ -34,6 +45,55 @@ For other methods (CLI, SDK, Vite plugin), see [Which Method?](#which-method) be
|
|
|
34
45
|
- **Vite plugin** (`vite-plugin-neon-new`): Auto-provisions on `vite dev` if `DATABASE_URL` is missing. Use when the user has a Vite project.
|
|
35
46
|
- **Browser**: User cannot run CLI or API. Direct to https://neon.new.
|
|
36
47
|
|
|
48
|
+
## Auto-provisioning
|
|
49
|
+
|
|
50
|
+
If the agent needs a database to fulfill a task (e.g. "build me a todo app with a real database") and the user has not provided a connection string, provision one via the API and inform the user. Include the claim URL so they can keep it.
|
|
51
|
+
|
|
52
|
+
## Agent Workflow
|
|
53
|
+
|
|
54
|
+
### API path
|
|
55
|
+
|
|
56
|
+
1. **Confirm intent:** If the request is ambiguous, confirm the user wants a temporary, no-signup database. Skip this if they explicitly asked for a quick or temporary database.
|
|
57
|
+
2. **Provision:** POST to `https://neon.new/api/v1/database` with `{"ref": "agent-skills"}`.
|
|
58
|
+
3. **Parse response:** Extract `connection_string`, `claim_url`, and `expires_at` from the JSON response.
|
|
59
|
+
4. **Write .env:** Write `DATABASE_URL=<connection_string>` to the project's `.env` (or the user's preferred file and key). Do not overwrite an existing key without confirmation.
|
|
60
|
+
5. **Seed (if needed):** If the user has a seed SQL file, run it against the new database:
|
|
61
|
+
```bash
|
|
62
|
+
psql "$DATABASE_URL" -f seed.sql
|
|
63
|
+
```
|
|
64
|
+
6. **Report:** Cover every item in the [Output Checklist](#output-checklist).
|
|
65
|
+
7. **Optional:** Offer a quick connection test (e.g. `SELECT 1`).
|
|
66
|
+
|
|
67
|
+
### CLI path
|
|
68
|
+
|
|
69
|
+
1. **Check .env:** Check the target `.env` for an existing `DATABASE_URL` (or chosen key). If present, do not run. Offer remove, `--env`, or `--key` and get confirmation (see [Pre-run Check](#pre-run-check)).
|
|
70
|
+
2. **Confirm intent:** If the request is ambiguous, confirm the user wants a temporary, no-signup database. Skip this if they explicitly asked for a quick or temporary database.
|
|
71
|
+
3. **Gather options:** Use defaults unless context suggests otherwise (e.g., user mentions a custom env file, seed SQL, or logical replication).
|
|
72
|
+
4. **Run:** Execute with `@latest --yes` plus the confirmed options. Always use `@latest` to avoid stale cached versions. `--yes` skips interactive prompts that would stall the agent.
|
|
73
|
+
```bash
|
|
74
|
+
npx neon-new@latest --yes --ref agent-skills --env .env.local --seed ./schema.sql
|
|
75
|
+
```
|
|
76
|
+
5. **Verify:** Confirm the connection string was written to the intended file.
|
|
77
|
+
6. **Report:** Cover every item in the [Output Checklist](#output-checklist).
|
|
78
|
+
7. **Optional:** Offer a quick connection test (e.g. `SELECT 1`).
|
|
79
|
+
|
|
80
|
+
### Output Checklist
|
|
81
|
+
|
|
82
|
+
Always report:
|
|
83
|
+
|
|
84
|
+
- Where the connection string was written (e.g. `.env`)
|
|
85
|
+
- Which variable key was used (`DATABASE_URL` or custom key)
|
|
86
|
+
- The claim URL (from `.env` or API response)
|
|
87
|
+
- That unclaimed databases are temporary (72 hours): the database works now, and claiming within 72 hours keeps it permanently
|
|
88
|
+
|
|
89
|
+
## Safety and UX Notes
|
|
90
|
+
|
|
91
|
+
- Do not overwrite existing env vars. Check first, then use `--env` or `--key` (CLI) or skip writing (API) to avoid conflicts.
|
|
92
|
+
- Ask before running destructive seed SQL (`DROP`, `TRUNCATE`, mass `DELETE`).
|
|
93
|
+
- For production workloads, recommend standard Neon provisioning instead of temporary claimable databases.
|
|
94
|
+
- If users need long-term persistence, instruct them to open the claim URL right away.
|
|
95
|
+
- After writing credentials to an .env file, check that it's covered by .gitignore. If not, warn the user. Do not modify `.gitignore` without confirmation.
|
|
96
|
+
|
|
37
97
|
## REST API
|
|
38
98
|
|
|
39
99
|
**Base URL:** `https://neon.new/api/v1`
|
|
@@ -148,43 +208,6 @@ Returns `databaseUrl` (pooled), `databaseUrlDirect` (direct, for migrations), `c
|
|
|
148
208
|
|
|
149
209
|
For Vite projects, `vite-plugin-neon-new` auto-provisions a database on `vite dev` if `DATABASE_URL` is missing. Install with `npm install -D vite-plugin-neon-new`. See the [Claimable Postgres docs](https://neon.com/docs/reference/claimable-postgres#vite-plugin) for configuration.
|
|
150
210
|
|
|
151
|
-
## Agent Workflow
|
|
152
|
-
|
|
153
|
-
### API path
|
|
154
|
-
|
|
155
|
-
1. **Confirm intent:** If the request is ambiguous, confirm the user wants a temporary, no-signup database. Skip this if they explicitly asked for a quick or temporary database.
|
|
156
|
-
2. **Provision:** POST to `https://neon.new/api/v1/database` with `{"ref": "agent-skills"}`.
|
|
157
|
-
3. **Parse response:** Extract `connection_string`, `claim_url`, and `expires_at` from the JSON response.
|
|
158
|
-
4. **Write .env:** Write `DATABASE_URL=<connection_string>` to the project's `.env` (or the user's preferred file and key). Do not overwrite an existing key without confirmation.
|
|
159
|
-
5. **Seed (if needed):** If the user has a seed SQL file, run it against the new database:
|
|
160
|
-
```bash
|
|
161
|
-
psql "$DATABASE_URL" -f seed.sql
|
|
162
|
-
```
|
|
163
|
-
6. **Report:** Tell the user where the connection string was written, which key was used, and share the claim URL. Remind them: the database works now; claim within 72 hours to keep it permanently.
|
|
164
|
-
7. **Optional:** Offer a quick connection test (e.g. `SELECT 1`).
|
|
165
|
-
|
|
166
|
-
### CLI path
|
|
167
|
-
|
|
168
|
-
1. **Check .env:** Check the target `.env` for an existing `DATABASE_URL` (or chosen key). If present, do not run. Offer remove, `--env`, or `--key` and get confirmation.
|
|
169
|
-
2. **Confirm intent:** If the request is ambiguous, confirm the user wants a temporary, no-signup database. Skip this if they explicitly asked for a quick or temporary database.
|
|
170
|
-
3. **Gather options:** Use defaults unless context suggests otherwise (e.g., user mentions a custom env file, seed SQL, or logical replication).
|
|
171
|
-
4. **Run:** Execute with `@latest --yes` plus the confirmed options. Always use `@latest` to avoid stale cached versions. `--yes` skips interactive prompts that would stall the agent.
|
|
172
|
-
```bash
|
|
173
|
-
npx neon-new@latest --yes --ref agent-skills --env .env.local --seed ./schema.sql
|
|
174
|
-
```
|
|
175
|
-
5. **Verify:** Confirm the connection string was written to the intended file.
|
|
176
|
-
6. **Report:** Tell the user where the connection string was written, which key was used, and that a claim URL is in the env file. Remind them: the database works now; claim within 72 hours to keep it permanently.
|
|
177
|
-
7. **Optional:** Offer a quick connection test (e.g. `SELECT 1`).
|
|
178
|
-
|
|
179
|
-
### Output Checklist
|
|
180
|
-
|
|
181
|
-
Always report:
|
|
182
|
-
|
|
183
|
-
- Where the connection string was written (e.g. `.env`)
|
|
184
|
-
- Which variable key was used (`DATABASE_URL` or custom key)
|
|
185
|
-
- The claim URL (from `.env` or API response)
|
|
186
|
-
- That unclaimed databases are temporary (72 hours)
|
|
187
|
-
|
|
188
211
|
## Claiming
|
|
189
212
|
|
|
190
213
|
Claiming is optional. The database works immediately without it. To optionally claim, the user opens the claim URL in a browser, where they sign in or create a Neon account to claim the database.
|
|
@@ -235,15 +258,3 @@ Region cannot be changed for claimable databases. Unclaimed databases have stric
|
|
|
235
258
|
| Transfer | 1 GB | ~5 GB |
|
|
236
259
|
| Branches | No | Yes |
|
|
237
260
|
| Expiration | 72 hours | None |
|
|
238
|
-
|
|
239
|
-
## Auto-provisioning
|
|
240
|
-
|
|
241
|
-
If the agent needs a database to fulfill a task (e.g. "build me a todo app with a real database") and the user has not provided a connection string, provision one via the API and inform the user. Include the claim URL so they can keep it.
|
|
242
|
-
|
|
243
|
-
## Safety and UX Notes
|
|
244
|
-
|
|
245
|
-
- Do not overwrite existing env vars. Check first, then use `--env` or `--key` (CLI) or skip writing (API) to avoid conflicts.
|
|
246
|
-
- Ask before running destructive seed SQL (`DROP`, `TRUNCATE`, mass `DELETE`).
|
|
247
|
-
- For production workloads, recommend standard Neon provisioning instead of temporary claimable databases.
|
|
248
|
-
- If users need long-term persistence, instruct them to open the claim URL right away.
|
|
249
|
-
- After writing credentials to an .env file, check that it's covered by .gitignore. If not, warn the user. Do not modify `.gitignore` without confirmation.
|
|
@@ -30,6 +30,8 @@ translate every error · celebrate. You do all the planning; the builder describ
|
|
|
30
30
|
**Verify:** builder says yes.
|
|
31
31
|
|
|
32
32
|
4. **Route to save-data.** Hand off to `save-data.md` to provision the database, wire CRUD, and test.
|
|
33
|
+
When `DATA_PROVIDER=supabase`, pick an RLS preset from `infra/supabase/policies/` (user-owned,
|
|
34
|
+
team-owned, or public-read) and include it in the migration — see `harden.md` step on database rules.
|
|
33
35
|
**Verify:** `save-data` definition of done.
|
|
34
36
|
|
|
35
37
|
## When to skip
|
|
@@ -150,3 +150,11 @@ eas build:view
|
|
|
150
150
|
# View submission status
|
|
151
151
|
eas submit:list
|
|
152
152
|
```
|
|
153
|
+
|
|
154
|
+
## Submitting Feedback
|
|
155
|
+
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
|
|
156
|
+
```bash
|
|
157
|
+
npx --yes submit-expo-feedback@latest --category skills --subject "eas-app-stores" "<actionable feedback>"
|
|
158
|
+
```
|
|
159
|
+
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
|
|
160
|
+
If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
2. **App Created in Console** - Create your app listing before first submission
|
|
7
7
|
3. **Service Account** - For automated submissions via EAS
|
|
8
8
|
|
|
9
|
+
Once these are complete, the default `eas submit` works for a first-time submission and creates the app's first release on the internal testing track. Store listing, content rating, and pricing are only required before promoting a release to production.
|
|
10
|
+
|
|
9
11
|
## Service Account Setup
|
|
10
12
|
|
|
11
13
|
### 1. Create Service Account
|
|
@@ -421,3 +421,11 @@ export async function GET(request: Request) {
|
|
|
421
421
|
- Keep API routes focused — one responsibility per endpoint
|
|
422
422
|
- Use TypeScript for type safety
|
|
423
423
|
- Log errors server-side for debugging
|
|
424
|
+
|
|
425
|
+
## Submitting Feedback
|
|
426
|
+
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
|
|
427
|
+
```bash
|
|
428
|
+
npx --yes submit-expo-feedback@latest --category skills --subject "eas-hosting" "<actionable feedback>"
|
|
429
|
+
```
|
|
430
|
+
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
|
|
431
|
+
If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
|
|
@@ -1,32 +1,54 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eas-observe
|
|
3
|
-
description: EAS service (paid). Use for anything related to EAS Observe - adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, the Expo Router / React Navigation integrations for per-route metrics,
|
|
4
|
-
version: 1.
|
|
3
|
+
description: EAS service (paid). Use for anything related to EAS Observe - adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive and ObserveInteractiveMarker, the useObserve hook, the Expo Router / React Navigation integrations for per-route metrics, user-defined events via `Observe.logEvent`, error reporting via ObserveErrorBoundary and `Observe.reportError`, and runtime config such as sampleRate and dispatchInDebug), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:session`, `observe:versions`), interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate/device/network params for triaging slow startups), or shipping an Observe integration inside a third-party package.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
license: MIT
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# EAS Observe
|
|
9
9
|
|
|
10
|
-
> **EAS service - costs apply.** EAS Observe is
|
|
10
|
+
> **EAS service - costs apply.** EAS Observe is an Expo Application Services product. The free EAS plan allows up to 10,000 monthly active users, with a limited set of features; higher usage requires a paid subscription. For details, see https://expo.dev/pricing#plan-features.
|
|
11
11
|
|
|
12
|
-
EAS Observe tracks startup, navigation, and custom-event performance from production Expo apps.
|
|
12
|
+
EAS Observe tracks startup, navigation, and custom-event performance from production Expo apps. It needs a development or production build — the native library is not in Expo Go.
|
|
13
13
|
|
|
14
14
|
> **Source of truth:** https://docs.expo.dev/eas/observe/ — always consult the canonical docs when API details matter, especially get-started, configuration, integrations, and the metrics reference. EAS Observe is evolving; this skill's references are written to stay accurate but may lag the docs.
|
|
15
15
|
|
|
16
16
|
## Which reference to read
|
|
17
17
|
|
|
18
|
-
The
|
|
18
|
+
The four reference files in `./references/` cover what people typically need this skill for:
|
|
19
19
|
|
|
20
|
-
- **Adding EAS Observe to a project** → [`./references/setup.md`](./references/setup.md). Install, wrap the root layout (`AppMetricsRoot` on SDK 55, `ObserveRoot` on SDK 56+),
|
|
21
|
-
- **Querying metrics from the terminal** → [`./references/queries.md`](./references/queries.md). The
|
|
22
|
-
- **Reading a dashboard or CLI output** → [`./references/metrics.md`](./references/metrics.md). Target thresholds per metric, what the TTI `frameRate
|
|
20
|
+
- **Adding EAS Observe to a project** → [`./references/setup.md`](./references/setup.md). Install, wrap the root layout (`AppMetricsRoot` on SDK 55, `ObserveRoot` on SDK 56+), mark the app interactive (global `markInteractive()` on SDK 55, the `useObserve()` hook or `<ObserveInteractiveMarker />` on SDK 56+), optional per-route navigation metrics through the Expo Router / React Navigation integrations, user-defined events via `Observe.logEvent` (SDK 56+), error reporting, and runtime configuration (sampling, dispatch, environments, custom endpoint).
|
|
21
|
+
- **Querying metrics from the terminal** → [`./references/queries.md`](./references/queries.md). The six `eas observe:*` commands — `metrics-summary`, `metrics`, `routes`, `events`, `session`, `versions` — with flags, metric aliases, table layouts, JSON shapes, and common workflows.
|
|
22
|
+
- **Reading a dashboard or CLI output** → [`./references/metrics.md`](./references/metrics.md). Target thresholds per metric, what the automatic TTI params mean (`frameRate.*`, `device.*`, `network.*`), and diagnostic patterns for telling slow-but-smooth startup apart from main-thread contention, hard blocks, or throttled devices.
|
|
23
|
+
- **Shipping an Observe integration in a library** → [`./references/third-party.md`](./references/third-party.md). For package authors only (SDK 57+): optional peer dependency, config declaration merging, `Observe.registerIntegration()`, and event naming.
|
|
23
24
|
|
|
24
25
|
## Quick links to the docs
|
|
25
26
|
|
|
26
27
|
- Get started: https://docs.expo.dev/eas/observe/get-started/
|
|
27
28
|
- Dashboard guide: https://docs.expo.dev/eas/observe/dashboard/
|
|
29
|
+
- Querying with EAS CLI: https://docs.expo.dev/eas/observe/eas-cli/
|
|
28
30
|
- Metrics reference: https://docs.expo.dev/eas/observe/reference/metrics/
|
|
29
31
|
- Expo Router integration: https://docs.expo.dev/eas/observe/integrations/expo-router/
|
|
30
32
|
- React Navigation integration: https://docs.expo.dev/eas/observe/integrations/react-navigation/
|
|
31
33
|
- User-defined events: https://docs.expo.dev/eas/observe/events/
|
|
32
34
|
- Configuration: https://docs.expo.dev/eas/observe/configuration/
|
|
35
|
+
- Third-party integrations: https://docs.expo.dev/eas/observe/integrations/third-party/
|
|
36
|
+
- EAS Update download performance: https://docs.expo.dev/eas/observe/eas-update/
|
|
37
|
+
- Troubleshooting: https://docs.expo.dev/eas/observe/reference/troubleshooting/
|
|
38
|
+
|
|
39
|
+
## Known gaps between the docs and the shipped code
|
|
40
|
+
|
|
41
|
+
Verified against `eas-cli` 21.8.0 and `expo-observe` 57.0.9. Trust this skill's references over the docs on these points, but re-check with `--help` and the installed package before relying on them:
|
|
42
|
+
|
|
43
|
+
- All six CLI commands are on the [Querying with EAS CLI](https://docs.expo.dev/eas/observe/eas-cli/) page. Older doc builds list only four and omit `observe:routes` and `observe:session`.
|
|
44
|
+
- Navigation metric aliases are `nav_cold_ttr`, `nav_warm_ttr`, and `nav_tti`. There are no bare `cold_ttr` / `warm_ttr` aliases in the CLI.
|
|
45
|
+
- Sorting uses `--sort <slowest|fastest|newest|oldest>`. There is no `--order` flag.
|
|
46
|
+
- `ObserveErrorBoundary`, `Observe.reportError`, and `configure({ errorHandlingEnabled })` are exported but undocumented. Observe still has no crash reporting; use Sentry or BugSnag for that.
|
|
47
|
+
|
|
48
|
+
## Submitting Feedback
|
|
49
|
+
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
|
|
50
|
+
```bash
|
|
51
|
+
npx --yes submit-expo-feedback@latest --category skills --subject "eas-observe" "<actionable feedback>"
|
|
52
|
+
```
|
|
53
|
+
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
|
|
54
|
+
If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "EAS Observe"
|
|
3
3
|
short_description: "Paid EAS service. Set up expo-observe app metrics and query launch, route, event, and version performance with the EAS CLI"
|
|
4
|
-
default_prompt: "Use $eas-observe to add expo-observe instrumentation (AppMetricsRoot/ObserveRoot, useObserve, the router integrations), query metrics with eas observe:* commands, and interpret cold/warm launch, TTR, and TTI results."
|
|
4
|
+
default_prompt: "Use $eas-observe to add expo-observe instrumentation (AppMetricsRoot/ObserveRoot, useObserve, ObserveInteractiveMarker, the router integrations, error reporting), query metrics with eas observe:* commands, and interpret cold/warm launch, TTR, and TTI results."
|
|
@@ -4,7 +4,7 @@ Quick reference for reading EAS Observe dashboards and CLI output.
|
|
|
4
4
|
|
|
5
5
|
> Source: https://docs.expo.dev/eas/observe/reference/metrics/ — this is the canonical reference for metrics. Consult this page for the latest guidance, full prose definitions, optimization tips, and rationale.
|
|
6
6
|
|
|
7
|
-
All durations are in seconds.
|
|
7
|
+
All durations are in seconds. Metric data is retained for a minimum of 60 days. By default, every installation dispatches all of its events; high-volume apps can sample per installation with `configure({ sampleRate })` — see [Sampling](https://docs.expo.dev/eas/observe/configuration/#sampling).
|
|
8
8
|
|
|
9
9
|
## Target thresholds
|
|
10
10
|
|
|
@@ -18,9 +18,11 @@ All durations are in seconds. Data is retained for 90 days. All durations are in
|
|
|
18
18
|
|
|
19
19
|
Both TTR and TTI are measured *from native launch* through the React render, so the cold-launch portion counts against them.
|
|
20
20
|
|
|
21
|
-
## Interpreting TTI events (
|
|
21
|
+
## Interpreting TTI events (automatic params)
|
|
22
22
|
|
|
23
|
-
Every TTI event carries three frame
|
|
23
|
+
Every TTI event carries automatic params in three groups: frame rate, device state, and network state. Read the frame-rate group to classify *what kind* of slowness you're seeing, then read the device and network groups to decide whether the cause is the code or the conditions.
|
|
24
|
+
|
|
25
|
+
### Frame rate — what kind of slowness
|
|
24
26
|
|
|
25
27
|
| Param | Definition | What it indicates |
|
|
26
28
|
|---|---|---|
|
|
@@ -34,6 +36,55 @@ Every TTI event carries three frame-rate params. The pattern of high/low values
|
|
|
34
36
|
- **High TTI + high totalDelay + many slowFrames** → main-thread contention. Offload work, simplify the initial render tree.
|
|
35
37
|
- **High TTI + high totalDelay + any frozenFrames** → something is blocking hard. Look for synchronous I/O, large JSON parsing, or blocking network calls.
|
|
36
38
|
|
|
39
|
+
### Device state — is the regression environmental?
|
|
40
|
+
|
|
41
|
+
| Param | Type | What it indicates |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `expo.device.lowPowerMode` | boolean | OS power saver was active (Low Power Mode on iOS, Battery Saver on Android). It throttles CPU, GPU, and background work. A regression that disappears when you filter this out is environmental, not a code change. |
|
|
44
|
+
| `expo.device.thermalState` | `nominal` \| `fair` \| `serious` \| `critical` \| `unknown` | Sustained `serious`/`critical` means the OS is throttling. Startup slows independently of any app change. |
|
|
45
|
+
| `expo.device.batteryLevel` | number, 0–1 | Fractional charge at TTI. Rules out throttling on devices that manage performance aggressively at low charge. Omitted when the OS reports no value. |
|
|
46
|
+
| `expo.device.batteryCharging` | boolean | Charging raises sustained CPU ceilings on iOS and some Android OEMs. Non-charging samples are the more conservative population. |
|
|
47
|
+
|
|
48
|
+
### Network state — is startup network-bound?
|
|
49
|
+
|
|
50
|
+
| Param | Type | What it indicates |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `expo.network.connected` | boolean | If TTI degrades only when `true`, startup is network-bound. If it degrades when `false`, the app does too much before showing cached content. |
|
|
53
|
+
| `expo.network.type` | `wifi` \| `cellular` \| `ethernet` \| `none` \| `other` \| `unknown` | Compare cellular against Wi-Fi. A large gap points to network-bound startup work. VPN traffic reports the underlying transport. The value set is identical on both platforms, so dashboards need no per-platform branching. |
|
|
54
|
+
| `expo.network.isExpensive` | boolean | Both platforms. The OS considers the connection metered (cellular, hotspot). Present only when a network exists. |
|
|
55
|
+
| `expo.network.isConstrained` | boolean | **iOS only.** Low Data Mode is on for this path, so the system defers background transfers. |
|
|
56
|
+
| `expo.network.dataSaverEnabled` | boolean | **Android only.** Data Saver is on. It is the nearest equivalent of Low Data Mode, but process-wide rather than per-path, hence the separate key. |
|
|
57
|
+
|
|
58
|
+
### Network requests — was the network the cause?
|
|
59
|
+
|
|
60
|
+
TTI events summarize the HTTP requests made during launch, from the end of the native launch to the `markInteractive()` call. Traffic is observed automatically — `URLSession` on iOS, `OkHttpClient` on Android, which covers `fetch` — and Observe's own uploads are excluded. All of these are omitted when the window held no requests.
|
|
61
|
+
|
|
62
|
+
| Param | Unit | What it indicates |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| `expo.network.requests.count` | count | Requests that finished in the window. A request still in flight when the app became interactive is not counted anywhere in this table. |
|
|
65
|
+
| `expo.network.requests.failed` | count | Errored, returned 4xx/5xx, never got a response, or broke partway through the body. Redirects are not failures. |
|
|
66
|
+
| `expo.network.requests.bytesReceived` / `.bytesSent` | bytes | On-the-wire totals for the window. |
|
|
67
|
+
| `expo.network.requests.totalDuration` | seconds | Sum of every request duration, failures included. Exceeds wall-clock when requests overlap; one timeout contributes the client's full timeout interval. |
|
|
68
|
+
| `expo.network.requests.throughputBytesPerSecond` | bytes/sec | Received bytes over the time bytes were actually moving (union of transfer windows, measured from each first byte). Excludes DNS, connect, server think time, cache hits, and failures. Requests the OS did not clearly identify as network loads are excluded too. Omitted when nothing was received. |
|
|
69
|
+
| `expo.network.requests.slowest.duration` | seconds | The single longest **completed** request. Requests that never produced a response are excluded, since a timeout measures the client's own setting. |
|
|
70
|
+
| `expo.network.requests.slowest.host` | string | Host of that request. |
|
|
71
|
+
| `expo.network.requests.slowest.statusCode` | number | Explains an empty response: `bytesReceived` of 0 is routine on a 304, a problem on a 200. |
|
|
72
|
+
| `expo.network.requests.slowest.timeToFirstByte` | seconds | Includes server processing, so treat it as a proxy for network quality, not a measurement of it. |
|
|
73
|
+
| `expo.network.requests.slowest.bytesReceived` | bytes | Separates "slow because it moved a lot of data" from "slow while idle". |
|
|
74
|
+
|
|
75
|
+
**Diagnostic patterns:**
|
|
76
|
+
|
|
77
|
+
- **`slowest.duration` mostly `timeToFirstByte`** → the server was slow to answer. Optimize the endpoint, or stop blocking startup on it.
|
|
78
|
+
- **Small `timeToFirstByte` + large `bytesReceived`** → the transfer itself was slow. Shrink the payload or defer it.
|
|
79
|
+
- **High `failed` + high `totalDuration`** → the launch burned time on requests that never arrived. Add timeouts and render cached content first.
|
|
80
|
+
- **Low `throughputBytesPerSecond` on `wifi`** → suspect the population, not the code; cross-check `isExpensive` and `isConstrained` / `dataSaverEnabled`.
|
|
81
|
+
|
|
82
|
+
> The summary is bounded by an in-memory ring buffer of the 200 most recent requests. A launch that makes more undercounts, so read these as a sample of a very busy window.
|
|
83
|
+
|
|
84
|
+
### Custom params
|
|
85
|
+
|
|
86
|
+
You can attach your own params to the TTI event, and override the route name it is tagged with. See [`./setup.md`](./setup.md) for the call syntax.
|
|
87
|
+
|
|
37
88
|
## Dispatch caveats
|
|
38
89
|
|
|
39
90
|
- **Debug builds** (native debug OR JS bundle with `__DEV__` = true) do **not** dispatch metrics unless `configure({ dispatchInDebug: true })` is set.
|
|
@@ -1,34 +1,40 @@
|
|
|
1
1
|
# EAS Observe CLI
|
|
2
2
|
|
|
3
|
-
EAS Observe collects app performance telemetry and custom events from Expo apps and exposes them through
|
|
3
|
+
EAS Observe collects app performance telemetry and custom events from Expo apps and exposes them through six EAS CLI commands. Pass the `--help` flag to any command for the latest API — the flags below were verified against `eas-cli` 21.8.0.
|
|
4
|
+
|
|
5
|
+
> Source: https://docs.expo.dev/eas/observe/eas-cli/ — the canonical CLI page. This reference adds table layouts, JSON output shapes, and pagination details that the docs page does not cover.
|
|
4
6
|
|
|
5
7
|
## Commands Overview
|
|
6
8
|
|
|
7
9
|
| Command | Purpose |
|
|
8
10
|
|---------|---------|
|
|
9
|
-
| `eas observe:metrics-summary` | Per-version statistical aggregates for
|
|
10
|
-
| `eas observe:metrics` | Individual
|
|
11
|
-
| `eas observe:routes` | Per-route statistical aggregates for navigation metrics (Cold TTR, Warm TTR, Nav TTI) |
|
|
11
|
+
| `eas observe:metrics-summary` | Per-version statistical aggregates for startup and navigation metrics (median, p90, etc.) |
|
|
12
|
+
| `eas observe:metrics` | Individual metric samples ordered by value or timestamp (paginated) |
|
|
13
|
+
| `eas observe:routes` | Per-route statistical aggregates for navigation metrics (Nav Cold TTR, Nav Warm TTR, Nav TTI) |
|
|
12
14
|
| `eas observe:events` | Custom events emitted by the app via `logEvent` — name summary, all events, or filtered by event name (paginated) |
|
|
15
|
+
| `eas observe:session` | Full timeline of metric and log events for one session |
|
|
13
16
|
| `eas observe:versions` | App version hierarchy with build numbers, OTA update IDs, and event counts |
|
|
14
17
|
|
|
15
|
-
All
|
|
18
|
+
> Older published docs list only `metrics-summary`, `metrics`, `events`, and `versions`. All six are on the [Querying with EAS CLI](https://docs.expo.dev/eas/observe/eas-cli/) page; run `--help` to confirm them on your installed version.
|
|
19
|
+
|
|
20
|
+
All six commands share these flags:
|
|
16
21
|
|
|
17
|
-
- `--platform ios` or `--platform android` — filter by platform (default: both)
|
|
18
22
|
- `--start <ISO date>` and `--end <ISO date>` — explicit time range
|
|
19
|
-
- `--days <N>` — show data from the last N days (mutually exclusive with `--start`/`--end
|
|
23
|
+
- `--days <N>` — show data from the last N days (mutually exclusive with `--start`/`--end`, minimum 1)
|
|
20
24
|
- `--project-id <id>` — run against a specific project without needing a project directory. When passed, the command will not try to create a new EAS project where one is unneeded.
|
|
21
25
|
- `--json` — machine-readable output (implies `--non-interactive`)
|
|
22
26
|
- `--non-interactive` — fail instead of prompting
|
|
23
27
|
|
|
28
|
+
`--platform ios` / `--platform android` (default: both) is on every command **except `observe:session`**, which is scoped to one session already.
|
|
29
|
+
|
|
24
30
|
Default time range is the last 60 days when none of `--days`, `--start`, `--end` is given.
|
|
25
31
|
|
|
32
|
+
**Plan gating.** Observe is a paid feature, and the server rejects queries the account's plan does not include (`EAS_OBSERVE_PLAN_UPGRADE_REQUIRED` or `EAS_OBSERVE_FEATURE_NOT_AVAILABLE_IN_FREE_TIER`). The CLI surfaces the server's upgrade message, which links to the account's billing page. Session timelines in particular are checked before the interactive picker runs. A plan-gate failure is not a bug in the command or its flags.
|
|
33
|
+
|
|
26
34
|
## Supported Metrics
|
|
27
35
|
|
|
28
36
|
### App-startup metrics
|
|
29
37
|
|
|
30
|
-
Used by `observe:metrics-summary` and `observe:metrics`.
|
|
31
|
-
|
|
32
38
|
| Alias | Full name | Display |
|
|
33
39
|
|-------|-----------|---------|
|
|
34
40
|
| `tti` | `expo.app_startup.tti` | Startup TTI (time to interactive) |
|
|
@@ -40,14 +46,18 @@ Used by `observe:metrics-summary` and `observe:metrics`.
|
|
|
40
46
|
|
|
41
47
|
### Navigation metrics
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
Emitted only when a navigation integration is enabled (SDK 56+). Measured per route name.
|
|
44
50
|
|
|
45
51
|
| Alias | Full name | Display |
|
|
46
52
|
|-------|-----------|---------|
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
53
|
+
| `nav_cold_ttr` | `expo.navigation.cold_ttr` | Nav Cold TTR |
|
|
54
|
+
| `nav_warm_ttr` | `expo.navigation.warm_ttr` | Nav Warm TTR |
|
|
49
55
|
| `nav_tti` | `expo.navigation.tti` | Nav TTI |
|
|
50
56
|
|
|
57
|
+
**Which command takes which alias.** `observe:metrics` (positional argument) and `observe:metrics-summary --metric` accept **all nine** aliases — startup and navigation. `observe:routes --metric` accepts only the three navigation aliases. Use the `nav_` prefix everywhere; there are no bare `cold_ttr` / `warm_ttr` aliases.
|
|
58
|
+
|
|
59
|
+
`observe:metrics` also accepts a full metric name in place of an alias, for example `eas observe:metrics expo.app_startup.tti`. `observe:routes` accepts full navigation names the same way. The `--metric` flags on `metrics-summary` and `routes` are strict oclif options, so they take aliases only.
|
|
60
|
+
|
|
51
61
|
## `eas observe:metrics-summary`
|
|
52
62
|
|
|
53
63
|
Shows per-version statistical aggregates for one or more metrics, with separate tables per platform.
|
|
@@ -62,6 +72,9 @@ eas observe:metrics-summary --metric tti
|
|
|
62
72
|
# Multiple metrics — each renders as its own table
|
|
63
73
|
eas observe:metrics-summary --metric tti --metric cold_launch
|
|
64
74
|
|
|
75
|
+
# Navigation metrics aggregate per version here, per route in observe:routes
|
|
76
|
+
eas observe:metrics-summary --metric nav_tti
|
|
77
|
+
|
|
65
78
|
# Choose which statistics to display
|
|
66
79
|
eas observe:metrics-summary --metric tti --stat median --stat p90 --stat eventCount
|
|
67
80
|
|
|
@@ -69,9 +82,11 @@ eas observe:metrics-summary --metric tti --stat median --stat p90 --stat eventCo
|
|
|
69
82
|
eas observe:metrics-summary --metric tti --days 14 --platform ios
|
|
70
83
|
```
|
|
71
84
|
|
|
72
|
-
**Stat flags:** `min`, `
|
|
85
|
+
**Stat flags:** exactly `min`, `median`, `max`, `average`, `p80`, `p90`, `p99`, `eventCount`. This command takes **no aliases** — `med`, `avg`, and `count` are rejected here (they work only on `observe:routes`).
|
|
73
86
|
|
|
74
|
-
**Default stats:** `median` + `eventCount` in the table; all
|
|
87
|
+
**Default stats:** `median` + `eventCount` in the table; all eight in JSON.
|
|
88
|
+
|
|
89
|
+
This command has no `--limit`, `--after`, `--app-version`, or `--update-id`. It always aggregates every version in the time range.
|
|
75
90
|
|
|
76
91
|
**Table layout:**
|
|
77
92
|
- One table per metric (with merged value + event count cells, e.g. `0.45s (150)`)
|
|
@@ -111,6 +126,9 @@ eas observe:metrics
|
|
|
111
126
|
# Specify metric as positional arg
|
|
112
127
|
eas observe:metrics tti
|
|
113
128
|
|
|
129
|
+
# Navigation metrics work here too
|
|
130
|
+
eas observe:metrics nav_tti --sort slowest
|
|
131
|
+
|
|
114
132
|
# Filter by version or update, sort by slowest
|
|
115
133
|
eas observe:metrics tti --app-version 1.2.0 --sort slowest --limit 20
|
|
116
134
|
|
|
@@ -143,7 +161,7 @@ eas observe:routes
|
|
|
143
161
|
eas observe:routes --metric nav_tti --days 7 --platform ios
|
|
144
162
|
|
|
145
163
|
# Multiple metrics and stats
|
|
146
|
-
eas observe:routes --metric
|
|
164
|
+
eas observe:routes --metric nav_cold_ttr --metric nav_warm_ttr --stat median --stat p90 --stat count
|
|
147
165
|
|
|
148
166
|
# Filter to a single build
|
|
149
167
|
eas observe:routes --app-version 1.2.0 --build-number 42
|
|
@@ -156,7 +174,7 @@ eas observe:routes --after <cursor>
|
|
|
156
174
|
```
|
|
157
175
|
|
|
158
176
|
**Routes-specific flags:**
|
|
159
|
-
- `--metric <
|
|
177
|
+
- `--metric <nav_cold_ttr|nav_warm_ttr|nav_tti>` — navigation metric(s) to display, can be repeated. Defaults to all three.
|
|
160
178
|
- `--stat <median|p90|count>` — statistic(s) per metric. Aliases: `med` → `median`, `event_count` / `eventCount` → `count`.
|
|
161
179
|
- `--limit <N>` — routes per page (default **50**, max **200**, different from `metrics`/`events` which default to 10).
|
|
162
180
|
- `--after <cursor>` — pagination cursor from the previous run.
|
|
@@ -222,7 +240,7 @@ eas observe:events login_failed --after <cursor>
|
|
|
222
240
|
|
|
223
241
|
**Events-specific flags:**
|
|
224
242
|
- `--all-events` — when no event name argument is given, list all events instead of the name summary. Cannot be combined with an event name argument.
|
|
225
|
-
- `--session-id <id>` — filter to events from a single session (events-only)
|
|
243
|
+
- `--session-id <id>` — filter to events from a single session (events-only). With no event name argument, this lists the session's events instead of the event-name summary. For the full timeline — metrics as well as log events — use `observe:session`.
|
|
226
244
|
- `--app-version <version>` — filter by app version string
|
|
227
245
|
- `--update-id <id>` — filter by EAS update ID
|
|
228
246
|
- `--limit <N>` — events per page (default 10, max 100)
|
|
@@ -267,6 +285,43 @@ eas observe:events login_failed --after <cursor>
|
|
|
267
285
|
|
|
268
286
|
The name-summary mode returns `{ "names": [{ "eventName": "...", "count": 123 }], "isTruncated": false }`.
|
|
269
287
|
|
|
288
|
+
## `eas observe:session`
|
|
289
|
+
|
|
290
|
+
Shows the full timeline of metric and log events for a single session — the CLI equivalent of the dashboard's session view. Use it after `observe:metrics` surfaces a slow sample: take that sample's `sessionId` (present in `--json` output) and replay everything that session recorded.
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Interactive: pick a metric, then pick a session from the candidate list
|
|
294
|
+
eas observe:session
|
|
295
|
+
|
|
296
|
+
# Inspect a known session
|
|
297
|
+
eas observe:session <session-id>
|
|
298
|
+
|
|
299
|
+
# Pick a session from the slowest TTI events in the last 7 days
|
|
300
|
+
eas observe:session --event-name tti --sort slowest --days 7
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Session-specific flags:**
|
|
304
|
+
- `[SESSIONID]` — positional. Omit it in interactive mode to choose from a list. **Required in non-interactive mode**, including under `--json`.
|
|
305
|
+
- `--event-name <name>` — metric or log event used to build the candidate session list (for example `tti`, `cold_launch`, `login_pressed`). Prompts when omitted in interactive mode.
|
|
306
|
+
- `--sort <slowest|fastest|newest|oldest>` — orders the candidate events. Prompts when omitted in interactive mode. No default, unlike `observe:metrics`.
|
|
307
|
+
|
|
308
|
+
**The picker flags and the session ID are mutually exclusive.** `--event-name`, `--sort`, `--days`, `--start`, and `--end` describe how to *find* a session, so passing any of them together with a session ID throws. Query a known session with the ID alone.
|
|
309
|
+
|
|
310
|
+
This command has no `--platform`, `--limit`, or `--after` flag. It takes the shared time-range, `--project-id`, `--json`, and `--non-interactive` flags.
|
|
311
|
+
|
|
312
|
+
**JSON output shape:**
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"sessionId": "...",
|
|
316
|
+
"metadata": { "...": "..." },
|
|
317
|
+
"entries": [{ "...": "..." }],
|
|
318
|
+
"hasMoreMetricEvents": false,
|
|
319
|
+
"hasMoreLogEvents": false
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
`entries` interleaves metric and log events for the session. The two `hasMore*` flags report truncation per event kind; there is no cursor to page with.
|
|
324
|
+
|
|
270
325
|
## `eas observe:versions`
|
|
271
326
|
|
|
272
327
|
Shows app version hierarchy with build numbers, OTA update IDs, and event counts per version.
|
|
@@ -305,6 +360,12 @@ eas observe:metrics-summary --metric update_download --days 7
|
|
|
305
360
|
eas observe:routes --metric nav_tti --stat median --stat p90 --days 7
|
|
306
361
|
```
|
|
307
362
|
|
|
363
|
+
**"What happened during that one slow session?"**
|
|
364
|
+
```bash
|
|
365
|
+
eas observe:metrics tti --sort slowest --days 7 --json # read sessionId from a sample
|
|
366
|
+
eas observe:session <session-id>
|
|
367
|
+
```
|
|
368
|
+
|
|
308
369
|
**"How does navigation perform on just the routes I care about?"**
|
|
309
370
|
```bash
|
|
310
371
|
eas observe:routes --route-name /home --route-name /checkout --days 7
|