vybekiit 0.7.0 → 0.7.2

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.
Files changed (94) hide show
  1. package/dist/bin.js +1697 -562
  2. package/dist/global-skills/add-ai/SKILL.md +1 -1
  3. package/dist/global-skills/add-analytics/SKILL.md +1 -1
  4. package/dist/global-skills/add-blog/SKILL.md +1 -1
  5. package/dist/global-skills/add-crud/SKILL.md +1 -1
  6. package/dist/global-skills/add-files/SKILL.md +1 -1
  7. package/dist/global-skills/add-images/SKILL.md +1 -1
  8. package/dist/global-skills/add-language/SKILL.md +1 -1
  9. package/dist/global-skills/add-notifications/SKILL.md +1 -1
  10. package/dist/global-skills/add-realtime/SKILL.md +1 -1
  11. package/dist/global-skills/add-route/SKILL.md +1 -1
  12. package/dist/global-skills/add-search/SKILL.md +1 -1
  13. package/dist/global-skills/add-signin/SKILL.md +1 -1
  14. package/dist/global-skills/add-teams/SKILL.md +1 -1
  15. package/dist/global-skills/add-upload/SKILL.md +1 -1
  16. package/dist/global-skills/aws-serverless/SKILL.md +44 -44
  17. package/dist/global-skills/aws-serverless/assets/powertools-handler.py +1 -2
  18. package/dist/global-skills/aws-serverless/references/api-gateway.md +470 -50
  19. package/dist/global-skills/aws-serverless/references/architecture.md +186 -47
  20. package/dist/global-skills/aws-serverless/references/concurrency.md +158 -44
  21. package/dist/global-skills/aws-serverless/references/deployment.md +1 -1
  22. package/dist/global-skills/aws-serverless/references/event-sources.md +391 -72
  23. package/dist/global-skills/aws-serverless/references/lambda.md +428 -69
  24. package/dist/global-skills/aws-serverless/references/orchestration.md +384 -65
  25. package/dist/global-skills/aws-serverless/references/production.md +415 -78
  26. package/dist/global-skills/aws-serverless/references/troubleshooting.md +626 -79
  27. package/dist/global-skills/back-up-my-code/SKILL.md +1 -1
  28. package/dist/global-skills/buy-domain/SKILL.md +1 -1
  29. package/dist/global-skills/check-safety/SKILL.md +1 -1
  30. package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
  31. package/dist/global-skills/connect-account/SKILL.md +1 -1
  32. package/dist/global-skills/connect-account-backend/SKILL.md +1 -1
  33. package/dist/global-skills/design-my-data/SKILL.md +1 -1
  34. package/dist/global-skills/doctor/SKILL.md +1 -1
  35. package/dist/global-skills/feedback/SKILL.md +63 -0
  36. package/dist/global-skills/go-live/SKILL.md +1 -1
  37. package/dist/global-skills/harden/SKILL.md +1 -1
  38. package/dist/global-skills/instrument-feature-flags/references/usage.md +0 -35
  39. package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -1
  40. package/dist/global-skills/instrument-product-analytics/references/android.md +0 -36
  41. package/dist/global-skills/instrument-product-analytics/references/configuration.md +0 -1
  42. package/dist/global-skills/instrument-product-analytics/references/flutter.md +0 -37
  43. package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +2 -3
  44. package/dist/global-skills/instrument-product-analytics/references/usage.md +0 -35
  45. package/dist/global-skills/manifest.json +2 -1
  46. package/dist/global-skills/neon/SKILL.md +20 -27
  47. package/dist/global-skills/neon-ai-gateway/SKILL.md +2 -68
  48. package/dist/global-skills/neon-functions/SKILL.md +7 -7
  49. package/dist/global-skills/neon-object-storage/SKILL.md +2 -2
  50. package/dist/global-skills/neon-postgres/SKILL.md +5 -5
  51. package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -1
  52. package/dist/global-skills/onboarding/SKILL.md +1 -1
  53. package/dist/global-skills/plan-my-idea/SKILL.md +1 -1
  54. package/dist/global-skills/publish-app/SKILL.md +1 -1
  55. package/dist/global-skills/publish-extension/SKILL.md +1 -1
  56. package/dist/global-skills/reset-password/SKILL.md +1 -1
  57. package/dist/global-skills/save-data/SKILL.md +1 -1
  58. package/dist/global-skills/setup-email/SKILL.md +1 -1
  59. package/dist/global-skills/setup-payments/SKILL.md +1 -1
  60. package/dist/global-skills/setup-sms/SKILL.md +1 -1
  61. package/dist/global-skills/sign-in-with-email-link/SKILL.md +1 -1
  62. package/dist/global-skills/sign-in-with-google/SKILL.md +1 -1
  63. package/dist/global-skills/sign-in-with-phone/SKILL.md +1 -1
  64. package/dist/global-skills/stripe-best-practices/SKILL.md +6 -11
  65. package/dist/global-skills/stripe-best-practices/references/billing.md +0 -5
  66. package/dist/global-skills/stripe-best-practices/references/payments.md +2 -4
  67. package/dist/global-skills/stripe-best-practices/references/tax.md +8 -78
  68. package/dist/global-skills/track-errors/SKILL.md +1 -1
  69. package/dist/global-skills/update-kit/SKILL.md +1 -1
  70. package/dist/global-skills/wire-auth/SKILL.md +1 -1
  71. package/dist/global-skills/wire-database/SKILL.md +1 -1
  72. package/dist/global-skills/wire-email/SKILL.md +1 -1
  73. package/dist/global-skills/wire-payments/SKILL.md +1 -1
  74. package/package.json +8 -8
  75. package/dist/global-skills/email-best-practices/.github/workflows/sync-skills.yml +0 -30
  76. package/dist/global-skills/email-best-practices/README.md +0 -63
  77. package/dist/global-skills/email-best-practices/references/accessibility.md +0 -189
  78. package/dist/global-skills/email-best-practices/references/compliance.md +0 -125
  79. package/dist/global-skills/email-best-practices/references/deliverability.md +0 -121
  80. package/dist/global-skills/email-best-practices/references/email-capture.md +0 -129
  81. package/dist/global-skills/email-best-practices/references/email-types.md +0 -173
  82. package/dist/global-skills/email-best-practices/references/list-management.md +0 -157
  83. package/dist/global-skills/email-best-practices/references/marketing-emails.md +0 -115
  84. package/dist/global-skills/email-best-practices/references/sending-reliability.md +0 -155
  85. package/dist/global-skills/email-best-practices/references/transactional-email-catalog.md +0 -418
  86. package/dist/global-skills/email-best-practices/references/transactional-emails.md +0 -92
  87. package/dist/global-skills/email-best-practices/references/webhooks-events.md +0 -167
  88. package/dist/global-skills/email-best-practices/tests/README.md +0 -35
  89. package/dist/global-skills/email-best-practices/tests/scenarios/01-spam-deliverability.md +0 -46
  90. package/dist/global-skills/email-best-practices/tests/scenarios/02-multi-region-compliance.md +0 -48
  91. package/dist/global-skills/email-best-practices/tests/scenarios/03-retry-idempotency.md +0 -36
  92. package/dist/global-skills/email-best-practices/tests/scenarios/04-webhook-bounce-handling.md +0 -52
  93. package/dist/global-skills/email-best-practices/tests/scenarios/05-new-saas-email-plan.md +0 -51
  94. package/dist/global-skills/neon-postgres/references/neon-sdk.md +0 -262
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: back-up-my-code
3
- description: the builder's project is saved on GitHub so they never lose work. Use when the builder says something like: save my code; back up; put it on github.
3
+ description: "the builder's project is saved on GitHub so they never lose work. Use when the builder says something like: save my code; back up; put it on github."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: buy-domain
3
- description: the app uses the builder's own web address instead of a temporary one. Use when the builder says something like: get a domain; buy a web address; my own url.
3
+ description: "the app uses the builder's own web address instead of a temporary one. Use when the builder says something like: get a domain; buy a web address; my own url."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -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 builder 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. Use when the builder 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
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: configure-capabilities
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 builder says something like: camera; location permission; notifications permission.
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 builder 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 **inside the app**. Use when the builder says something like: sign in; log in; create accounts; add users; forgot password; reset password.
3
+ description: "people can create accounts and sign in **inside the app**. Use when the builder 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,6 @@
1
1
  ---
