vybekiit 0.7.29 → 0.7.33
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 +3407 -2769
- package/dist/global-guidance/language.md +7 -102
- package/dist/global-skills/add-ai/SKILL.md +7 -8
- package/dist/global-skills/add-analytics/SKILL.md +4 -7
- package/dist/global-skills/add-app-clip/SKILL.md +1 -0
- package/dist/global-skills/add-blog/SKILL.md +4 -7
- package/dist/global-skills/add-files/SKILL.md +4 -7
- package/dist/global-skills/add-images/SKILL.md +4 -7
- package/dist/global-skills/add-language/SKILL.md +5 -8
- package/dist/global-skills/add-notifications/SKILL.md +4 -7
- package/dist/global-skills/add-realtime/SKILL.md +4 -7
- package/dist/global-skills/add-search/SKILL.md +4 -7
- package/dist/global-skills/add-signin/SKILL.md +4 -8
- package/dist/global-skills/add-teams/SKILL.md +4 -7
- package/dist/global-skills/aws-cdk/SKILL.md +1 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +1 -0
- package/dist/global-skills/aws-serverless/SKILL.md +169 -32
- package/dist/global-skills/aws-serverless/references/api-gateway.md +17 -0
- package/dist/global-skills/aws-serverless/references/architecture.md +9 -13
- package/dist/global-skills/aws-serverless/references/compute-decision-edge-cases.md +77 -0
- package/dist/global-skills/aws-serverless/references/lambda.md +3 -3
- package/dist/global-skills/aws-serverless/references/orchestration.md +46 -20
- package/dist/global-skills/aws-serverless/references/production.md +1 -1
- package/dist/global-skills/better-auth-best-practices/SKILL.md +1 -0
- package/dist/global-skills/better-auth-security-best-practices/SKILL.md +1 -0
- package/dist/global-skills/building-native-ui/SKILL.md +1 -0
- package/dist/global-skills/buy-domain/SKILL.md +4 -7
- package/dist/global-skills/check-safety/SKILL.md +5 -8
- package/dist/global-skills/claimable-postgres/SKILL.md +1 -0
- package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
- package/dist/global-skills/connect-account/SKILL.md +1 -1
- package/dist/global-skills/create-auth-skill/SKILL.md +1 -0
- package/dist/global-skills/doctor/SKILL.md +1 -1
- package/dist/global-skills/eas-app-stores/SKILL.md +2 -1
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-hosting/SKILL.md +2 -1
- package/dist/global-skills/eas-hosting/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-observe/SKILL.md +2 -1
- package/dist/global-skills/eas-observe/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/SKILL.md +24 -16
- package/dist/global-skills/eas-simulator/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/references/controllers.md +11 -7
- package/dist/global-skills/eas-simulator/references/logs-and-crashes.md +101 -0
- package/dist/global-skills/eas-simulator/references/run-your-app.md +8 -8
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +14 -6
- package/dist/global-skills/eas-update/SKILL.md +2 -1
- package/dist/global-skills/eas-update/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-update-insights/SKILL.md +2 -1
- package/dist/global-skills/eas-update-insights/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-workflows/SKILL.md +2 -1
- package/dist/global-skills/eas-workflows/agents/openai.yaml +1 -1
- package/dist/global-skills/email-best-practices/SKILL.md +1 -0
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +17 -22
- package/dist/global-skills/expo-animation/SKILL.md +2 -1
- package/dist/global-skills/expo-api-routes/SKILL.md +1 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +2 -1
- package/dist/global-skills/expo-brownfield/SKILL.md +2 -1
- package/dist/global-skills/expo-cicd-workflows/SKILL.md +1 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +2 -1
- package/dist/global-skills/expo-deployment/SKILL.md +1 -0
- package/dist/global-skills/expo-design-system/SKILL.md +2 -1
- package/dist/global-skills/expo-dev-client/SKILL.md +2 -1
- package/dist/global-skills/expo-dom/SKILL.md +2 -1
- package/dist/global-skills/expo-examples/SKILL.md +2 -1
- package/dist/global-skills/expo-migrate-module/SKILL.md +2 -1
- package/dist/global-skills/expo-module/SKILL.md +2 -1
- package/dist/global-skills/expo-native-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-observe/SKILL.md +1 -0
- package/dist/global-skills/expo-overview/SKILL.md +2 -1
- package/dist/global-skills/expo-project-structure/SKILL.md +2 -1
- package/dist/global-skills/expo-router/SKILL.md +2 -1
- package/dist/global-skills/expo-skill-eval/SKILL.md +1 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +1 -0
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +1 -0
- package/dist/global-skills/expo-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-upgrade/SKILL.md +2 -1
- package/dist/global-skills/expo-web-to-native/SKILL.md +2 -1
- package/dist/global-skills/extension-to-functions-codebase/SKILL.md +2 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +162 -76
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +37 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +97 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/tts_generation.md +676 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +88 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +91 -3
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +6 -1
- package/dist/global-skills/firebase-auth-basics/SKILL.md +12 -6
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +61 -23
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +3 -3
- package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +22 -19
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +2 -2
- package/dist/global-skills/firebase-basics/SKILL.md +8 -2
- package/dist/global-skills/firebase-basics/references/android_setup.md +229 -23
- package/dist/global-skills/firebase-basics/references/ios_setup.md +57 -0
- package/dist/global-skills/firebase-basics/references/web_setup.md +52 -0
- package/dist/global-skills/firebase-crashlytics/SKILL.md +2 -0
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +99 -71
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +1 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -0
- package/dist/global-skills/firebase-data-connect/reference/config.md +8 -8
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +4 -1
- package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +84 -29
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +8 -3
- package/dist/global-skills/firebase-data-connect/reference/security.md +13 -13
- package/dist/global-skills/firebase-firestore/SKILL.md +18 -7
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +47 -21
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +2 -1
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +63 -27
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +2 -1
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +2 -0
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +3 -1
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +83 -92
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +8 -6
- package/dist/global-skills/firestore-rules-creation/SKILL.md +23 -10
- package/dist/global-skills/go-live/SKILL.md +7 -7
- package/dist/global-skills/harden/SKILL.md +7 -10
- package/dist/global-skills/instrument-feature-flags/SKILL.md +1 -0
- package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -0
- package/dist/global-skills/manifest.json +2 -1
- package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +1 -0
- package/dist/global-skills/mongodb-connection/SKILL.md +1 -0
- package/dist/global-skills/mongodb-mcp-setup/SKILL.md +1 -0
- package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +1 -0
- package/dist/global-skills/mongodb-qe-size-estimation/SKILL.md +224 -0
- package/dist/global-skills/mongodb-query-optimizer/SKILL.md +1 -0
- package/dist/global-skills/mongodb-schema-design/SKILL.md +1 -0
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +1 -0
- package/dist/global-skills/native-data-fetching/SKILL.md +1 -0
- package/dist/global-skills/neon/SKILL.md +34 -5
- package/dist/global-skills/neon-ai-gateway/SKILL.md +44 -14
- package/dist/global-skills/neon-auth/SKILL.md +1 -0
- package/dist/global-skills/neon-functions/SKILL.md +12 -0
- package/dist/global-skills/neon-functions/references/native-binaries.md +188 -0
- package/dist/global-skills/neon-object-storage/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres/SKILL.md +2 -1
- package/dist/global-skills/neon-postgres/references/full-text-search.md +27 -17
- package/dist/global-skills/neon-postgres/references/hybrid-search.md +19 -15
- package/dist/global-skills/neon-postgres/references/lakebase-search-drizzle.md +99 -14
- package/dist/global-skills/neon-postgres/references/vector-search.md +93 -10
- package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +1 -0
- package/dist/global-skills/onboarding/SKILL.md +14 -13
- package/dist/global-skills/plan-my-idea/SKILL.md +1 -1
- package/dist/global-skills/publish-app/SKILL.md +1 -1
- package/dist/global-skills/publish-extension/SKILL.md +1 -1
- package/dist/global-skills/resend/SKILL.md +5 -15
- package/dist/global-skills/resend/references/domains.md +1 -1
- package/dist/global-skills/resend/references/installation.md +3 -3
- package/dist/global-skills/resend/references/sending/best-practices.md +3 -3
- package/dist/global-skills/resend/references/sending/single-email-examples.md +3 -3
- package/dist/global-skills/resend/references/webhooks.md +2 -0
- package/dist/global-skills/reset-password/SKILL.md +4 -6
- package/dist/global-skills/save-data/SKILL.md +3 -0
- package/dist/global-skills/sentry-sdk-setup/SKILL.md +1 -0
- package/dist/global-skills/sentry-workflow/SKILL.md +1 -0
- package/dist/global-skills/setup-email/SKILL.md +7 -8
- package/dist/global-skills/setup-payments/SKILL.md +10 -12
- package/dist/global-skills/setup-sms/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +4 -6
- package/dist/global-skills/sign-in-with-google/SKILL.md +14 -13
- package/dist/global-skills/sign-in-with-phone/SKILL.md +5 -7
- package/dist/global-skills/stripe-best-practices/SKILL.md +20 -19
- package/dist/global-skills/stripe-best-practices/references/billing.md +2 -0
- package/dist/global-skills/stripe-best-practices/references/payments.md +1 -1
- package/dist/global-skills/stripe-best-practices/references/tax.md +27 -15
- package/dist/global-skills/supabase/CHANGELOG.md +19 -0
- package/dist/global-skills/supabase/SKILL.md +1 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/dist/global-skills/track-errors/SKILL.md +12 -13
- package/dist/global-skills/update-kit/SKILL.md +1 -1
- package/dist/global-skills/upgrading-expo/SKILL.md +1 -0
- package/dist/global-skills/use-dom/SKILL.md +1 -0
- package/dist/global-skills/use-railway/SKILL.md +9 -8
- package/dist/global-skills/use-railway/references/configure.md +34 -1
- package/dist/global-skills/use-railway/references/iac.md +3 -0
- package/dist/global-skills/use-railway/references/tracing.md +97 -44
- package/dist/global-skills/vercel-composition-patterns/SKILL.md +1 -0
- package/dist/global-skills/vercel-react-best-practices/SKILL.md +1 -0
- package/dist/global-skills/vybekiitReferences/backend/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-routes.json +229 -0
- package/dist/global-skills/vybekiitReferences/backend/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/backend/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-routes.json +239 -0
- package/dist/global-skills/vybekiitReferences/extension/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/extension/language.md +7 -92
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/AGENTS.md +27 -12
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-routes.json +279 -0
- package/dist/global-skills/vybekiitReferences/mobile/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/ui-sources.mobile.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/language.md +7 -93
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/ui-port-from-web-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/spa/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-routes.json +267 -0
- package/dist/global-skills/vybekiitReferences/spa/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/spa/language.md +7 -11
- package/dist/global-skills/vybekiitReferences/web/AGENTS.md +15 -30
- package/dist/global-skills/vybekiitReferences/web/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/agent/goal-routes.json +366 -0
- package/dist/global-skills/vybekiitReferences/web/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/web/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/web/platform-skills/ai-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/analytics-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/assets-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/better-auth-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/cms-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/compliance-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-github-pages-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-vercel-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/web/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/jobs-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/kv-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/lemon-squeezy-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/notifications-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/paypal-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/realtime-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/registrar-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/search-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/seo-vybekiit.md +1 -3
- package/dist/global-skills/vybekiitReferences/web/platform-skills/supabase-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/tenancy-vybekiit.md +1 -1
- package/dist/global-skills/web-to-native/SKILL.md +1 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +5 -4
- package/dist/global-skills/workers-best-practices/references/configuration.md +1 -1
- package/dist/global-skills/workers-best-practices/references/platform-apis.md +5 -5
- package/dist/global-skills/workers-best-practices/references/runtime-patterns.md +1 -1
- package/dist/global-skills/wrangler/SKILL.md +28 -25
- package/dist/global-skills/xcode-project-setup/SKILL.md +2 -0
- package/package.json +10 -8
|
@@ -7,6 +7,7 @@ Step Functions and EventBridge decision matrices, error semantics, and limits. A
|
|
|
7
7
|
- [Standard vs Express](#standard-vs-express)
|
|
8
8
|
- [State machine limits and patterns](#state-machine-limits-and-patterns)
|
|
9
9
|
- [Error handling](#error-handling)
|
|
10
|
+
- [Which EventBridge capability](#which-eventbridge-capability)
|
|
10
11
|
- [EventBridge rules, pipes, and patterns](#eventbridge-rules-pipes-and-patterns)
|
|
11
12
|
- [Step Functions vs Lambda durable functions](#step-functions-vs-lambda-durable-functions)
|
|
12
13
|
|
|
@@ -90,6 +91,23 @@ Rules and best practices:
|
|
|
90
91
|
|
|
91
92
|
---
|
|
92
93
|
|
|
94
|
+
## Which EventBridge capability
|
|
95
|
+
|
|
96
|
+
Decided in `SKILL.md` Step 4; this is the full table.
|
|
97
|
+
|
|
98
|
+
| Need | Use | Continue with |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| Time-based triggers (cron, rate, one-time), replacing VM cron or always-on workers for infrequent jobs, millions of tenant schedules, retries + maximum event age + DLQ, auditable scheduled runs | **EventBridge Scheduler** | Scheduler invokes AWS APIs directly (Lambda, Step Functions, SQS, ECS RunTask, …); surface failures with the DLQ plus CloudWatch alarms on `TargetErrorCount` and on DLQ depth |
|
|
101
|
+
| AWS service state-change events on the default bus, or an existing classic single-account integration that routes events to up to 5 targets per rule by pattern matching | **EventBridge rules** on the default bus | [Event patterns](#eventbridge-rules-pipes-and-patterns) below |
|
|
102
|
+
| Any new workload that publishes its own application events, including a single-account workload; many independent consumers; cross-team or cross-account sharing; central governance; ordered delivery per event group; schema integration; per-subscriber transformation; deduplication; retention and replay | **New EventBridge custom event bus** (`eventsv2`) | **amazon-eventbridge-event-bus** skill. Classic EventBridge operations still use the `events` API; migration from classic to the new bus is covered by that skill's migration reference |
|
|
103
|
+
| One poll-based source (SQS, Kinesis, DynamoDB Streams, Kafka/MSK, Amazon MQ) feeding one target with optional filtering, enrichment, or transformation | **EventBridge Pipes** | [Source-to-target choices](#source-to-target-choices) below. If the only target is one Lambda function and no Pipe-only enrichment is needed, use the Event Function's native event source mapping directly |
|
|
104
|
+
|
|
105
|
+
"Decouple these steps" for a single application with fan-out → new custom event bus for newly published application events, or existing classic rules when preserving an established integration. When steps must run in order with checkpointed progress, retries, or compensation, that is orchestration rather than eventing: decide Durable Functions vs Step Functions below.
|
|
106
|
+
|
|
107
|
+
For an existing classic custom bus that needs retention, replay, ordering, or subscribers, plan an incremental migration through **amazon-eventbridge-event-bus**. Bridge classic and new buses so publishers and consumers can move independently; do not require a big-bang rewrite. Stay on classic for a feature the new bus does not support, such as Global Endpoints.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
93
111
|
## EventBridge rules, pipes, and patterns
|
|
94
112
|
|
|
95
113
|
### Event patterns
|
|
@@ -98,34 +116,42 @@ All specified fields must match (AND); values within an array are OR'd. Operator
|
|
|
98
116
|
|
|
99
117
|
### Best practices
|
|
100
118
|
|
|
101
|
-
1.
|
|
119
|
+
1. Use the default bus for AWS service state-change events. For a new workload publishing its own events, evaluate the new custom event bus first.
|
|
102
120
|
2. **Be precise with patterns** — broad patterns risk infinite loops.
|
|
103
|
-
3.
|
|
104
|
-
4.
|
|
105
|
-
5. Use the EventBridge Sandbox to test patterns before deploying.
|
|
106
|
-
6.
|
|
121
|
+
3. With classic rules, prefer one target per rule to simplify debugging and IAM.
|
|
122
|
+
4. Configure DLQs on deliveries that support them.
|
|
123
|
+
5. Use the EventBridge Sandbox to test classic event patterns before deploying.
|
|
124
|
+
6. The new custom bus uses subscribers rather than rules and targets; continue with **amazon-eventbridge-event-bus** for its payload shapes, filtering, transformations, retention, replay, ordering, migration, and delivery contract.
|
|
107
125
|
|
|
108
|
-
###
|
|
126
|
+
### Source-to-target choices
|
|
109
127
|
|
|
110
|
-
|
|
|
128
|
+
| Mechanism | Topology | Choose it when |
|
|
111
129
|
|---|---|---|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
130
|
+
| Native Lambda event source mapping | Poll-based source → one Lambda function | The source is SQS, Kinesis, DynamoDB Streams, Kafka/MSK, or Amazon MQ; Lambda is the only target; native batching/filtering/retry controls are sufficient |
|
|
131
|
+
| EventBridge Pipes | Poll-based source → one target | Filtering, enrichment, or input transformation is needed in transit; the target is not Lambda; or a managed connector should replace glue code |
|
|
132
|
+
| Pipe → new custom event bus | Poll-based source → many independent consumers | One Pipe performs source-side filtering/enrichment and publishes to the bus; each consumer owns a subscriber. Do not create one Pipe per consumer merely to simulate fan-out |
|
|
133
|
+
| New custom event bus (`eventsv2`) | Application publishers → independent subscribers | The application publishes its own events and needs fan-out, retention/replay, ordering, deduplication, schemas, or independent consumer operations—even within one account |
|
|
134
|
+
| Classic rules | Event on a classic/default bus → up to 5 targets per rule | Routing AWS service state-change events or preserving an existing classic EventBridge integration |
|
|
117
135
|
|
|
118
|
-
Pipes filtering happens **at the source
|
|
136
|
+
Pipes filtering happens **at the source**—you pay only for matched events—with built-in retry and DLQ. A Pipe has one target; fan-out occurs after the Pipe through a bus and its subscribers.
|
|
119
137
|
|
|
120
138
|
---
|
|
121
139
|
|
|
122
140
|
## Step Functions vs Lambda durable functions
|
|
123
141
|
|
|
124
|
-
|
|
142
|
+
The choice is made in `SKILL.md` (Step 3 — orchestration). Treat compute and orchestration as separate dimensions:
|
|
125
143
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
|
|
144
|
+
- **Durable Functions** fits code-first orchestration written with the application, including all-Lambda workflows and replacement of hand-built checkpoint state.
|
|
145
|
+
- **Step Functions** fits an explicitly visual or ASL-authored workflow, a shared cross-team state-machine contract, Distributed Map, or broad coordination of AWS services and non-Lambda compute through native integrations.
|
|
146
|
+
- When the implementation model is not stated and either fits, name both with the one-line tradeoff rather than inferring that an external API/database call makes a workflow heterogeneous.
|
|
147
|
+
|
|
148
|
+
| Use this skill | When the workload involves |
|
|
149
|
+
|---|---|
|
|
150
|
+
| **aws-step-functions** | Orchestration whose primary work is coordinating AWS services directly; coordinating ECS/Fargate, Glue, SageMaker, or Batch through native managed integrations; a visual, auditable workflow definition required for compliance or operations; a shared contract between teams that do not share a codebase; a runtime Durable Functions does not support; Distributed Map fan-out to thousands of parallel executions; authoring or editing Amazon States Language (ASL), JSONata, Retry/Catch, `.sync`/`waitForTaskToken`, TestState, or JSONPath-to-JSONata migration |
|
|
151
|
+
| **aws-lambda-durable-functions** | Code-first orchestration when building on Lambda (`context.step`/`context.wait`/`context.invoke`, `withDurableExecution`); workflows written as plain sequential code in a supported runtime; waits on timers, callbacks, or conditions; checkpointed retries and execution history; replacing hand-rolled checkpointing in DynamoDB/Redis; saga and compensation logic; many fine-grained steps where Step Functions Standard transition cost may be significant |
|
|
152
|
+
|
|
153
|
+
Limits that decide ties: a Durable Functions step is bounded by the Lambda timeout of the capacity provider it runs on (15 min on On-Demand and for synchronous invocations on Managed Instances; 90 min on Managed Instances for async or ESM invocations), and a durable execution can run up to 1 year on async invocations. Step Functions Standard executions run up to 1 year and Express up to 5 minutes (see [Standard vs Express](#standard-vs-express)).
|
|
154
|
+
|
|
155
|
+
A Durable Function is an orchestration layer implemented by an Event Function. Few steps and a short wait may only need an idempotent handler plus a DLQ rather than either orchestrator.
|
|
156
|
+
|
|
157
|
+
**For implementation guidance use the aws-lambda-durable-functions or aws-step-functions skill** — this file covers only the choice, Step Functions execution semantics, and EventBridge details above.
|
|
@@ -68,7 +68,7 @@ Pre-deployment checklist, architecture trade-offs, and operational patterns. Con
|
|
|
68
68
|
|
|
69
69
|
### Lambdalith vs micro-Lambda
|
|
70
70
|
|
|
71
|
-
Prefer **micro-Lambda** (function per route) for greenfield: per-function least-privilege IAM, independent scaling + reserved concurrency, granular observability, smaller/faster cold starts. Use a **Lambdalith** when migrating an existing
|
|
71
|
+
Prefer **micro-Lambda** (function per route) for greenfield: per-function least-privilege IAM, independent scaling + reserved concurrency, granular observability, smaller/faster cold starts. Use a **Lambdalith** when migrating an existing FastAPI app or when a small team values deployment simplicity over granularity. For Node.js apps, Lambda Web Functions runs the HTTP server directly without an adapter — route to the **aws-lambda-web-functions** skill; the Lambdalith adapter pattern applies to Python/FastAPI.
|
|
72
72
|
|
|
73
73
|
### Reserved vs Provisioned Concurrency
|
|
74
74
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: better-auth-best-practices
|
|
3
3
|
description: Configure Better Auth server and client, set up database adapters, manage sessions, add plugins, and handle environment variables. Use when users mention Better Auth, betterauth, auth.ts, or need to set up TypeScript authentication with email/password, OAuth, or plugin configuration.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Better Auth Integration Guide
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: better-auth-security-best-practices
|
|
3
3
|
description: Configure rate limiting, manage auth secrets, set up CSRF protection, define trusted origins, secure sessions and cookies, encrypt OAuth tokens, track IP addresses, and implement audit logging for Better Auth. Use when users need to secure their auth setup, prevent brute force attacks, or harden a Better Auth deployment.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
## Secret Management
|
|
@@ -3,6 +3,7 @@ name: building-native-ui
|
|
|
3
3
|
description: Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.
|
|
4
4
|
version: 1.0.1
|
|
5
5
|
license: MIT
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Expo UI Guidelines
|
|
@@ -29,13 +29,10 @@ it.
|
|
|
29
29
|
## Steps
|
|
30
30
|
|
|
31
31
|
<!-- vybekiit:page-recipe-install -->
|
|
32
|
-
0. **
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Keep every `TODO:` in the recipe and wire domain checklist items after the route renders.
|
|
37
|
-
Also reference `packages/agentKit` `getPageRecipeInstall('buy-domain')` / page-recipe-manifest.json.
|
|
38
|
-
**Verify:** `/dashboard/launch` builds with practice checklist UI.
|
|
32
|
+
0. **Add the launch checklist page first.** Run `vybekiit add page-recipe launch-checklist` (skip it
|
|
33
|
+
if `go-live` already added it). It adds the page at `/launch`. Keep every `TODO:` in the page and
|
|
34
|
+
fill in the domain items as you go.
|
|
35
|
+
**Verify:** `/launch` opens and shows the practice checklist.
|
|
39
36
|
|
|
40
37
|
1. **Help them choose a name.** Talk through a web address they'd like. Check it's available and
|
|
41
38
|
guide registration **one step at a time** — they pay for it (it's their address).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: check-safety
|
|
3
|
-
description: "confirm the app is protected end-to-end before ship — abuse, database safety, and every. Use when the vibe coder says something like: am i ready to ship; is my app safe; did we cover security."
|
|
3
|
+
description: "confirm the app is protected end-to-end before ship — abuse, database safety, and every API route classified correctly. Use when the vibe coder says something like: am i ready to ship; is my app safe; did we cover security."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -23,13 +23,10 @@ API route classified correctly. Output a plain pass/fail summary for the builder
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
25
25
|
<!-- vybekiit:page-recipe-install -->
|
|
26
|
-
0. **
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Also reference `packages/agentKit` `getPageRecipeInstall('check-safety')` / page-recipe-manifest.json.
|
|
31
|
-
**Verify:** route builds and shows practice UI before provider wiring.
|
|
32
|
-
|
|
26
|
+
0. **Add the ready-made page first.** Run `vybekiit add page-recipe safety`. It adds the page
|
|
27
|
+
at `/safety` and lists any data setup to run next. Keep every `TODO:` in the page and fill
|
|
28
|
+
each one in as you connect the real service.
|
|
29
|
+
**Verify:** `/safety` opens and shows practice content.
|
|
33
30
|
|
|
34
31
|
1. **Abuse / DDoS layer.** Confirm `SECURITY_RATE_LIMIT` and `SECURITY_ORIGIN_LOCK` are `on` in
|
|
35
32
|
`.env`. Confirm `middleware.ts` passes the request path for tiered limits. Confirm `/api/webhook`
|
|
@@ -11,6 +11,7 @@ description: >-
|
|
|
11
11
|
metadata:
|
|
12
12
|
parent: neon
|
|
13
13
|
source: https://github.com/neondatabase/agent-skills/tree/main/skills/claimable-postgres
|
|
14
|
+
disable-model-invocation: true
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
**FIRST**: Use the parent `neon` skill for a Neon overview, getting started with Neon, Neon development best practices, and more.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: configure-capabilities
|
|
3
|
-
description: "the app has
|
|
3
|
+
description: "the app has only the permissions it needs — the builder never thinks about Info.plist, Android manifest, or Expo plugins. Use when the vibe coder says something like: camera; location permission; notifications permission."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: connect-account
|
|
3
|
-
description: "people can create accounts and sign in
|
|
3
|
+
description: "people can create accounts and sign in inside the app. Use when the vibe coder says something like: sign in; log in; create accounts; add users; forgot password; reset password."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: create-auth-skill
|
|
3
3
|
description: Scaffold and implement authentication in TypeScript/JavaScript apps using Better Auth. Detect frameworks, configure database adapters, set up route handlers, add OAuth providers, and create auth UI pages. Use when users want to add login, sign-up, or authentication to a new or existing project with Better Auth.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Create Auth Skill
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: doctor
|
|
3
|
-
description: "find out why something isn't working and fix it — without making the builder debug. Use when the vibe coder says something like: it's broken; nothing works; get an error; check my app."
|
|
3
|
+
description: "find out why something isn't working and fix it — without making the builder debug anything. Use when the vibe coder says something like: it's broken; nothing works; get an error; check my app."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eas-app-stores
|
|
3
|
-
description:
|
|
3
|
+
description: Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.
|
|
4
4
|
version: 1.1.0
|
|
5
5
|
license: MIT
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# App Store Deployment
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "EAS App Stores"
|
|
3
|
-
short_description: "
|
|
3
|
+
short_description: "Build and submit iOS and Android apps."
|
|
4
4
|
default_prompt: "Use $eas-app-stores to set up or verify EAS builds, TestFlight and store submissions, signing, versioning, and store metadata for iOS and Android apps: Expo and other React Native projects, plus existing native apps."
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eas-hosting
|
|
3
|
-
description:
|
|
3
|
+
description: Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom domains, and work within the Cloudflare Workers runtime. Also covers authoring API routes (+api.ts handlers, HTTP methods, request handling, CORS). Use when deploying an Expo web app or API routes, setting up EAS Hosting, or configuring hosting environments and domains. Not for native builds or store releases - use the eas-app-stores skill for those.
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
license: MIT
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# EAS Hosting
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "EAS Hosting"
|
|
3
|
-
short_description: "
|
|
3
|
+
short_description: "Deploy Expo websites and Expo Router API routes to EAS Hosting, with environment secrets, custom domains, and the Cloudflare Workers runtime"
|
|
4
4
|
default_prompt: "Use $eas-hosting to deploy an Expo web app or Expo Router API routes to EAS Hosting, author +api.ts route handlers, manage hosting environment secrets and custom domains, and work within the Cloudflare Workers runtime."
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eas-observe
|
|
3
|
-
description:
|
|
3
|
+
description: 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
4
|
version: 1.1.0
|
|
5
5
|
license: MIT
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# EAS Observe
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "EAS Observe"
|
|
3
|
-
short_description: "
|
|
3
|
+
short_description: "Set up expo-observe app metrics and query launch, route, event, and version performance with the EAS CLI"
|
|
4
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."
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eas-simulator
|
|
3
|
-
description: "
|
|
3
|
+
description: "Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud. Read before running any `eas simulator:*` commands - it has the current syntax for this experimental API. Use whenever the user needs a simulator they can't run locally - 'run my app on a cloud simulator', 'use eas simulator to run/install/screenshot my app', 'I'm on Linux/Cursor and need an iOS device', 'no sim on this box / headless CI', 'let an agent click through my app and screenshot it', 'test my dev build on a remote sim with live reload', 'stream a sim to my browser' - even when they don't say 'EAS Simulator' or 'cloud'. On a host WITHOUT a local simulator (Linux, CI, cloud sandbox) it's the default; on macOS, do NOT auto-trigger for a plain 'run on the simulator' - use it only for a cloud/remote/shareable sim, an iOS version they lack, or an agent-driven session. NOT for local sims (expo run:ios, Xcode, Android Studio), EAS Build/Update, web preview, or physical devices."
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
license: MIT
|
|
6
6
|
allowed-tools: "Bash(npx *eas-cli@*), Bash(npx *agent-device@*), Bash(npx expo *), Bash(eas *), Bash(expo *), Bash(xcodebuild*), Bash(pod*), Bash(argent *), Bash(ffmpeg*)"
|
|
7
|
+
disable-model-invocation: true
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
# EAS Simulator
|
|
10
11
|
|
|
11
|
-
> **EAS service - costs apply.**
|
|
12
|
+
> **EAS service - costs apply.** Sessions count toward your account's pricing and limits and stop at their maximum duration. Stop a session with `eas simulator:stop` when the task is done. See https://expo.dev/pricing for current terms.
|
|
12
13
|
|
|
13
14
|
EAS Simulator runs a remote iOS simulator or Android emulator on EAS infrastructure that you drive from your machine — from the CLI, from an AI agent (via `agent-device`), and from a browser preview. It's the unlock for **environments that can't run a simulator locally** (Linux boxes, cloud/background agents like Cursor Cloud), and for letting an agent *verify* a change on a real device instead of only reasoning about code.
|
|
14
15
|
|
|
@@ -24,9 +25,9 @@ The frontmatter `description` carries the trigger phrases. In short: use this to
|
|
|
24
25
|
- **Generic simulator request:** use a suitable local simulator when available. If the host cannot run the requested simulator (for example, iOS on Linux or a cloud sandbox), use EAS Simulator after checking access. A non-macOS host may still support a local Android emulator.
|
|
25
26
|
- Honor an explicit local choice; hand off to `expo run:ios` / Xcode / Android Studio as appropriate. Clarify only when the requested environment remains ambiguous and affects the task.
|
|
26
27
|
|
|
27
|
-
When the user
|
|
28
|
-
|
|
29
|
-
the
|
|
28
|
+
When the user asks for EAS Simulator or a cloud simulator, start the session and do the
|
|
29
|
+
requested work without asking again. Stop the session when the work is done. Only check in
|
|
30
|
+
if the user set a limit you would go past, or if the work grows beyond what they asked for.
|
|
30
31
|
|
|
31
32
|
## Prerequisites
|
|
32
33
|
|
|
@@ -39,9 +40,9 @@ the session. Ask before exceeding a stated budget or expanding beyond the reques
|
|
|
39
40
|
|
|
40
41
|
## Session lifetime
|
|
41
42
|
|
|
42
|
-
- `--max-duration-minutes N` is the hard automatic-stop deadline.
|
|
43
|
+
- `--max-duration-minutes N` is the hard automatic-stop deadline. Any plan can set it, up to the plan limit (40 minutes on Free, 115 on paid plans). The timer starts when the session is ready.
|
|
43
44
|
- `--max-idle-time-minutes N` stops a session after that many inactive minutes. Omitted means **no idle timeout**: the session runs until its maximum duration or an explicit stop.
|
|
44
|
-
- **
|
|
45
|
+
- **Controller activity resets the idle timer** (`agent-device`, `argent`, and Appium commands, which are recorded as session events with producer `appium`). **Browser-preview activity does not reset it.** For a user-driven browser preview, rely on the maximum duration, not idle time, to bound the session.
|
|
45
46
|
|
|
46
47
|
## Check availability first
|
|
47
48
|
|
|
@@ -78,7 +79,7 @@ npx --yes eas-cli@latest simulator:start --platform ios --type agent-device --no
|
|
|
78
79
|
# agent-device runs on demand via npx — nothing installed globally.
|
|
79
80
|
npx --yes eas-cli@latest simulator:exec npx agent-device@latest open <app-or-url> --platform ios
|
|
80
81
|
npx --yes eas-cli@latest simulator:exec npx agent-device@latest snapshot -i # interactive UI tree → @e1, @e2 refs
|
|
81
|
-
npx --yes eas-cli@latest simulator:exec npx agent-device@latest press @e2 # tap a ref (
|
|
82
|
+
npx --yes eas-cli@latest simulator:exec npx agent-device@latest press @e2 # tap a ref (use 'press' or 'click')
|
|
82
83
|
npx --yes eas-cli@latest simulator:exec npx agent-device@latest screenshot ./shot.png
|
|
83
84
|
|
|
84
85
|
# 3. Stop the session and reset the dotenv. Omit --id to target the dotenv session.
|
|
@@ -86,11 +87,11 @@ npx --yes eas-cli@latest simulator:stop
|
|
|
86
87
|
printf '# managed by eas-cli\n' > .env.eas-simulator
|
|
87
88
|
```
|
|
88
89
|
|
|
89
|
-
To **watch** it live, hand the user the `webPreviewUrl` that `start` prints. All current session types include a browser preview; `agent-device`, `appium`, and `argent` also provide automation, while `web-preview-only` provides no automation interface. **This URL is for the *user's* browser — you cannot open it for them, and it must never touch the sim:**
|
|
90
|
+
To **watch** it live, hand the user the `webPreviewUrl` that `start` prints (in `--json`, `remoteConfig.webPreviewUrl`; for `web-preview-only` sessions, `remoteConfig.previewUrl`). All current session types include a browser preview, on iOS and Android; `agent-device`, `appium`, and `argent` also provide automation, while `web-preview-only` provides no automation interface. On Android, the expo.dev session page does not show the preview inline yet: **Open preview** opens it in a new tab. Android support is in development, so some iOS features may not work there. **This URL is for the *user's* browser — you cannot open it for them, and it must never touch the sim:**
|
|
90
91
|
- **"Open it here" (Cursor/VS Code)** → print the URL on its own line and tell the user to open Simple Browser (`Cmd/Ctrl+Shift+P` → "Simple Browser: Show") and paste it. Then **stop**: do not shell out to a system browser or a Cursor/VS Code URL handler, and do not ask "did a tab appear?" — you can't confirm it, the handoff is done.
|
|
91
92
|
- **Never `open` the `webPreviewUrl` on the sim.** It's a browser preview, not a deep link and not an `agent-device open` argument; routing it to the device renders a browser-in-a-browser (a real past failure).
|
|
92
93
|
- **Headless agent** (no display) → just return the URL as the deliverable.
|
|
93
|
-
- **Keeping it alive for the user to drive** → use `--max-duration-minutes N`
|
|
94
|
+
- **Keeping it alive for the user to drive** → use `--max-duration-minutes N` (up to the plan limit). Browser-preview activity does not reset `--max-idle-time-minutes`, so idle timeout is not a reliable lifetime bound for this case. Tell the user when the session expires, using the CLI's reported duration or expiry. Keep it running for the requested preview; stop sessions created for one-shot tasks when the task finishes.
|
|
94
95
|
|
|
95
96
|
`start` also prints a job-run URL.
|
|
96
97
|
|
|
@@ -134,7 +135,7 @@ copy of the CLI surface. Keep non-obvious behavioral guidance from this skill—
|
|
|
134
135
|
| Command | Purpose |
|
|
135
136
|
|---|---|
|
|
136
137
|
| `npx --yes eas-cli@latest simulator:availability [--json] [--non-interactive]` | Check access without creating a session. |
|
|
137
|
-
| `npx --yes eas-cli@latest simulator:start --platform ios\|android --name "<description>" [flags]` | Create a session; boot the sim + selected interface; write `.env.eas-simulator` by default; print the preview + job-run URLs. **Always pass `--name`**. `--json` does not suppress the dotenv; use `--out-config-type env` when no file should be written. |
|
|
138
|
+
| `npx --yes eas-cli@latest simulator:start --platform ios\|android --name "<description>" [flags]` | Create a session; boot the sim + selected interface; write `.env.eas-simulator` by default; print the preview + job-run URLs. **Always pass `--name`**. `--json` does not suppress the dotenv; use `--out-config-type env` when no file should be written (it prints only the controller `export` lines, without `EAS_SIMULATOR_SESSION_ID`, so pass `--id` to `get`/`stop`/`events`). |
|
|
138
139
|
| `npx --yes eas-cli@latest simulator:exec <cmd> [args…]` | Load `.env.eas-simulator`, then run `<cmd>` with that env. The bridge to the controller. |
|
|
139
140
|
| `npx --yes eas-cli@latest simulator:get [--id <id>] [--json] [--non-interactive]` | Session status + connection details, including the session name. **Use this to confirm readiness** (see *Operating principles*). |
|
|
140
141
|
| `npx --yes eas-cli@latest simulator:list [filters] [--limit N] [--after <cursor>] [--json]` | List and paginate project sessions; filter by status, type, platform, name prefix, and tags. |
|
|
@@ -177,19 +178,25 @@ If a controller fails to download a recording, retrieve it from [EAS session art
|
|
|
177
178
|
| `install-from-source <url> --platform ios` | Install from a URL — the VM downloads it (use for EAS artifacts) |
|
|
178
179
|
| `open <appId\|deep-link> --platform ios` | Launch an app (bundle id) or follow an app **deep link** (`exp+slug://…`). A first-time deep link raises a system **"Open in '<app>'?"** dialog — expect it (don't burn a snapshot discovering it) and `press 'label="Open"'` to hand off; it can be slow, so bound it with agent-device's own `--timeout` (e.g. `press 'label="Open"' --timeout 120000`) — **not** a shell `timeout` wrapper (macOS has no `timeout` binary). (Mode C sidesteps this dialog for the Metro-connect link via "Enter URL manually" — see run-your-app.md.) **Not** for the `webPreviewUrl` — that's a browser preview for the user, never the device. |
|
|
179
180
|
| `snapshot -i` | Interactive accessibility tree → `@e1`-style refs |
|
|
180
|
-
| `press <ref\|selector>` | Tap (e.g. `press @e2` or `press 'label="Open"'`)
|
|
181
|
+
| `press <ref\|selector>` | Tap (e.g. `press @e2` or `press 'label="Open"'`). `click <target>` also works. Use `press` or `click`: `tap` is a hidden alias that older versions reject |
|
|
181
182
|
| `fill <ref> "text"` | Type into a field |
|
|
182
|
-
| `screenshot <path>` | Capture the screen to a local PNG (downloaded from the daemon) — requires an app to be open (`open` first) |
|
|
183
|
-
| `record start` / `record stop
|
|
183
|
+
| `screenshot <path>` | Capture the screen to a local PNG (downloaded from the daemon) — requires an app to be open (`open` first). On iOS the default is 1x logical points (402x874 on iPhone 17); add `--pixel-density 3` for full resolution |
|
|
184
|
+
| `record start [path]` / `record stop` | Record the screen to a video at the `record start` path (`record stop` takes no path) — use this for **motion** (animations, gestures, transitions, timing), which a single screenshot can't capture |
|
|
184
185
|
| `metro prepare` / `metro reload` | Point a dev client at Metro / reload (Mode C) |
|
|
185
186
|
|
|
186
187
|
**Screenshots vs. video.** Default to `screenshot` for static state, but for anything that *moves* — an animation, a transition, a gesture, a timing/jank question — **record a video and inspect the frames** instead; a still can't prove motion. Both controllers record (agent-device `record start`/`stop`, argent `screen-recording-start`/`stop`). Recordings sample at ~30fps — enough to see visible jank, not to prove sub-frame 60/120Hz hitches. For **timing** specifically, argent drops static frames by default (turn `trimStatic` off) — that plus other per-controller gotchas are in [references/controllers.md](./references/controllers.md).
|
|
187
188
|
|
|
188
189
|
For the full verb set and the `argent` controller alternative, see [references/controllers.md](./references/controllers.md).
|
|
189
190
|
|
|
191
|
+
## When the app crashes: device logs and crash reports (iOS)
|
|
192
|
+
|
|
193
|
+
When the app crashes or closes on launch, read the iOS session's crash reports and device log before guessing from screenshots. Read them from the preview API URL in `simulator:get --json`. That URL carries the session token, so never print it.
|
|
194
|
+
|
|
195
|
+
**Hold the device log before you reproduce the crash.** Without the hold, the crash gets a report but an empty log tail. Commands, fields, and fallbacks are in [references/logs-and-crashes.md](./references/logs-and-crashes.md).
|
|
196
|
+
|
|
190
197
|
## Operating principles
|
|
191
198
|
|
|
192
|
-
The non-obvious mental model worth internalizing. Specific error→fix lookups (hung verbs, `tap
|
|
199
|
+
The non-obvious mental model worth internalizing. Specific error→fix lookups (hung verbs, `tap` rejected, `--platform`, `--json`, `pod install` locale, orphaned sessions, boot variability) live in [references/troubleshooting.md](./references/troubleshooting.md).
|
|
193
200
|
|
|
194
201
|
1. **Establish ground truth, then reset — don't patch-loop.** Never assume an existing session or Metro is yours or healthy. Before driving, confirm:
|
|
195
202
|
- **cwd** — you're in the intended Expo project dir (a misdirected `start`/`exec` sessions the *wrong app* + drops a stray `.env.eas-simulator`; `pwd` / check `app.json`).
|
|
@@ -217,9 +224,10 @@ printf '# managed by eas-cli\n' > .env.eas-simulator # clear the stale session
|
|
|
217
224
|
|
|
218
225
|
- [references/run-your-app.md](./references/run-your-app.md) — full command sequences for modes A, B, and C (read before running a mode).
|
|
219
226
|
- [references/controllers.md](./references/controllers.md) — agent-device verb reference and the `argent` alternative.
|
|
227
|
+
- [references/logs-and-crashes.md](./references/logs-and-crashes.md) — device logs and crash reports from an iOS session (read when the app crashes or misbehaves).
|
|
220
228
|
- [references/troubleshooting.md](./references/troubleshooting.md) — concrete errors and fixes.
|
|
221
229
|
|
|
222
|
-
Source of truth: Expo docs and the `eas` / `agent-device` CLIs (`npx --yes eas-cli@latest simulator:* --help`, `agent-device
|
|
230
|
+
Source of truth: Expo docs and the `eas` / `agent-device` CLIs (`npx --yes eas-cli@latest simulator:* --help`, `npx --yes eas-cli@latest simulator:exec npx agent-device@latest help [topic]`; `--help` after `simulator:exec` shows the EAS CLI help instead). This skill teaches how to apply them; it doesn't replace them.
|
|
223
231
|
|
|
224
232
|
## Submitting Feedback
|
|
225
233
|
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "EAS Simulator"
|
|
3
|
-
short_description: "
|
|
3
|
+
short_description: "Run and drive your app on a remote iOS/Android simulator on EAS cloud, from the CLI or an agent, with a live browser preview"
|
|
4
4
|
default_prompt: "Use $eas-simulator to run, install, screenshot, and drive an app on a remote EAS cloud simulator - especially when no local simulator is available (Linux, CI, cloud agents) or a shareable browser preview is needed."
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- `argent` (Software Mansion) — a capable alternative controller; check its license for your use.
|
|
8
8
|
- `web-preview-only` — browser preview with no programmatic control.
|
|
9
9
|
|
|
10
|
-
All four types include a web preview. Before setting `--max-idle-time-minutes`, follow [Session lifetime](../SKILL.md#session-lifetime); activity does not reset the timer
|
|
10
|
+
All four types include a web preview. Before setting `--max-idle-time-minutes`, follow [Session lifetime](../SKILL.md#session-lifetime); browser-preview activity does not reset the timer.
|
|
11
11
|
|
|
12
12
|
## Appium
|
|
13
13
|
|
|
@@ -19,7 +19,7 @@ npx --yes eas-cli@latest simulator:start --platform ios --type appium --non-inte
|
|
|
19
19
|
npx --yes eas-cli@latest simulator:exec <appium-client> [args...]
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
The start flags `--build-id`, `--build-fingerprint`, `--application-archive-url`, or `--expo-go` (with `--launch-arg` and `--open-url`) install and launch the app in an Appium session too. Appium commands are recorded as session events with producer `appium`: they appear in `simulator:events` and reset the idle timer.
|
|
23
23
|
|
|
24
24
|
## agent-device verbs (run via `npx --yes eas-cli@latest simulator:exec npx agent-device@latest <verb>`)
|
|
25
25
|
|
|
@@ -28,16 +28,20 @@ agent-device is a thin **client** talking to a **daemon** (the daemon runs on th
|
|
|
28
28
|
The CLI help is written for agents and is the source of truth — run these for the full verb set and agentic loop guidance:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
npx --yes eas-cli@latest simulator:exec npx agent-device@latest
|
|
31
|
+
npx --yes eas-cli@latest simulator:exec npx agent-device@latest help
|
|
32
32
|
npx --yes eas-cli@latest simulator:exec npx agent-device@latest help workflow
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
Use `help [topic]`, not `--help`: oclif catches `--help` after `simulator:exec` and prints the EAS CLI help.
|
|
36
|
+
|
|
35
37
|
EAS-specific notes:
|
|
36
38
|
|
|
37
|
-
-
|
|
39
|
+
- **Tap with `press` or `click`.** `tap` is a hidden alias of `press` (not in `help commands`), and older agent-device versions reject it.
|
|
38
40
|
- **`snapshot -i` is slow on iOS** — tens of seconds is normal; wait for it.
|
|
39
41
|
- **`install` uploads** a local binary to the daemon; **`install-from-source`** has the VM download from a URL (use for EAS artifacts — avoids a large upload).
|
|
40
|
-
- **Exercised against a live session:** `apps`, `install`, `install-from-source`, `open`, `snapshot -i`, `press`, `fill`, `screenshot`, `scroll`, `gesture` (needs a preset, e.g. `gesture swipe left`), `logs`, `record` (`start`/`stop
|
|
42
|
+
- **Exercised against a live session:** `apps`, `install`, `install-from-source`, `open`, `snapshot -i`, `press`, `fill`, `screenshot`, `scroll`, `gesture` (needs a preset, e.g. `gesture swipe left`), `logs`, `record` (`start [path]`/`stop`), `network`, `perf`.
|
|
43
|
+
- **Recording:** `record start ./clip.mp4`, then `record stop` (no path). The file goes to the `record start` path, with a `.gesture-telemetry.json` next to it, and the clip also uploads as a session artifact. If `record stop` times out while the remote device exports, run it again; add `--platform ios` if it cannot find the recording. Separately, EAS uploads a whole-session screen recording after the session stops (iOS and Android).
|
|
44
|
+
- **Remote proof:** `open` prints `Session state: /Users/expo/...` (iOS) or `/home/expo/...` (Android) on the remote device. `session state-dir` prints the local path, so it does not prove remote use. `metro` (`prepare`/`reload`) is the Mode C dev-client bridge. Pass `--platform ios`; run `<verb>` with no args to see its required subcommand/args.
|
|
41
45
|
|
|
42
46
|
## Recording download recovery
|
|
43
47
|
|
|
@@ -49,7 +53,7 @@ npx --yes eas-cli@latest simulator:get --id <session-id> --json
|
|
|
49
53
|
curl --fail --location --max-time 600 --output ./capture.mp4 '<downloadUrl>'
|
|
50
54
|
```
|
|
51
55
|
|
|
52
|
-
Use the URL returned by EAS, not a path on the simulator or a controller artifact id. If the recording has not appeared yet, poll the same session with a bounded wait for upload completion. Already-uploaded artifacts can be retrieved after the session stops using its explicit id.
|
|
56
|
+
Use the URL returned by EAS, not a path on the simulator or a controller artifact id. If the recording has not appeared yet, poll the same session with a bounded wait for upload completion. Already-uploaded artifacts can be retrieved after the session stops using its explicit id; they stay until the session is deleted. The `downloadUrl` is stable and needs no auth: each request redirects to a new signed URL that is valid for 1 hour, so if a download fails, request the same `downloadUrl` again. Give the download command more than 10 minutes in the outer runner, increase `--max-time` for larger files, and verify the downloaded video before reporting success.
|
|
53
57
|
|
|
54
58
|
Source: EAS CLI [simulator:get](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/commands/simulator/get.ts) exposes `artifacts[].{id,name,filename,metadata,downloadUrl}`.
|
|
55
59
|
|
|
@@ -95,7 +99,7 @@ Where argent is weaker than agent-device Mode C — so it's **capable, not as fa
|
|
|
95
99
|
|
|
96
100
|
**Screenshot resolution and token cost.** Screenshots cost context tokens once the agent reads them, so resolution is a real tradeoff. **argent's `screenshot` has two independent levers.** `scale` sets the image resolution and defaults **low** (too coarse to judge layout), so pass a larger scale when you need to **read** the UI. `includeImageInContext:false` keeps an image **out of the agent's context entirely** (zero token cost) — use that for a baseline you'll only **diff** later, and keep *that* one at full resolution so the pixel diff stays accurate. So: scale down images you actually read; drop unread ones with `includeImageInContext`, don't just shrink them. Exact flags and the current default: argent's help.
|
|
97
101
|
|
|
98
|
-
**agent-device** screenshots default to
|
|
102
|
+
**agent-device** screenshots on iOS simulators default to 1x logical points (402x874 on iPhone 17); pass `--pixel-density 3` for full resolution when you need fine detail or a pixel-diff baseline, so match the capture to the question. From **v0.20.6** it gains the same lever argent has and drops the old one: `screenshot --scale <0.01–1>` proportionally resizes both dimensions (`1` = full resolution), with a token-conscious default via `AGENT_DEVICE_SCREENSHOT_SCALE` (or `screenshotScale` in config) that an explicit `--scale` overrides — keep it unset or `1` for pixel-diff baselines; the former `--max-size` is removed (older calls refused with migration guidance). Verify the version with `agent-device --version`. One caveat for remote sessions: the resize runs on the daemon, so a newer client against an older EAS session daemon can have `--scale` silently ignored and get full-res back.
|
|
99
103
|
|
|
100
104
|
**Connecting via MCP (Cursor, Claude Code, Codex, and others).** Install the CLI globally first — the package is `@swmansion/argent`, not `argent`:
|
|
101
105
|
|