2
2
  name: connect-account-backend
3
- description: people can sign in from the phone app or extension. Use when the builder says something like: connect account backend.
3
+ description: "people can sign in from the phone app or extension. Use when the builder says something like: connect account backend."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-my-data
3
- description: figure out what the app should remember before wiring storage. Use when the builder says something like: design my database; what data do i need; what should my app remember.
3
+ description: "figure out what the app should remember before wiring storage. Use when the builder says something like: design my database; what data do i need; what should my app remember."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -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 builder 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. Use when the builder 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
  ---
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: feedback
3
+ description: "send a private note about VybeKiit so the team can improve the kit. Use when the builder says something like: send feedback; report a kit bug; suggest a kit improvement; the kit is confusing."
4
+ metadata:
5
+ vybekiit-generated: buyer-skill-stub
6
+ ---
7
+
8
+ <!-- vybekiit:generated:buyer-skill-stub -->
9
+
10
+ # Skill: feedback
11
+
12
+ **Goal:** send a private note about VybeKiit so the team can improve the kit.
13
+
14
+ **Contract:** one action at a time · verify-before-advance · plain language · translate errors · celebrate.
15
+
16
+ ## Safety boundary
17
+
18
+ Include only:
19
+
20
+ - kind: `bug`, `idea`, or `confusing`
21
+ - the builder's short message
22
+ - a short agent-written summary
23
+ - up to 10 short steps that reproduce the problem
24
+ - template: `web`, `mobile`, `extension`, `backend`, `spa`, or `unknown`
25
+ - trigger: `explicit` or `automatic-suggestion`
26
+ - agent name/version, kit version, and operating system name
27
+
28
+ Exclude source code, command output, transcripts, stack traces, email, secrets, tokens, absolute paths,
29
+ machine names, and private issue links. Never send automatically.
30
+
31
+ ## Steps
32
+
33
+ 1. **Prepare one safe draft.** Write the allowlisted JSON fields to
34
+ `.vybekiit/feedback-drafts/<timestamp>.json`. Create the folder if needed.
35
+ **Verify:** read the draft back and check that every field is allowed and bounded.
36
+
37
+ 2. **Show the preview.** Explain in plain language exactly what will be sent. Do not show removed
38
+ private details.
39
+ **Verify:** the builder can read the full safe preview.
40
+
41
+ 3. **Ask once.** Ask: *"Send this private feedback report to the VybeKiit team now?"*
42
+ If the builder does not clearly agree, stop and keep the local draft.
43
+ **Verify:** a clear yes was received in this conversation.
44
+
45
+ 4. **Send after approval.** Run:
46
+ `vybekiit feedback submit .vybekiit/feedback-drafts/<timestamp>.json --confirm`
47
+ GitHub may open once to confirm which paid buyer is reporting.
48
+ **Verify:** the command returns `{"ok":true,"reference":"FB-..."}`.
49
+
50
+ 5. **Record progress.** Add the safe reference to the Decision log and mark feedback sent in the
51
+ Progress section. Do not record the private issue URL or report body.
52
+ **Verify:** `checklist.md` contains only the safe reference.
53
+
54
+ ## If sending fails
55
+
56
+ Say: *"Your note was not sent, but the safe draft is still saved. I can try again when you are
57
+ ready."* Keep the draft. Do not fall back to `gh issue create`, `curl`, email, or another network
58
+ service.
59
+
60
+ ## Definition of done
61
+
62
+ The builder approved the exact safe preview, the command returned a feedback reference, and
63
+ `checklist.md` records only that reference.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: go-live
3
- description: the builder's app is online at a real web address that anyone can open. Use when the builder says something like: put it online; publish; make it live; ship it; deploy.
3
+ description: "the builder's app is online at a real web address that anyone can open. Use when the builder says something like: put it online; publish; make it live; ship it; deploy."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: harden
3
- description: the builder's app is protected against the common attacks every app faces — someone. Use when the builder says something like: lock down; make it safe; protect from abuse.
3
+ description: "the builder's app is protected against the common attacks every app faces — someone. Use when the builder says something like: lock down; make it safe; protect from abuse."
4
4
  metadata:
5
5
  vybekiit-generated: buyer-skill-stub
6
6
  ---
@@ -534,41 +534,6 @@ PostHogSDK.shared.captureFeatureView(flag: "flag-key", flagVariant: "variant-key
534
534
  PostHogSDK.shared.captureFeatureInteraction(flag: "flag-key", flagVariant: "variant-key")
535
535
  ```
536
536
 
537
- ### Bootstrapping flags
538
-
539
- Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
540
-
541
- To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
542
-
543
- Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires iOS SDK `3.66.0`+):
544
-
545
- Swift
546
-
547
- PostHog AI
548
-
549
- ```swift
550
- let config = PostHogConfig(projectToken: "<ph_project_token>", host: "https://us.i.posthog.com")
551
- config.bootstrap = PostHogBootstrapConfig(
552
- distinctId: "distinct_id_of_your_user",
553
- isIdentifiedId: true,
554
- featureFlags: [
555
- "flag-1": true,
556
- "variant-flag": "control"
557
- ],
558
- featureFlagPayloads: nil
559
- )
560
- PostHogSDK.shared.setup(config)
561
- ```
562
-
563
- - **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
564
- - An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
565
- - An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
566
- - **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
567
-
568
- The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
569
-
570
- See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
571
-
572
537
  ## Experiments (A/B tests)
573
538
 
574
539
  Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code. See [adding experiment code](/docs/experiments/adding-experiment-code.md) for iOS examples.
@@ -65,7 +65,7 @@ STEP 9: Set up environment variables.
65
65
  STEP 10: Verify and clean up.
66
66
  - Check the project for errors. Look for type checking or build scripts in package.json.
67
67
  - Ensure any components created were actually used.
68
- - Run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Never run formatting or linting across the entire project's codebase.
68
+ - Run any linter or prettier-like scripts found in the package.json.
69
69
 
70
70
  ## Reference files
71
71
 
@@ -566,41 +566,6 @@ PostHog.captureFeatureView("flag-key", flagVariant = "variant-key")
566
566
  PostHog.captureFeatureInteraction("flag-key", flagVariant = "variant-key")
567
567
  ```
568
568
 
569
- ### Bootstrapping flags
570
-
571
- Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
572
-
573
- To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
574
-
575
- Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires Android SDK `3.55.0`+):
576
-
577
- Kotlin
578
-
579
- PostHog AI
580
-
581
- ```kotlin
582
- import com.posthog.PostHogBootstrapConfig
583
- val config = PostHogAndroidConfig(apiKey = POSTHOG_API_KEY, host = POSTHOG_HOST)
584
- config.bootstrap = PostHogBootstrapConfig(
585
- distinctId = "distinct_id_of_your_user",
586
- isIdentifiedId = true,
587
- featureFlags = mapOf(
588
- "flag-1" to true,
589
- "variant-flag" to "control"
590
- )
591
- )
592
- PostHogAndroid.setup(this, config)
593
- ```
594
-
595
- - **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
596
- - An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
597
- - An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
598
- - **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
599
-
600
- The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
601
-
602
- See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
603
-
604
569
  ## Experiments (A/B tests)
605
570
 
606
571
  Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code:
@@ -785,7 +750,6 @@ val config = PostHogAndroidConfig(
785
750
  | errorTrackingConfig | PostHogErrorTrackingConfig() | Configures error tracking. autoCapture defaults to false; set it to true to autocapture uncaught exceptions when project settings also enable error tracking. |
786
751
  | surveys | false | Internal/experimental native Android survey support. Native Android survey UI is not fully supported or documented yet. |
787
752
  | surveysConfig | PostHogSurveysConfig() | Internal/experimental survey display delegate configuration, primarily for hybrid SDKs. |
788
- | bootstrap | null | Seeds identity (distinctId, isIdentifiedId) and feature-flag state (featureFlags, featureFlagPayloads) before the first /flags response. Bootstrapped identity applies to the first session; only enabled flags are served, until the first /flags response replaces them. See [bootstrapping](/docs/feature-flags/bootstrapping.md#behavior-on-mobile-sdks). |
789
753
 
790
754
  ### Event filtering with `beforeSend`
791
755
 
@@ -289,7 +289,6 @@ The [`PostHogConfig` object](https://github.com/PostHog/posthog-ios/blob/main/Po
289
289
  | reuseAnonymousIdType: BooleanDefault: false | Whether the SDK should reuse the anonymous Id between user changes. When enabled, a single Id will be used for all anonymous users on this device. |
290
290
  | surveysType: BooleanDefault: true | Enable Surveys. |
291
291
  | setBeforeSendType: FunctionDefault: undefined | Hook that allows for amending, sampling, or dropping events before they are sent to PostHog. |
292
- | bootstrapType: PostHogBootstrapConfigDefault: nil | Seeds identity (distinctId, isIdentifiedId) and feature-flag state (featureFlags, featureFlagPayloads) before the first /flags response. Bootstrapped identity applies to the first session; only enabled flags are served, until the first /flags response replaces them. See [bootstrapping](/docs/feature-flags/bootstrapping.md#behavior-on-mobile-sdks). |
293
292
 
294
293
  ### Community questions
295
294
 
@@ -605,43 +605,6 @@ PostHog AI
605
605
  await Posthog().reloadFeatureFlags();
606
606
  ```
607
607
 
608
- ### Bootstrapping flags
609
-
610
- Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
611
-
612
- To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
613
-
614
- Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires the Flutter SDK `5.31.0`+):
615
-
616
- Dart
617
-
618
- PostHog AI
619
-
620
- ```dart
621
- final config = PostHogConfig('<ph_project_token>');
622
- config.host = 'https://us.i.posthog.com';
623
- config.bootstrap = PostHogBootstrapConfig(
624
- distinctId: 'distinct_id_of_your_user',
625
- isIdentifiedId: true,
626
- featureFlags: {
627
- 'flag-1': true,
628
- 'variant-flag': 'control',
629
- },
630
- );
631
- await Posthog().setup(config);
632
- ```
633
-
634
- The values are forwarded to the native iOS and Android SDKs:
635
-
636
- - **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
637
- - An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
638
- - An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
639
- - **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
640
-
641
- The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
642
-
643
- On Flutter web, `bootstrap` is not applied, so configure it in your `posthog.init({...})` snippet instead. See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
644
-
645
608
  ### Setting properties for flag evaluation
646
609
 
647
610
  If a flag targets person or group properties, you can send those properties inline with the next flag evaluation request instead of waiting for a `$set` event to be ingested. This avoids the race where a flag returns a stale value right after you set a property.
@@ -1,6 +1,6 @@
1
1
  # PostHog Python SDK
2
2
 
3
- **SDK Version:** 7.25.0
3
+ **SDK Version:** 7.22.1
4
4
 
5
5
  Integrate PostHog into any python application.
6
6
 
@@ -73,7 +73,6 @@ Initialize a new PostHog client instance.
73
73
  - **`capture_compression`** (`CaptureCompression`) - Request-body compression for capture-v1 uploads (ignored in V0, which uses ``gzip``). ``CaptureCompression.GZIP`` or ``DEFLATE`` (or the strings ``"gzip"``/``"deflate"``). When omitted, the ``POSTHOG_CAPTURE_COMPRESSION`` env var is consulted, then the legacy ``gzip`` flag, then no compression.
74
74
  - **`secret_key`** (`any`) - A Personal API Key or Project Secret API Key, used to authenticate local feature flag evaluation, remote config payloads, and decrypted flag payloads. Example:: posthog.Client(project_api_key, secret_key="phx_...")
75
75
  - **`_dedicated_ai_endpoint`** (`bool`)
76
- - **`metrics?`** (`dict`)
77
76
 
78
77
  ### Returns
79
78
 
@@ -260,7 +259,7 @@ posthog.capture('$pageview', distinct_id="distinct_id_of_the_user", properties={
260
259
 
261
260
  **Release Tag:** public
262
261
 
263
- Capture an exception for error tracking. When OpenTelemetry is installed and a valid span is active, its trace and span IDs are added as ``$trace_id`` and ``$span_id`` event properties.
262
+ Capture an exception for error tracking.
264
263
 
265
264
  ### Parameters
266
265
 
@@ -534,41 +534,6 @@ PostHogSDK.shared.captureFeatureView(flag: "flag-key", flagVariant: "variant-key
534
534
  PostHogSDK.shared.captureFeatureInteraction(flag: "flag-key", flagVariant: "variant-key")
535
535
  ```
536
536
 
537
- ### Bootstrapping flags
538
-
539
- Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
540
-
541
- To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
542
-
543
- Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires iOS SDK `3.66.0`+):
544
-
545
- Swift
546
-
547
- PostHog AI
548
-
549
- ```swift
550
- let config = PostHogConfig(projectToken: "<ph_project_token>", host: "https://us.i.posthog.com")
551
- config.bootstrap = PostHogBootstrapConfig(
552
- distinctId: "distinct_id_of_your_user",
553
- isIdentifiedId: true,
554
- featureFlags: [
555
- "flag-1": true,
556
- "variant-flag": "control"
557
- ],
558
- featureFlagPayloads: nil
559
- )
560
- PostHogSDK.shared.setup(config)
561
- ```
562
-
563
- - **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
564
- - An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
565
- - An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
566
- - **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
567
-
568
- The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
569
-
570
- See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
571
-
572
537
  ## Experiments (A/B tests)
573
538
 
574
539
  Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code. See [adding experiment code](/docs/experiments/adding-experiment-code.md) for iOS examples.
@@ -57,6 +57,7 @@
57
57
  "expo-ui",
58
58
  "expo-upgrade",
59
59
  "expo-web-to-native",
60
+ "feedback",
60
61
  "firebase-ai-logic-basics",
61
62
  "firebase-app-hosting-basics",
62
63
  "firebase-auth-basics",
@@ -121,5 +122,5 @@
121
122
  "wrangler",
122
123
  "xcode-project-setup"
123
124
  ],
124
- "count": 120
125
+ "count": 121
125
126
  }
@@ -2,15 +2,17 @@
2
2
  name: neon
3
3
  description: >-
4
4
  Overview of the Neon platform for apps and agents, spanning Postgres, Auth,
5
- the Data API, and the new services: Object Storage, Compute Functions, and AI
6
- Gateway. Use when "Neon" is mentioned, or when any of its individual
7
- capabilities are the trigger: "object storage" or "S3", "buckets", "serverless
8
- functions", "AI gateway", "call an LLM", "postgres", "database", or "backend".
5
+ Data API, and the new services: Object Storage, Compute Functions, and AI
6
+ Gateway. Use whenever "Neon" is mentioned for an overview of how to work with Neon and how to get started. Otherwise, the individual capabilities are the triggers: "object storage" or "S3-compatible
7
+ storage", "serverless functions", "background jobs", or
8
+ "run code near my database", "AI gateway", "LLM proxy",
9
+ "model routing", or "call an LLM" → AI Gateway; "database", "Postgres", or
10
+ "authentication" → Postgres and Auth.
9
11
  ---
10
12
 
11
13
  # Neon
12
14
 
13
- Important: Neon is no longer just a Serverless Postgres provider. Neon is the backend for apps and agents with Serverless Postgres, Auth, Functions, Object Storage, and an AI Gateway: instant, branchable, serverless.
15
+ Important: Neon is no longer just a Serverless Postgres provider. Neon is the backend for apps and agents with Serverless Postgres, Auth, Functions, Storage, and an AI Gateway: instant, branchable, serverless.
14
16
 
15
17
  Use this skill as the starting point for anything Neon: get an overview of its capabilities, find your way around the Neon agent skills and documentation, and follow best practices for getting started and for branch-first development workflows.
16
18
 
@@ -20,15 +22,15 @@ Neon bundles several backend primitives for building apps and agents that all br
20
22
 
21
23
  - **Postgres** — Serverless Postgres that scales and branches with your app. _Generally available._
22
24
  - **Auth** — Managed authentication with users and sessions stored in Postgres. _Generally available._
23
- - **Object Storage** — S3-compatible object storage that branches with your projects. _Public beta._
24
- - **Functions** — Long-running serverless functions - Neon's compute offering - running close to your database — for WebSocket servers, long agent HTTP streams, APIs, and server-sent event servers. _Public beta._
25
- - **AI Gateway** — One API for all frontier and open-source models, with routing, logging, and cost controls, powered by Databricks. _Public beta._
25
+ - **Object Storage** — S3-compatible object storage that branches with your projects. _Preview / early access._
26
+ - **Compute Functions** — Long-running serverless functions running close to your database — for WebSocket servers, long agent HTTP streams, APIs, and server-sent event servers. _Preview / early access._
27
+ - **AI Gateway** — One API for all frontier and open-source models, with routing, logging, and cost controls, powered by Databricks. _Preview / early access._
26
28
 
27
- ### Public Beta Service Availability
29
+ ### Preview Service Availability
28
30
 
29
- Object Storage, Functions, and AI Gateway are in public beta.
31
+ Object Storage, Compute Functions, and AI Gateway are preview (early access) features.
30
32
 
31
- Beta access features are only available on net-new projects created in the `us-east-2` region; they cannot be enabled on existing projects for now. Before guiding a user through any of these services, confirm they are working with a new project in `us-east-2`. If not, they will need to create a new project in that region.
33
+ Early access features are only available on net-new projects created in the `us-east-2` region; they cannot be enabled on existing projects for now. Before guiding a user through any of these services, confirm they are working with a new project in `us-east-2`. If not, they will need to create a new project in that region. Then confirm the user already has early access; otherwise, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access.
32
34
 
33
35
  ## Architecture: how Neon fits
34
36
 
@@ -72,7 +74,7 @@ Common doc URLs are organized in the topic links below. If you need a page not l
72
74
  - Choosing or creating the right branch type for dev, preview, test, or CI workflows → `neon-postgres-branches`.
73
75
  - Storing and serving files (uploads, images, blobs) that branch with the database → `neon-object-storage`.
74
76
  - Deploying long-running or streaming serverless functions — APIs, agents, SSE/WebSocket servers — next to the database → `neon-functions`.
75
- - Calling an LLM or routing across model providers with one credential — including discovering the branch's servable models at runtime via the OpenAI-compatible `/v1/models` endpoint → `neon-ai-gateway`.
77
+ - Calling an LLM or routing across model providers with one credential → `neon-ai-gateway`.
76
78
  - Provisioning instant, claimable temporary Postgres databases (for example, one per end user or demo) → `claimable-postgres`.
77
79
  - Diagnosing or fixing excessive Postgres egress (network data-transfer) costs in a codebase → `neon-postgres-egress-optimizer`.
78
80
 
@@ -96,8 +98,6 @@ For example, to install the object storage skill globally for a specific agent w
96
98
  npx skills add neondatabase/agent-skills -s neon-object-storage -g -y -a <agent-name>
97
99
  ```
98
100
 
99
- You should also make sure the skills are up to date. You can run the same command or replace `add` with `update` to update all Neon skills.
100
-
101
101
  ## Getting Started with Neon
102
102
 
103
103
  Use this section when guiding a user through first-time Neon setup, or when adding a new Neon service (Auth, object storage, functions, and so on) to a project that is already onboarded (for example, one already using Neon Postgres).
@@ -129,7 +129,7 @@ If `init` is not suitable, the individual steps can be run non-interactively, us
129
129
  - **MCP server:** `npx -y add-mcp https://mcp.neon.tech/mcp -g -n Neon -y -a <agent-name>`
130
130
  - **Agent skill:** `npx skills add neondatabase/agent-skills --skill neon-postgres --skill neon --agent <agent-name> -y`
131
131
 
132
- Prefer the CLI over the MCP server unless the user instructs otherwise, since it provides more capabilities, including deploying Neon Functions. For full CLI installation options, see https://neon.com/docs/cli/install.md
132
+ Prefer the CLI over the MCP server unless the user instructs otherwise, since it provides more capabilities, including deploying Neon Functions. For full CLI installation options, see https://neon.com/docs/reference/cli-install.md
133
133
 
134
134
  ### Setup Flow
135
135
 
@@ -178,7 +178,7 @@ If env vars are injected at runtime instead of written to disk — or you simply
178
178
  - `neon-env run -- <your dev command>` (from `@neon/env`) fetches the branch's vars from your `neon.ts` and injects them into the child process at runtime — no `.env` file needed. This is the runtime counterpart to the on-disk `env pull`.
179
179
  - `neon-env export` (from `@neon/env`) prints the branch's env to stdout as dotenv lines or, with `--format json`, JSON — for piping into another env manager rather than running a command. For example, [varlock](https://varlock.dev) can bulk-load it from a `.env.schema` with `@setValuesBulk(exec("neon-env export --format json"), format=json)`.
180
180
  - `fetchEnv` from `@neon/env` is the programmatic version of the same thing: resolve the branch's env in code at runtime instead of shelling out to `neon-env run`.
181
- - `neon dev` injects the same vars into your local dev server — it's part of Neon Functions local development (a public beta feature).
181
+ - `neon dev` injects the same vars into your local dev server — it's part of Neon Functions local development (a private preview feature).
182
182
 
183
183
  When an agent should not write a local `.env`, instruct it (for example in your `AGENTS.md`) to run `neon checkout <branch> --no-env-pull` and rely on runtime injection.
184
184
 
@@ -212,13 +212,9 @@ export default defineConfig({
212
212
  auth: true,
213
213
  dataApi: true,
214
214
  preview: {
215
- functions: {
216
- /* ... */
217
- }, // see the neon-functions skill
218
- buckets: {
219
- /* ... */
220
- }, // see the neon-object-storage skill
221
- aiGateway: true, // see the neon-ai-gateway skill
215
+ functions: { /* ... */ }, // see the neon-functions skill
216
+ buckets: { /* ... */ }, // see the neon-object-storage skill
217
+ aiGateway: true, // see the neon-ai-gateway skill
222
218
  },
223
219
  });
224
220
  ```
@@ -324,10 +320,7 @@ export default defineConfig({ auth: true, dataApi: true });
324
320
 
325
321
  // 2. Or verify a third-party IdP instead of Neon Auth:
326
322
  export default defineConfig({
327
- dataApi: {
328
- authProvider: "external",
329
- jwksUrl: "https://your-idp/.well-known/jwks.json",
330
- },
323
+ dataApi: { authProvider: "external", jwksUrl: "https://your-idp/.well-known/jwks.json" },
331
324
  });
332
325
  ```
333
326
 
@@ -16,7 +16,7 @@ description: >-
16
16
 
17
17
  # Neon AI Gateway
18
18
 
19
- This is a public beta feature and only available in `us-east-2`. The Neon AI Gateway is the LLM inference layer built into your Neon branch: one API and one Neon credential give you access to frontier and open-source models from Anthropic, OpenAI, Google, Meta, Alibaba, DeepSeek, and Databricks — powered by Databricks. Your existing OpenAI/Anthropic/Gemini SDK works by changing only the base URL.
19
+ This is a preview feature and only available in `us-east-2`. The Neon AI Gateway is the LLM inference layer built into your Neon branch: one API and one Neon credential give you access to frontier and open-source models from Anthropic, OpenAI, Google, Meta, Alibaba, DeepSeek, and Databricks — powered by Databricks. Your existing OpenAI/Anthropic/Gemini SDK works by changing only the base URL.
20
20
 
21
21
  Use this skill to help the user send model calls through the gateway, wire it into the AI SDK or Mastra, and switch providers without rewiring code. Deliver a working inference request, a configured agent, or a precise answer from the official Neon docs.
22
22
 
@@ -215,75 +215,9 @@ Use a model's catalog ID directly in the `model` field — e.g. `claude-sonnet-4
215
215
  - **models.dev Neon provider page: https://models.dev/providers/neon** — the canonical, always-current list of the Neon provider's model IDs and their underlying models. The machine-readable catalog is at https://models.dev/api.json (the `neon` key).
216
216
  - **Models doc:** see Further reading.
217
217
 
218
- ## List available models at runtime (`/v1/models`)
219
-
220
- The gateway also exposes the model catalog **live from your own branch endpoint**, so an app or agent can discover exactly which models this branch serves without hard-coding the list. It is an OpenAI-compatible list endpoint, served **only on the unified dialect** (`/v1`):
221
-
222
- ```bash
223
- curl "$NEON_AI_GATEWAY_BASE_URL/v1/models" \
224
- -H "Authorization: Bearer $NEON_AI_GATEWAY_TOKEN"
225
- ```
226
-
227
- - `GET ${NEON_AI_GATEWAY_BASE_URL}/v1/models` → **200**
228
- - `GET ${NEON_AI_GATEWAY_BASE_URL}/openai/v1/models` → **404** (not served on the Responses dialect — use `/v1`)
229
-
230
- **Getting the credentials for the request.** Both values come from the same branch-scoped Neon credential the gateway uses everywhere else — you never manage a provider key:
231
-
232
- - **Provision via `neon.ts` (recommended).** Enable `preview.aiGateway` in `neon.ts` and run `neon deploy` (or `neon config apply`). Provisioning, `neon link`, and `neon checkout` pull `NEON_AI_GATEWAY_TOKEN` + `NEON_AI_GATEWAY_BASE_URL` into your local `.env.local`; inside a deployed Neon Function they're injected automatically. See **Setup** and **Environment variables** above.
233
- - **Pull into the environment via CLI.** On a branch that already has the gateway enabled, `neon env pull` writes the two vars to `.env`/`.env.local`, or `neon-env run -- <cmd>` injects them at runtime without a file.
234
- - **Provision via the Console UI.** Enable the AI Gateway on the branch in the Neon Console and copy the branch's gateway base URL and a Neon credential (token) from the project's connection/credentials view.
235
-
236
- Any Neon credential (`nt_live_...`) valid for the branch works as the bearer token; `NEON_AI_GATEWAY_BASE_URL` is the bare branch host (no path).
237
-
238
- **Response shape** — OpenAI/OpenRouter-compatible list:
239
-
240
- ```jsonc
241
- {
242
- "object": "list",
243
- "data": [
244
- {
245
- "id": "claude-sonnet-4-6", // catalog model ID — use directly in the `model` field
246
- "canonical_slug": "claude-sonnet-4-6",
247
- "name": "Claude Sonnet 4.6", // human-readable display name
248
- "object": "model",
249
- "owned_by": "anthropic", // anthropic | openai | google | meta | alibaba | databricks
250
- "created": 0,
251
- "enabled": true,
252
- "context_length": null,
253
- "architecture": {
254
- "modality": "text->text",
255
- "input_modalities": ["text"],
256
- "output_modalities": ["text"],
257
- "tokenizer": "Claude", // Claude | Gemini | GPT | "" (empty for open-source)
258
- "instruct_type": null
259
- },
260
- "top_provider": {
261
- "is_moderated": false,
262
- "context_length": null,
263
- "max_completion_tokens": null
264
- },
265
- "pricing": null,
266
- "per_request_limits": null
267
- }
268
- // ... one entry per model in the branch's catalog
269
- ]
270
- }
271
- ```
272
-
273
- > Note: `context_length`, `pricing`, and `per_request_limits` are currently `null` and `created` is `0` for every entry — for context windows, pricing, and capabilities use the models.dev catalog above. Use `/v1/models` when you need the live, branch-scoped list of servable model IDs (e.g. to populate a model picker or validate a `model` before a request).
274
-
275
218
  ## Availability
276
219
 
277
- The AI Gateway is a public beta feature available only on new projects in the `us-east-2` region; it can't be enabled on existing projects. Foundation model access requires a paid Neon plan. Confirm the user's project is a new project in `us-east-2`.
278
-
279
- ### Enabling the gateway: plan and model-catalog gating
280
-
281
- The AI Gateway is credential-gated rather than a provisioning step, but two plan/beta limits gate it — one blocks provisioning, the other only trims the catalog — and the CLI surfaces each:
282
-
283
- - **Free plan → provisioning is blocked.** `neon config apply` / `deploy` and `neon checkout` **refuse** to enable the gateway on a Free plan (the gateway can't serve requests there), with a friendly "upgrade to a paid plan, or remove `preview.aiGateway`" error. A dry-run `neon config plan` and `neon env pull` don't provision, so they only **warn**. So: to use the gateway the project's account must be on a paid Neon plan.
284
- - **Paid plan with a reduced model catalog.** On a paid plan the gateway provisions and serves, but during the beta an account can start with a trimmed catalog — some flagship models (e.g. Anthropic Opus, OpenAI Codex / `*-pro`) are missing from `GET /v1/models`. This is expected; `neon env pull` (and the env pull bundled into `apply` / `deploy` / `checkout`) warns and links the user to their branch's AI Gateway page in the Neon Console (`https://console.neon.tech/app/projects/<project-id>/branches/<branch-id>/ai-gateway`) to request access to more models. Verify what's actually available for the branch by reading `/v1/models` (see the models section above) rather than assuming the full catalog.
285
-
286
- When helping a user debug "the gateway isn't working" or "a model is missing", use `/v1/models` plus the account's plan to distinguish these two cases — a Free plan blocks provisioning entirely, while a reduced catalog on a paid plan just needs a model-access request.
220
+ The AI Gateway is a preview (early access) feature available only on new projects in the `us-east-2` region; it can't be enabled on existing projects. Foundation model access requires a paid Neon plan. Confirm the user's project is a new project in `us-east-2`. If the user does not yet have access, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access
287
221
 
288
222
  ## Neon Documentation
289
223