vybekiit 0.7.26 → 0.7.27
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 +3891 -1301
- package/dist/global-skills/aws-cdk/SKILL.md +19 -5
- package/dist/global-skills/aws-cdk/references/fast-deployments.md +191 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +16 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +16 -26
- package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +7 -3
- package/dist/global-skills/aws-cloudformation/references/cloudformation-language-server.md +177 -0
- package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +8 -2
- package/dist/global-skills/aws-cloudformation/references/persist-template-context.script.md +5 -8
- package/dist/global-skills/aws-cloudformation/references/retrieve-template-context.script.md +1 -1
- package/dist/global-skills/aws-cloudformation/references/security-considerations.md +51 -0
- package/dist/global-skills/aws-cloudformation/references/troubleshoot-failed-stack.script.md +138 -0
- package/dist/global-skills/aws-cloudformation/references/{validate-cloudformation-template.script.md → validate-with-cfn-lint.script.md} +15 -27
- package/dist/global-skills/aws-cloudformation/references/validate-with-cloudformation-validate.script.md +181 -0
- package/dist/global-skills/aws-cloudformation/references/validation-tool-selection.md +44 -0
- package/dist/global-skills/aws-serverless/SKILL.md +9 -1
- package/dist/global-skills/aws-serverless/references/architecture.md +3 -1
- package/dist/global-skills/aws-serverless/references/lambda.md +3 -1
- package/dist/global-skills/aws-serverless/references/orchestration.md +1 -0
- package/dist/global-skills/better-auth-best-practices/SKILL.md +18 -8
- package/dist/global-skills/eas-app-stores/SKILL.md +31 -15
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +2 -2
- package/dist/global-skills/eas-app-stores/references/ios-app-store.md +37 -32
- package/dist/global-skills/eas-app-stores/references/native-ios.md +167 -0
- package/dist/global-skills/eas-app-stores/references/play-store.md +3 -7
- package/dist/global-skills/eas-app-stores/references/testflight.md +39 -35
- package/dist/global-skills/eas-simulator/SKILL.md +48 -26
- package/dist/global-skills/eas-simulator/references/controllers.md +32 -3
- package/dist/global-skills/eas-simulator/references/run-your-app.md +34 -4
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +8 -4
- package/dist/global-skills/eas-update/SKILL.md +146 -0
- package/dist/global-skills/eas-update/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-animation/RECIPES.md +2 -2
- package/dist/global-skills/expo-animation/SKILL.md +9 -2
- package/dist/global-skills/expo-brownfield/SKILL.md +18 -11
- package/dist/global-skills/expo-brownfield/agents/openai.yaml +2 -2
- package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +94 -69
- package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +40 -42
- package/dist/global-skills/expo-brownfield/references/comparison.md +5 -5
- package/dist/global-skills/expo-brownfield/references/feature-integration.md +163 -0
- package/dist/global-skills/expo-brownfield/references/troubleshooting.md +17 -17
- package/dist/global-skills/expo-brownfield/references/version-compatibility.md +40 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +27 -6
- package/dist/global-skills/expo-design-system/SKILL.md +27 -7
- package/dist/global-skills/expo-design-system/references/audit.md +7 -2
- package/dist/global-skills/expo-design-system/references/native-slop.md +74 -0
- package/dist/global-skills/expo-examples/SKILL.md +0 -1
- package/dist/global-skills/expo-examples/references/catalog.md +1 -1
- package/dist/global-skills/expo-migrate-module/SKILL.md +21 -10
- package/dist/global-skills/expo-migrate-module/references/compatibility.md +80 -23
- package/dist/global-skills/expo-migrate-module/references/migration-map.md +162 -11
- package/dist/global-skills/expo-native-ui/SKILL.md +25 -16
- package/dist/global-skills/expo-native-ui/agents/openai.yaml +2 -2
- package/dist/global-skills/expo-native-ui/references/controls.md +5 -46
- package/dist/global-skills/expo-native-ui/references/icons.md +21 -2
- package/dist/global-skills/expo-native-ui/references/media.md +15 -20
- package/dist/global-skills/expo-native-ui/references/visual-effects.md +12 -11
- package/dist/global-skills/expo-overview/SKILL.md +17 -12
- package/dist/global-skills/expo-router/SKILL.md +5 -3
- package/dist/global-skills/expo-router/references/tabs.md +5 -5
- package/dist/global-skills/expo-upgrade/SKILL.md +3 -1
- package/dist/global-skills/expo-web-to-native/references/false-friends.md +2 -2
- package/dist/global-skills/expo-web-to-native/references/native-patterns.md +1 -1
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +13 -16
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +4 -5
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +4 -4
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +3 -3
- package/dist/global-skills/firebase-auth-basics/SKILL.md +11 -6
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +4 -5
- 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 +24 -25
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +4 -2
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +7 -4
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +2 -3
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -1
- package/dist/global-skills/firebase-data-connect/examples.md +4 -4
- package/dist/global-skills/firebase-data-connect/reference/config.md +5 -4
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +1 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +2 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +2 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +17 -6
- package/dist/global-skills/firebase-data-connect/reference/security.md +5 -5
- package/dist/global-skills/firebase-data-connect/templates.md +2 -1
- package/dist/global-skills/firebase-firestore/SKILL.md +20 -8
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +5 -4
- package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +12 -3
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +16 -18
- package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +1 -1
- package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +5 -1
- package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +7 -7
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +5 -5
- package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +4 -4
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +16 -18
- package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +1 -1
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +0 -5
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +36 -8
- package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +1 -7
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +17 -6
- package/dist/global-skills/{firebase-firestore/references/standard/security_rules.md → firestore-rules-creation/SKILL.md} +24 -13
- package/dist/global-skills/grow-my-customers/SKILL.md +23 -0
- package/dist/global-skills/instrument-feature-flags/SKILL.md +25 -25
- package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +141 -285
- package/dist/global-skills/instrument-feature-flags/references/android.md +6 -15
- package/dist/global-skills/instrument-feature-flags/references/api.md +4 -11
- package/dist/global-skills/instrument-feature-flags/references/best-practices.md +1 -13
- package/dist/global-skills/instrument-feature-flags/references/django.md +14 -27
- package/dist/global-skills/instrument-feature-flags/references/dotnet.md +20 -79
- package/dist/global-skills/instrument-feature-flags/references/elixir.md +1 -9
- package/dist/global-skills/instrument-feature-flags/references/flask.md +13 -13
- package/dist/global-skills/instrument-feature-flags/references/flutter.md +3 -24
- package/dist/global-skills/instrument-feature-flags/references/go.md +3 -15
- package/dist/global-skills/instrument-feature-flags/references/ios.md +4 -17
- package/dist/global-skills/instrument-feature-flags/references/java.md +5 -13
- package/dist/global-skills/instrument-feature-flags/references/laravel.md +13 -17
- package/dist/global-skills/instrument-feature-flags/references/next-js.md +25 -32
- package/dist/global-skills/instrument-feature-flags/references/nodejs.md +8 -15
- package/dist/global-skills/instrument-feature-flags/references/php.md +1 -15
- package/dist/global-skills/instrument-feature-flags/references/python.md +2 -15
- package/dist/global-skills/instrument-feature-flags/references/react-native.md +13 -15
- package/dist/global-skills/instrument-feature-flags/references/react.md +17 -21
- package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +37 -83
- package/dist/global-skills/instrument-feature-flags/references/ruby.md +2 -15
- package/dist/global-skills/instrument-feature-flags/references/rust.md +13 -25
- package/dist/global-skills/instrument-feature-flags/references/usage.md +14 -63
- package/dist/global-skills/instrument-feature-flags/references/web.md +9 -14
- package/dist/global-skills/instrument-product-analytics/SKILL.md +29 -29
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/android.md +72 -107
- package/dist/global-skills/instrument-product-analytics/references/angular.md +26 -28
- package/dist/global-skills/instrument-product-analytics/references/astro.md +13 -24
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +45 -63
- package/dist/global-skills/instrument-product-analytics/references/django.md +14 -27
- package/dist/global-skills/instrument-product-analytics/references/dotnet.md +20 -79
- package/dist/global-skills/instrument-product-analytics/references/elixir.md +47 -49
- package/dist/global-skills/instrument-product-analytics/references/flask.md +13 -13
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +60 -90
- package/dist/global-skills/instrument-product-analytics/references/go.md +17 -56
- package/dist/global-skills/instrument-product-analytics/references/identify-users.md +15 -15
- package/dist/global-skills/instrument-product-analytics/references/ios.md +11 -15
- package/dist/global-skills/instrument-product-analytics/references/laravel.md +13 -17
- package/dist/global-skills/instrument-product-analytics/references/next-js.md +25 -32
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +13 -27
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +14 -28
- package/dist/global-skills/instrument-product-analytics/references/php.md +33 -84
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +229 -9
- package/dist/global-skills/instrument-product-analytics/references/python.md +415 -106
- package/dist/global-skills/instrument-product-analytics/references/react-native.md +161 -155
- package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +12 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +15 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +12 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +26 -41
- package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +37 -83
- package/dist/global-skills/instrument-product-analytics/references/ruby.md +48 -108
- package/dist/global-skills/instrument-product-analytics/references/svelte.md +18 -24
- package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +17 -19
- package/dist/global-skills/instrument-product-analytics/references/usage.md +14 -63
- package/dist/global-skills/instrument-product-analytics/references/vue-js.md +29 -28
- package/dist/global-skills/manifest.json +8 -2
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +28 -37
- package/dist/global-skills/mongodb-search-and-ai/references/automated-embedding.md +438 -0
- package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +60 -4
- package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +46 -108
- package/dist/global-skills/neon/SKILL.md +207 -213
- package/dist/global-skills/neon/references/auth.md +12 -0
- package/dist/global-skills/neon/references/claimable-neon.md +10 -14
- package/dist/global-skills/neon/references/function-triggers.md +53 -0
- package/dist/global-skills/neon/references/logs-loki.md +61 -0
- package/dist/global-skills/neon/references/parse-env.md +32 -0
- package/dist/global-skills/neon/references/sdk.md +7 -0
- package/dist/global-skills/neon-ai-gateway/SKILL.md +14 -16
- package/dist/global-skills/neon-auth/SKILL.md +155 -0
- package/dist/global-skills/neon-auth/references/managed-auth.md +173 -0
- package/dist/global-skills/neon-auth/references/self-managed.md +25 -0
- package/dist/global-skills/neon-functions/SKILL.md +159 -84
- package/dist/global-skills/neon-functions/references/ai-sdk.md +4 -6
- package/dist/global-skills/neon-functions/references/function-triggers.md +249 -0
- package/dist/global-skills/neon-functions/references/mastra-studio.md +3 -3
- package/dist/global-skills/neon-functions/references/mcp.md +1 -1
- package/dist/global-skills/neon-functions/references/production-hardening.md +340 -0
- package/dist/global-skills/neon-functions/references/sse.md +8 -5
- package/dist/global-skills/neon-object-storage/SKILL.md +10 -11
- package/dist/global-skills/neon-postgres/SKILL.md +120 -17
- package/dist/global-skills/neon-postgres/references/full-text-search.md +99 -0
- package/dist/global-skills/neon-postgres/references/hybrid-search.md +90 -0
- package/dist/global-skills/neon-postgres/references/lakebase-search-drizzle.md +172 -0
- package/dist/global-skills/neon-postgres/references/vector-search.md +137 -0
- package/dist/global-skills/neon-postgres-branches/SKILL.md +3 -3
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +1 -1
- package/dist/global-skills/onboarding/SKILL.md +8 -6
- package/dist/global-skills/resend/SKILL.md +4 -2
- package/dist/global-skills/resend/references/broadcasts.md +6 -1
- package/dist/global-skills/resend/references/receiving.md +29 -10
- package/dist/global-skills/resend/references/sending/email-management.md +14 -4
- package/dist/global-skills/resend/references/topics.md +9 -6
- package/dist/global-skills/resend/references/usage.md +117 -0
- package/dist/global-skills/resend/references/webhooks.md +59 -2
- package/dist/global-skills/stripe-best-practices/SKILL.md +35 -29
- package/dist/global-skills/stripe-best-practices/references/billing.md +9 -2
- package/dist/global-skills/stripe-best-practices/references/payments.md +4 -2
- package/dist/global-skills/stripe-best-practices/references/security.md +3 -1
- package/dist/global-skills/stripe-best-practices/references/tax.md +39 -20
- package/dist/global-skills/supabase/SKILL.md +6 -0
- package/dist/global-skills/use-railway/SKILL.md +42 -22
- package/dist/global-skills/use-railway/references/analyze-db.md +7 -6
- package/dist/global-skills/use-railway/references/cloud-agents.md +70 -0
- package/dist/global-skills/use-railway/references/configure.md +17 -2
- package/dist/global-skills/use-railway/references/databases.md +107 -0
- package/dist/global-skills/use-railway/references/deploy.md +5 -5
- package/dist/global-skills/use-railway/references/feature-flags.md +25 -13
- package/dist/global-skills/use-railway/references/iac.md +66 -77
- package/dist/global-skills/use-railway/references/operate.md +26 -3
- package/dist/global-skills/use-railway/references/request.md +31 -23
- package/dist/global-skills/use-railway/references/setup.md +16 -5
- package/dist/global-skills/use-railway/references/tracing.md +261 -0
- package/dist/global-skills/use-railway/references/usage.md +52 -0
- package/dist/global-skills/validate-my-idea/SKILL.md +54 -0
- package/dist/global-skills/{feedback → vybekiit-feedback}/SKILL.md +16 -12
- package/dist/global-skills/watch-my-app/SKILL.md +53 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +36 -103
- package/dist/global-skills/workers-best-practices/references/configuration.md +139 -0
- package/dist/global-skills/workers-best-practices/references/platform-apis.md +51 -0
- package/dist/global-skills/workers-best-practices/references/{rules.md → runtime-patterns.md} +13 -137
- package/dist/global-skills/wrangler/SKILL.md +48 -901
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +19 -15
- package/package.json +9 -8
- package/dist/global-skills/expo-native-ui/references/animations.md +0 -220
- package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +0 -577
- package/dist/global-skills/workers-best-practices/references/review.md +0 -174
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Tracing
|
|
2
|
+
|
|
3
|
+
Trace a request from Railway's edge through a service and into the services it calls. Turn tracing on with the `set-service-tracing` and `set-project-tracing` MCP tools and read the result with `list-traces` and `get-trace`, or do both on the project's **Traces** tab.
|
|
4
|
+
|
|
5
|
+
Tracing is a preview feature. If the project has no **Traces** tab, the account needs **Tracing** enabled in Priority Boarding first.
|
|
6
|
+
|
|
7
|
+
## What Railway records without code changes
|
|
8
|
+
|
|
9
|
+
- **Edge and proxy spans.** For every sampled request to a traced service's public domain, Railway's edge records a server span (method, path, status, cache result, upstream) and the regional proxy adds a span for its hop. The edge forwards a W3C `traceparent` header to the service and stamps `x-railway-trace-id` on the response.
|
|
10
|
+
- **Automatic instrumentation (OBI).** A per-service switch that attaches eBPF probes to the service's Node.js, Go, Python, Ruby, or Java processes on the host. It exports server spans for incoming HTTP/gRPC requests, client spans for plaintext outgoing calls, and spans for database and cache protocols it decodes. No SDK, no redeploy.
|
|
11
|
+
|
|
12
|
+
Spans from inside the service only appear once the service exports them, through automatic instrumentation or an OpenTelemetry SDK. A service without a public domain never gets edge spans; only what it exports itself shows up, joined to traces other services propagate to it over the private network.
|
|
13
|
+
|
|
14
|
+
## Enable tracing
|
|
15
|
+
|
|
16
|
+
Tracing has three settings. The project default (`tracingEnabled`) and the sample rate (`tracingSampleRate`) live on the project; a per-service override (`tracingEnabled`, `null` follows the project) and the automatic instrumentation switch (`autoInstrumentationEnabled`) live on the service. Automatic instrumentation only takes effect while the service's tracing is on.
|
|
17
|
+
|
|
18
|
+
**Dashboard:** open the **Traces** tab → **Tracing setup**. Toggle **Trace requests by default** under Project, optionally set a **Sample rate** (percentage), and use each service row's **Traced** switch for overrides and **Automatic instrumentation** / **Manual instrumentation** to pick how it exports spans. The same controls are on the service under **Settings → Tracing**.
|
|
19
|
+
|
|
20
|
+
**Agent path:** three MCP tools read and change these settings, and `railway trace` does the same from the CLI. Resolve IDs from the URL or `railway status --json` first, and read before writing. On a Railway cloud agent in a dashboard chat session the `railway` CLI is unauthenticated, so resolve IDs with `list-services` and stay on the MCP tools throughout.
|
|
21
|
+
|
|
22
|
+
| Tool | Access | Purpose |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `get-tracing` | viewer | The project default (`tracingEnabled`, `sampleRate`) and, per service, `tracingOverride` (`true`/`false` pinned, `null` follows the project), the resolved `tracingEnabled`, `autoInstrumentationEnabled` and whether it is `autoInstrumentationActive`. Pass `serviceId` for one service, omit it for every service in the project |
|
|
25
|
+
| `set-service-tracing` | member | `tracingEnabled` `true`/`false` pins one service regardless of the project default, `null` makes it follow the project again; `autoInstrumentationEnabled` switches OBI for the service. Each is optional and independent; omit what should stay as it is. Service-wide, not per environment |
|
|
26
|
+
| `set-project-tracing` | member | `tracingEnabled` sets the project default for every service without an override; `sampleRate` is the fraction of client-facing requests the edge traces, `0..1`, `null` resets to Railway's default of every request. Each is optional |
|
|
27
|
+
|
|
28
|
+
All three take `projectId`. `describe-service` reports the same tracing state for one service.
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
Get tracing for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
Set service tracing for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb, service <service-id>: tracingEnabled true
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
Set project tracing for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb: tracingEnabled true, sampleRate 0.25
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
Set service tracing for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb, service <service-id>: autoInstrumentationEnabled true
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The sample rate is a fraction from 0 to 1 in the tools and the API; the dashboard shows it as a percentage. `set-service-tracing` warns when it switches auto-instrumentation on for a service whose tracing is off: the switch does nothing until the service, or the project default, is enabled. Without Railway MCP or `railway trace`, the public `projectUpdate` (`tracingEnabled`, `tracingSampleRate`) and `serviceUpdate` (`tracingEnabled`, `autoInstrumentationEnabled`) mutations through `railway api` set the same fields; see [request.md](request.md). That fallback needs an authenticated CLI, which a cloud agent's chat session does not have.
|
|
47
|
+
|
|
48
|
+
**CLI:** `railway trace` (aliases `traces`, `tracing`) sets the same fields. Use it when the user works in a linked repo or wants exact command output; on a cloud agent's chat session the CLI is unauthenticated, so stay on MCP there.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
railway trace status --all # project default, every service, last edge/app span
|
|
52
|
+
railway trace enable --service <service> # pin tracing on for one service
|
|
53
|
+
railway trace enable --auto-instrument # tracing plus OBI for the linked service
|
|
54
|
+
railway trace enable --project-default --sample-rate 0.25
|
|
55
|
+
railway trace disable --auto-instrument # pin tracing off and switch OBI off
|
|
56
|
+
railway trace inherit # follow the project default again
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Tracing is service-wide, so `--environment` only scopes `status`, `list` and `get`; pass `--project <id> --environment <name>` when nothing is linked. `--json` prints one document with the project default and the service state. Changing tracing needs a user or workspace token; a project token (`RAILWAY_TOKEN`) can only read. The CLI has no switch for auto-instrumentation alone: `railway trace disable --auto-instrument` followed by `railway trace enable` leaves tracing on and OBI off.
|
|
60
|
+
|
|
61
|
+
What happens next:
|
|
62
|
+
|
|
63
|
+
- The edge starts tracing requests to the service's domains within seconds.
|
|
64
|
+
- Automatic instrumentation reaches the running containers within about a minute. No redeploy.
|
|
65
|
+
- The OpenTelemetry variables below are added on the **next deploy**. An app with an SDK exports nothing until it is redeployed: `railway redeploy --service <service> --yes`.
|
|
66
|
+
|
|
67
|
+
## Choose how the service exports spans
|
|
68
|
+
|
|
69
|
+
**Recommend the OpenTelemetry SDK.** Spans the service exports itself are much higher quality than what automatic instrumentation can recover from outside the process: they carry the route, the query, the business identifiers and the errors the code knows about; they nest under handler-level spans, so the trace shows which step of a request took the time instead of a flat list of calls; they continue the trace through queue consumers, cron work and TLS callees; and they work in any language. Automatic instrumentation is the fallback for a service whose code can't be changed right now, or a first look while the SDK is being added. Present it as a stopgap, not the destination. When a user asks to "instrument my app", default to the SDK unless they ask for the no-code path.
|
|
70
|
+
|
|
71
|
+
| | Automatic instrumentation (OBI) | OpenTelemetry SDK |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| Code changes | None | Install the SDK, load it before the app serves requests |
|
|
74
|
+
| Takes effect | About a minute after enabling, no redeploy | Next deploy |
|
|
75
|
+
| Runtimes | Node.js, Go, Python, Ruby, Java. Not Bun, so not [Functions](#instrument-a-function-bun) | Any language with an OTel SDK |
|
|
76
|
+
| Captures | Incoming HTTP/gRPC, plaintext outgoing HTTP/gRPC, decoded DB and cache protocols | Whatever the SDK's instrumentations cover, plus custom spans and attributes |
|
|
77
|
+
| Misses | Outbound TLS callees don't join the trace; queue consumers, cron work and background jobs start new traces; Node.js and Python context propagation is best effort | Nothing structural; depends on the instrumentations you enable |
|
|
78
|
+
|
|
79
|
+
Pick one per service. Running an SDK in a service that also has automatic instrumentation produces duplicate spans for every request. When moving from OBI to an SDK, deploy the SDK first, confirm its spans arrive, then switch the service to manual instrumentation.
|
|
80
|
+
|
|
81
|
+
## Instrument with an OpenTelemetry SDK
|
|
82
|
+
|
|
83
|
+
When tracing is on for a service, its next deploy gets these variables. They show up in the service's **Variables** tab alongside the other Railway-provided variables and every OpenTelemetry SDK reads them, so an SDK configured without an explicit endpoint exports to Railway:
|
|
84
|
+
|
|
85
|
+
| Variable | Value |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Railway's OTLP receiver on the host running the service |
|
|
88
|
+
| `OTEL_EXPORTER_OTLP_PROTOCOL` | `http/protobuf` |
|
|
89
|
+
| `OTEL_EXPORTER_OTLP_HEADERS` | A header the receiver requires on every export |
|
|
90
|
+
| `OTEL_SERVICE_NAME` | The Railway service name |
|
|
91
|
+
| `OTEL_SERVICE_VERSION` | The commit SHA, or the deployment ID for image and CLI deploys |
|
|
92
|
+
| `OTEL_TRACES_SAMPLER` | `parentbased_traceidratio`, only when the project set its own sample rate |
|
|
93
|
+
| `OTEL_TRACES_SAMPLER_ARG` | The project's sample rate as a fraction, only when the project set its own sample rate |
|
|
94
|
+
|
|
95
|
+
Rules the agent must apply:
|
|
96
|
+
|
|
97
|
+
- **Don't hardcode the endpoint, protocol, or header** in code or Dockerfiles. Let the SDK read the variables.
|
|
98
|
+
- **The receiver accepts traces only.** Most SDKs also export metrics and logs to the same endpoint by default and log errors when that fails. Set both on the service with the `set-variables` MCP tool (`skipDeploys: true`, since the deploy that adds the SDK picks them up); `railway variable set ... --skip-deploys` does the same from a linked repo:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
Set variables for project <project-id>, service <service-id>: OTEL_METRICS_EXPORTER=none, OTEL_LOGS_EXPORTER=none, skipDeploys true
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **User variables win.** A service that sets its own `OTEL_EXPORTER_OTLP_ENDPOINT` or `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` (for example to keep exporting to its own collector) gets none of the tracing variables, and its spans don't reach the Traces tab; edge spans still do. A service that sets either `OTEL_TRACES_SAMPLER` or `OTEL_TRACES_SAMPLER_ARG` keeps both of its own and Railway adds neither. Check `railway variable list --service <service> --json` before assuming the provided values apply.
|
|
105
|
+
- **Load the SDK first.** Instrumentation libraries (`@opentelemetry/auto-instrumentations-node`, `opentelemetry-instrumentation-*` and the like) patch libraries at import time, so the SDK must be loaded before the app's modules: a `--require`/`--import` flag in the start command, `NODE_OPTIONS`, a Python `opentelemetry-instrument` wrapper, a Java `-javaagent`, and so on. Set it with `railway environment edit --service-config <service> deploy.startCommand "<command>"` or as a variable; see [deploy.md](deploy.md).
|
|
106
|
+
- **Keep W3C Trace Context propagation on** (the SDK default in most languages; Go requires setting the propagator explicitly) so the service continues the edge's trace instead of starting its own.
|
|
107
|
+
- **Don't override `OTEL_SERVICE_NAME`** unless the user wants spans attributed under a different name than the Railway service.
|
|
108
|
+
|
|
109
|
+
Per-language install steps, framework notes, and a custom-span example are in the docs: [Node.js](https://docs.railway.com/observability/tracing/nodejs), [Deno](https://docs.railway.com/observability/tracing/deno), [Functions (Bun)](https://docs.railway.com/observability/tracing/functions), [Python](https://docs.railway.com/observability/tracing/python), [Go](https://docs.railway.com/observability/tracing/go), [Java](https://docs.railway.com/observability/tracing/java), [Ruby](https://docs.railway.com/observability/tracing/ruby), [.NET](https://docs.railway.com/observability/tracing/dotnet), [Rust](https://docs.railway.com/observability/tracing/rust), [PHP](https://docs.railway.com/observability/tracing/php). Fetch the page for the user's stack rather than reciting SDK commands from memory.
|
|
110
|
+
|
|
111
|
+
## What to instrument
|
|
112
|
+
|
|
113
|
+
Instrumentation libraries give a trace its skeleton: a server span per request and a client span per call a library recognises. On its own that is barely better than automatic instrumentation. The value comes from spans the app opens itself around the units of work its authors think in. When adding tracing to a codebase, or when asked what to instrument, cover these three layers, in this order:
|
|
114
|
+
|
|
115
|
+
1. **Inbound work.** One span per HTTP handler, gRPC method, queue or job consumer invocation, cron run and WebSocket message. The HTTP and gRPC server instrumentations usually cover handlers. Consumers, cron and background jobs are not covered by the edge or by most instrumentations, so wrap each message or run in its own span (kind `CONSUMER` or `INTERNAL`) and, where the message carries a `traceparent`, continue that context so the trace links back to the producer. Without this, background work is invisible or shows up as orphaned client spans.
|
|
116
|
+
2. **I/O: database queries, cache calls, outgoing HTTP and gRPC calls, queue publishes.** This is where latency and failures hide. Use the driver or client instrumentation where one exists. Where none does (a raw socket client, a vendor SDK the instrumentations don't know), wrap the call in a `CLIENT` span with the standard `db.*`, `server.address` or `url.full` attributes. Every remote call should be visible as its own span.
|
|
117
|
+
3. **Logical units of work.** A function that groups several I/O calls into one meaningful step (`checkout`, `syncUser`, `renderInvoice`), or one that is CPU-heavy on its own (parsing a large payload, image resizing, template rendering, serialising a big response). Give each an `INTERNAL` span carrying the identifiers a person debugging it would want (`order.id`, `tenant`, item counts). This turns twelve sibling `SELECT` spans under a handler into a tree that reads like the code and says which step took the time. Rule of thumb: if you would want log lines saying "starting X" and "finished X in N ms", X is a span.
|
|
118
|
+
|
|
119
|
+
Keep spans out of tight loops and trivial helpers. A span per item in a loop of thousands hits the per-replica export limit (see Sampling) and adds nothing a `count` attribute on the parent wouldn't; instrument the loop, not the iteration. Name spans with low-cardinality names (`GET /users/{id}`, `db.query users`, `process order`) and put the variable parts in attributes. Set span status to `ERROR` and record the exception when a unit fails, so `@status:error` finds it. Never put secrets, tokens or raw personal data in span names or attributes.
|
|
120
|
+
|
|
121
|
+
## Instrument a Function (Bun)
|
|
122
|
+
|
|
123
|
+
A [Railway Function](https://docs.railway.com/functions) is a service whose source image starts with `ghcr.io/railwayapp/function-` (`function-bun:1.4.0` today) and whose code is one TypeScript file, base64-encoded into the start command. `get-service-config` shows the image; `get-function-source-code` returns the code. Automatic instrumentation does not cover Bun, and Bun 1.4 has no OpenTelemetry of its own, so a function exports spans only through the OpenTelemetry JavaScript SDK loaded inside that one file.
|
|
124
|
+
|
|
125
|
+
What differs from a repo service:
|
|
126
|
+
|
|
127
|
+
- **One file, no start command.** There is no `--require`, `--preload` or `bunfig.toml`. Put the SDK setup at the top of the file. It runs before `Bun.serve` takes its first request, which is all that is needed, because nothing gets monkey-patched.
|
|
128
|
+
- **Dependencies come from imports.** The runtime turns every bare import into a `package.json` entry and runs `bun install` at every cold start, without a cache. Pin with `pkg@version` specifiers: `hono@4`, `@hono/otel@1`, `@opentelemetry/api@1`, and `@opentelemetry/sdk-node` to the exact `0.x` version tested, since it has no stable major. Every package added lengthens the cold start.
|
|
129
|
+
- **Nothing is instrumented for free.** `NodeSDK` configures the exporter, the resource and W3C propagation from the `OTEL_*` variables, but no OpenTelemetry package instruments `Bun.serve`, Bun's `fetch`, `Bun.sql` or `Bun.redis` (the Node `http` and `undici` instrumentations don't see them). Incoming requests need `@hono/otel` (Hono) or a hand-written wrapper (`Bun.serve`); outgoing `fetch` calls need `propagation.inject` for the callee to join the trace. The three layers in [What to instrument](#what-to-instrument) still apply; the function's handlers, I/O and logical units are what to wrap.
|
|
130
|
+
- **A code push is a deploy.** The variables land on the next deploy, and `update-function-source-code` or `railway functions push` is one, so a single push adds the SDK and picks up the variables.
|
|
131
|
+
|
|
132
|
+
Recipe:
|
|
133
|
+
|
|
134
|
+
1. Turn tracing on for the function with `set-service-tracing` (or `railway trace enable --service <function>`) if `get-tracing` shows it off. Leave `autoInstrumentationEnabled` off; it does nothing for Bun.
|
|
135
|
+
2. Set the exporter variables with `set-variables`. `NodeSDK` exports metrics and logs over OTLP by default and the receiver rejects both. Pass `skipDeploys: true`; the code push in step 5 is the deploy that picks them up. Check `list-variables` first: a function that sets its own `OTEL_EXPORTER_OTLP_ENDPOINT` gets none of Railway's tracing variables.
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
Set variables for project <project-id>, service <function-id>: OTEL_METRICS_EXPORTER=none, OTEL_LOGS_EXPORTER=none, skipDeploys true
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
3. Read the code with `get-function-source-code`: `code` is what is current, `deployedCode` what runs, `staged` whether a commit is pending. Edit that, never a version recalled from memory.
|
|
142
|
+
4. Add the SDK block at the top and wrap the requests, leaving the rest of the file as it is. A Hono function ends up like this:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
import { NodeSDK } from "@opentelemetry/sdk-node@0.222.0";
|
|
146
|
+
import { trace } from "@opentelemetry/api@1";
|
|
147
|
+
import { Hono } from "hono@4";
|
|
148
|
+
import { httpInstrumentationMiddleware } from "@hono/otel@1";
|
|
149
|
+
|
|
150
|
+
// Reads OTEL_EXPORTER_OTLP_*, OTEL_SERVICE_NAME and OTEL_TRACES_SAMPLER*
|
|
151
|
+
// from the variables Railway provides. Nothing to configure.
|
|
152
|
+
const sdk = new NodeSDK();
|
|
153
|
+
sdk.start();
|
|
154
|
+
process.on("SIGTERM", () => sdk.shutdown().finally(() => process.exit(0)));
|
|
155
|
+
|
|
156
|
+
const tracer = trace.getTracer("greeter");
|
|
157
|
+
|
|
158
|
+
const app = new Hono();
|
|
159
|
+
// One SERVER span per request, continuing the edge's traceparent.
|
|
160
|
+
app.use(httpInstrumentationMiddleware());
|
|
161
|
+
|
|
162
|
+
app.get("/hello/:name", async (c) => {
|
|
163
|
+
const name = c.req.param("name");
|
|
164
|
+
const greeting = await tracer.startActiveSpan("build-greeting", async (span) => {
|
|
165
|
+
try {
|
|
166
|
+
span.setAttribute("greeting.name", name);
|
|
167
|
+
return `Hello, ${name}`;
|
|
168
|
+
} finally {
|
|
169
|
+
span.end();
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
return c.json({ greeting });
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
export default { port: Number(Bun.env.PORT ?? 3000), fetch: app.fetch };
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
For a function that calls `Bun.serve` itself, wrap its `fetch` handler: take the parent from `propagation.extract(context.active(), req.headers, { get: (h, k) => h.get(k) ?? undefined, keys: (h) => [...h.keys()] })` and run the handler inside `tracer.startActiveSpan(name, { kind: SpanKind.SERVER }, parent, ...)`. For an outgoing call, start a `SpanKind.CLIENT` span and `propagation.inject(context.active(), headers, { set: (h, k, v) => h.set(k, v) })` into a `Headers` object before `fetch`. A cron or script function has no server: its spans are new roots (sampled at the project rate through the sampler variables) and it must `await sdk.shutdown()` as its last statement, or the batch never leaves the process. The docs page has all three in full.
|
|
179
|
+
|
|
180
|
+
5. Write it back with `update-function-source-code` (the whole file; pass `staged: true` to stage instead of deploying live) or `railway functions push --path <file>`. This deploy also adds the variables.
|
|
181
|
+
6. Verify with the steps below: `curl -sI https://<domain>/hello/x | grep -i x-railway-trace-id`, then `get-trace` on the ID. A span with `component` `service` and scope `@hono/otel` (or the tracer name) means the function exports. If the deploy logs show `bun install` failing, an import specifier is wrong; if they show OTLP export errors for metrics or logs, step 2 was skipped.
|
|
182
|
+
|
|
183
|
+
Docs: [Functions](https://docs.railway.com/observability/tracing/functions).
|
|
184
|
+
|
|
185
|
+
## Sampling
|
|
186
|
+
|
|
187
|
+
- **Default is every request.** With no project sample rate, the edge traces 100% of client-facing requests and Railway adds neither sampler variable, so the SDK's default parent-based sampler follows the edge's decision and records every root span of its own.
|
|
188
|
+
- **A project rate applies everywhere.** The edge draws once per client-facing request and writes the decision into the `traceparent` sampled flag; requests it didn't sample carry a cleared flag, so the SDK records nothing for them. The two sampler variables make the SDK sample roots the edge never saw (cron jobs, queue consumers, private-network calls without a `traceparent`) at the same rate.
|
|
189
|
+
- **A client `traceparent` overrides the draw.** A request that arrives with the sampled flag set is always traced; one with it cleared never is. Use this to force a single trace while debugging a service with a low rate:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
curl -H "traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" https://<domain>/<path>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Generate a fresh random 32-hex trace ID (the second field) for each request; reusing one merges requests into a single trace.
|
|
196
|
+
|
|
197
|
+
- Lower the rate for busy services. Each replica can export 1,000 spans per 10 seconds; exports over the limit are rejected and the SDK reports a partial success.
|
|
198
|
+
|
|
199
|
+
## Read traces
|
|
200
|
+
|
|
201
|
+
Traces are read through **Remote MCP** (the default agent path), `railway trace list` and `railway trace get` on the CLI, or the dashboard. The `traces`, `trace` and `tracingStatus` queries are on the public GraphQL API as well, so `railway api` can fetch them where neither fits.
|
|
202
|
+
|
|
203
|
+
| Tool | Access | Purpose |
|
|
204
|
+
|---|---|---|
|
|
205
|
+
| `list-traces` | viewer | Traces of an environment, newest first, one row per request with at least one span matching `filter`. Optional `serviceId`, `startDate`/`endDate` (ISO 8601 with timezone; defaults to the last hour), `limit` (default 100, max 500) |
|
|
206
|
+
| `get-trace` | viewer | One trace as an indented span tree, with every span's attributes, events and links in the structured result. Takes `traceId` (32 hex characters); `maxSpans` caps the result and the output says when it was hit |
|
|
207
|
+
|
|
208
|
+
Both take `projectId` and an optional `environmentId`; omit it and the `production` environment is used, so pass the ID explicitly when the user is looking at another environment. Traces belong to the environment they were exported from.
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
List traces for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb in environment <environment-id> with filter "@status:error"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
Get trace 4bf92f3577b34da6a3ce929d0e0e4736 for project 6adb5ae3-0e3a-4ead-b42c-1fd36f217ffb
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`filter` uses the same syntax as logs: `@status:error`, `@component:edge AND @duration:>1000`, `@service:api AND @kind:client`, `@http.route:/checkout AND @http.response.status_code:500`, `@name:SELECT*`. Built-in fields are `trace`, `span`, `name`, `serviceName`, `service`, `deployment`, `replica`, `component` (`edge`, `proxy`, `service`), `kind`, `status`, `duration` (ms); any other `@key` matches a span or resource attribute, free text matches the span name, and `-` negates. Narrow the filter or the window before raising `limit`.
|
|
219
|
+
|
|
220
|
+
On the CLI, `list` scopes to the linked service unless `--all`, `--since`/`--until` take relative (`30m`, `2h`, `1d`) or ISO 8601 times, `--limit` is 1 to 500 (default 100), `--errors` adds `@status:error`, and `get --max-spans` goes up to 2000. Human output is a table and an indented span tree; `--json` prints one trace summary or one span per line, like `railway logs --json`.
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
railway trace list --since 30m --errors --json
|
|
224
|
+
railway trace list --all --filter '@http.route:/api/users @duration:>500'
|
|
225
|
+
railway trace get 4bf92f3577b34da6a3ce929d0e0e4736 --json
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Workflow for "why is this request slow / failing":
|
|
229
|
+
|
|
230
|
+
1. `list-traces` (or `railway trace list`) with a filter that isolates the symptom (`@status:error`, `@duration:>1000`, `@http.route:<route>`), optionally `serviceId` for one service.
|
|
231
|
+
2. `get-trace` (or `railway trace get`) on a returned `traceId`. The tree runs from the edge span down through every service; the `component` on each span says which hop exported it, and a span with `ERROR` status carries the message.
|
|
232
|
+
3. Read the span attributes in the structured result for the detail (`http.route`, `http.response.status_code`, `db.statement`, custom attributes).
|
|
233
|
+
|
|
234
|
+
## Verify tracing works
|
|
235
|
+
|
|
236
|
+
1. **Prove the edge traced a request.** The header is present only on traced responses:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
curl -sI https://<domain>/ | grep -i x-railway-trace-id
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
2. **Fetch that trace** with `get-trace` or `railway trace get <trace-id>` and the returned ID. Edge and proxy spans confirm tracing is on; a span with `component` `service` confirms the app is exporting. After enabling an SDK, that only happens once the redeploy that added the variables is live; after enabling automatic instrumentation, allow about a minute.
|
|
243
|
+
3. **Or watch the dashboard.** The Traces tab is at `https://railway.com/project/<project-id>/traces?environmentId=<environment-id>`; its **Trace ID** field accepts a bare 32-hex ID or a whole `traceparent` header. In **Tracing setup**, each service row shows when the edge and the app last exported a span, and the **App** indicator turns green on the first span from the service itself.
|
|
244
|
+
|
|
245
|
+
## Troubleshoot
|
|
246
|
+
|
|
247
|
+
- **No traces at all**: confirm `get-tracing` or `railway trace status` reports tracing on for the service (its override, then the project default), the service has a public domain, and the account has Tracing in Priority Boarding. With a low rate and little traffic, force one with the `traceparent` curl above, then `get-trace` it.
|
|
248
|
+
- **Edge spans only, nothing from the app** (`get-trace` shows only `edge` and `proxy` components): the variables land on the next deploy, so redeploy. Then check the service doesn't set its own `OTEL_EXPORTER_OTLP_ENDPOINT`, the SDK loads before the app serves, and, for OBI, the process is a supported runtime handling HTTP or gRPC.
|
|
249
|
+
- **App spans appear as separate traces** (`list-traces` shows service-rooted traces with `hasEdge` false next to edge-only ones): the SDK isn't reading `traceparent`. Enable the W3C Trace Context propagator and make sure nothing in front of the handlers strips the header.
|
|
250
|
+
- **SDK logs metrics or logs export errors**: set `OTEL_METRICS_EXPORTER=none` and `OTEL_LOGS_EXPORTER=none`.
|
|
251
|
+
- **Duplicate spans per request**: the service runs an SDK with automatic instrumentation on. Switch it off with `set-service-tracing` (`autoInstrumentationEnabled` false), or on the CLI `railway trace disable --auto-instrument` then `railway trace enable`.
|
|
252
|
+
- **Spans missing from a busy service**: over 1,000 spans per replica per 10 seconds. Disable noisy instrumentations or lower the sample rate.
|
|
253
|
+
- **A Function shows edge spans only**: automatic instrumentation can't help (Bun); the SDK has to be in the file. Check `get-function-source-code` for the `NodeSDK` block and the request wrapper, that the deploy logs show `bun install` succeeding, and that `OTEL_METRICS_EXPORTER`/`OTEL_LOGS_EXPORTER` are `none`. See [Instrument a Function (Bun)](#instrument-a-function-bun).
|
|
254
|
+
- **Setting the sample rate fails validation**: `set-project-tracing`, `railway trace enable --project-default --sample-rate` and the API take a fraction 0..1, not a percentage.
|
|
255
|
+
|
|
256
|
+
## Validated against
|
|
257
|
+
|
|
258
|
+
- Docs: [tracing.md](https://docs.railway.com/observability/tracing), [automatic-instrumentation.md](https://docs.railway.com/observability/tracing/automatic-instrumentation), [nodejs.md](https://docs.railway.com/observability/tracing/nodejs), [tracing/functions.md](https://docs.railway.com/observability/tracing/functions), [functions.md](https://docs.railway.com/functions), [variables/reference.md](https://docs.railway.com/variables/reference)
|
|
259
|
+
- Platform source (railwayapp/mono): `common/javascript/models/src/tracingVariables.ts` (provided variables and precedence), `common/javascript/models/src/functions.ts` and `services.ts` (function start command, image prefix), `packages/backboard/src/graphql/v2/schema/schema.graphql` (`Project.tracingEnabled`, `Project.tracingSampleRate`, `Service.tracingEnabled`, `Service.autoInstrumentationEnabled`, `ProjectUpdateInput`, `ServiceUpdateInput`), `packages/hikari/src/settings/tunables.rs` (default sample rate), `packages/stacker-oteld/configs/main.go` (span limit), `packages/backboard/src/handlers/http/routes/mcp/tools/listTraces.ts`, `getTrace.ts`, `getTracing.ts`, `setServiceTracing.ts`, `setProjectTracing.ts`, `tracingMcpHelpers.ts`, `getFunctionSourceCode.ts` and `updateFunctionSourceCode.ts` (MCP tools)
|
|
260
|
+
- Function runtime (railwayapp/code-images): `bun/Dockerfile` (Bun 1.4.0), `bun/run.sh` (import scan, `bun install` per start, `bun run --smol index.tsx`)
|
|
261
|
+
- Function examples run on Bun 1.4.0 with `@opentelemetry/sdk-node` 0.222.0 and `@hono/otel` 1.1.2 against a stub OTLP receiver: server span continues the incoming `traceparent`, client span propagates it, script flushes on `sdk.shutdown()`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Usage and spending limits
|
|
2
|
+
|
|
3
|
+
Use `railway usage` (CLI 5.25+) to explain billed resource usage and project/service costs. CLI 5.26+ adds explicit workspace versus Railway Agent spending-limit targets. For live CPU, memory, network, or latency measurements, use [operate.md](operate.md).
|
|
4
|
+
|
|
5
|
+
## Read usage
|
|
6
|
+
|
|
7
|
+
Resolve the workspace from the user's request or `railway whoami --json`. These commands are workspace-scoped, not scoped by the current service or environment:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
railway usage --workspace <workspace> --json
|
|
11
|
+
railway usage --workspace <workspace> --period previous --json
|
|
12
|
+
railway usage --workspace <workspace> --period 2026-08 --json
|
|
13
|
+
railway usage projects --workspace <workspace> --json
|
|
14
|
+
railway usage projects --workspace <workspace> --limit 10 --json
|
|
15
|
+
railway usage projects --workspace <workspace> --project <project> --period current --json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`--period` accepts `current`, `previous`, or `YYYY-MM` and applies only to summaries and project breakdowns. Report the returned billing-period dates with cost comparisons. `projects --project` returns a service breakdown and cannot be combined with `--limit`. Human output defaults to the top 25 projects; JSON returns all unless limited. Deleted resources can still contribute to the period's costs.
|
|
19
|
+
|
|
20
|
+
Distinguish current usage from an estimated end-of-period bill. Estimates can be unavailable and are not final invoices. Use the returned cost fields rather than recomputing them from hardcoded prices; do not treat missing values as zero.
|
|
21
|
+
|
|
22
|
+
## Inspect and change limits
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
railway usage limit status --workspace <workspace> --target workspace --json
|
|
26
|
+
railway usage limit status --workspace <workspace> --target agent --json
|
|
27
|
+
railway usage limit set --workspace <workspace> --target workspace --soft 75 --hard 125 --json
|
|
28
|
+
railway usage limit set --workspace <workspace> --target agent --soft 7.50 --hard 20 --json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Read the target's existing limits before changing them. `set` requires `--target`; `status` without a target reports both. `workspace` controls resource/compute usage; `agent` controls Railway Agent usage. Do not infer that the agent target caps cloud VM compute costs or another coding harness's provider bill.
|
|
32
|
+
|
|
33
|
+
Soft limits are email alerts; hard limits enforce a spending cap and can interrupt the corresponding service. Set only the target and amounts the user requested. Inputs are dollars: workspace limits require whole dollars; agent limits accept cents. Omitted fields preserve existing values, but setting an agent soft limit without any existing hard limit requires supplying a hard limit too. Follow CLI validation for supported ranges.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
railway usage limit update --workspace <workspace> --soft 75 --json
|
|
37
|
+
railway usage limit remove --workspace <workspace> --yes --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`update` and `remove` are workspace compute-limit operations, not generic agent-target operations. Removing limits removes the spending protection; `--yes` skips confirmation and belongs only on an authorized removal. `--period` is invalid on all limit commands. After any mutation, reread `limit status` for the same workspace and target and report the resulting limits.
|
|
41
|
+
|
|
42
|
+
## Troubleshoot
|
|
43
|
+
|
|
44
|
+
- **Wrong totals**: check the workspace, returned billing-period boundaries, selected project, and whether deleted resources contributed.
|
|
45
|
+
- **Missing estimate**: report actual usage and the unavailable estimate separately.
|
|
46
|
+
- **Limit command rejected**: check target, dollar precision, required hard limit, and CLI version; do not retry with a different spending target.
|
|
47
|
+
- **Permission denied**: verify billing access to the workspace; project access alone does not establish permission to change spending limits.
|
|
48
|
+
|
|
49
|
+
## Validated against
|
|
50
|
+
|
|
51
|
+
- Docs: [Usage CLI](https://docs.railway.com/cli/usage)
|
|
52
|
+
- CLI source (v5.49.1): [usage.rs](https://github.com/railwayapp/cli/blob/v5.49.1/src/commands/usage.rs)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: validate-my-idea
|
|
3
|
+
description: "test whether people want an offer before building the full product. Use when the builder says something like: validate my idea; test demand; start a waitlist; test my offer."
|
|
4
|
+
metadata:
|
|
5
|
+
vybekiit-generated: buyer-skill-stub
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- vybekiit:generated:buyer-skill-stub -->
|
|
9
|
+
|
|
10
|
+
# Skill: validate-my-idea
|
|
11
|
+
|
|
12
|
+
**Goal:** test whether people want an offer before building the full product.
|
|
13
|
+
|
|
14
|
+
**Contract:** one action at a time · verify-before-advance · plain language (`language.md`) ·
|
|
15
|
+
translate every error · celebrate. Never claim certainty from a small number of visits.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. **Choose one promise.** Ask what the customer gets and why it matters, then write one short
|
|
20
|
+
sentence for the offer page.
|
|
21
|
+
**Verify:** the builder approves that sentence.
|
|
22
|
+
|
|
23
|
+
2. **Choose one success signal.** Recommend either waitlist signups or practice pre-orders as the
|
|
24
|
+
main signal. Practice pre-orders never charge anyone.
|
|
25
|
+
**Verify:** one main signal is written in `checklist.md`.
|
|
26
|
+
|
|
27
|
+
3. **Open the experiment.** Start the app and open `/validate`. Keep the two message versions
|
|
28
|
+
focused on the same offer so the comparison stays fair.
|
|
29
|
+
**Verify:** both message versions load and the form works.
|
|
30
|
+
|
|
31
|
+
4. **Test the whole path.** Visit the page, join the waitlist with permission, and press the
|
|
32
|
+
practice pre-order button once.
|
|
33
|
+
**Verify:** `/validate/summary` shows one visit, one signup, and one practice pre-order.
|
|
34
|
+
|
|
35
|
+
5. **Share one link.** Add the campaign name to the link, then share it with one real audience.
|
|
36
|
+
Do not buy ads during this first test.
|
|
37
|
+
**Verify:** new visits appear under the expected campaign.
|
|
38
|
+
|
|
39
|
+
6. **Read the direction honestly.** Use the summary to choose one next test. If it says to keep
|
|
40
|
+
collecting visits, do that before changing the offer.
|
|
41
|
+
**Verify:** the builder records one next action without calling the message a proven winner.
|
|
42
|
+
|
|
43
|
+
## Definition of done
|
|
44
|
+
|
|
45
|
+
The offer page is shared, permission is saved with every signup, the practice pre-order charges
|
|
46
|
+
nothing, and the summary names one honest next action.
|
|
47
|
+
|
|
48
|
+
## After completing this skill
|
|
49
|
+
|
|
50
|
+
Update `checklist.md` Progress, then append one Decision log entry using
|
|
51
|
+
`formatChecklistEntry({ from, to, because })`.
|
|
52
|
+
|
|
53
|
+
If the first check fails once, run `vybekiit doc-fallback cloudflare` and tell the builder only:
|
|
54
|
+
*"I'm double-checking the official setup guide for this. Hang tight, I'll have the next step in a moment."*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: feedback
|
|
2
|
+
name: vybekiit-feedback
|
|
3
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
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
@@ -7,7 +7,7 @@ metadata:
|
|
|
7
7
|
|
|
8
8
|
<!-- vybekiit:generated:buyer-skill-stub -->
|
|
9
9
|
|
|
10
|
-
# Skill: feedback
|
|
10
|
+
# Skill: vybekiit-feedback
|
|
11
11
|
|
|
12
12
|
**Goal:** send a private note about VybeKiit so the team can improve the kit.
|
|
13
13
|
|
|
@@ -26,7 +26,7 @@ Include only:
|
|
|
26
26
|
- agent name/version, kit version, and operating system name
|
|
27
27
|
|
|
28
28
|
Exclude source code, command output, transcripts, stack traces, email, secrets, tokens, absolute paths,
|
|
29
|
-
machine names, and private issue links.
|
|
29
|
+
machine names, and private issue links. Automatic sending requires the saved opt-in.
|
|
30
30
|
|
|
31
31
|
## Steps
|
|
32
32
|
|
|
@@ -34,17 +34,20 @@ machine names, and private issue links. Never send automatically.
|
|
|
34
34
|
`.vybekiit/feedback-drafts/<timestamp>.json`. Create the folder if needed.
|
|
35
35
|
**Verify:** read the draft back and check that every field is allowed and bounded.
|
|
36
36
|
|
|
37
|
-
2. **
|
|
38
|
-
|
|
39
|
-
**Verify:** the
|
|
37
|
+
2. **Check the builder's choice.** Run `vybekiit feedback status` and read `automatic` and
|
|
38
|
+
`signedIn`. Report only kit defects, missing reusable capabilities, or confusing kit guidance.
|
|
39
|
+
**Verify:** the draft concerns the kit and the saved preference was checked.
|
|
40
40
|
|
|
41
|
-
3. **
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
3. **Check authorization.** An explicit request to send this report authorizes it. For a kit
|
|
42
|
+
problem discovered by the agent, saved automatic consent authorizes a sanitized report.
|
|
43
|
+
Otherwise show the safe preview and ask once whether to send it. Never enable automatic
|
|
44
|
+
feedback on the builder's behalf or infer consent from silence.
|
|
45
|
+
**Verify:** this report has explicit authorization or the saved automatic preference is on.
|
|
44
46
|
|
|
45
|
-
4. **Send
|
|
47
|
+
4. **Send when authorized.** For an explicit request or approval, run:
|
|
46
48
|
`vybekiit feedback submit .vybekiit/feedback-drafts/<timestamp>.json --confirm`
|
|
47
|
-
|
|
49
|
+
For an automatic report use `--automatic` instead of `--confirm`.
|
|
50
|
+
Automatic reports never open a sign-in window. Keep the draft if sign-in is needed.
|
|
48
51
|
**Verify:** the command returns `{"ok":true,"reference":"FB-..."}`.
|
|
49
52
|
|
|
50
53
|
5. **Record progress.** Add the safe reference to the Decision log and mark feedback sent in the
|
|
@@ -56,8 +59,9 @@ machine names, and private issue links. Never send automatically.
|
|
|
56
59
|
Say: *"Your note was not sent, but the safe draft is still saved. I can try again when you are
|
|
57
60
|
ready."* Keep the draft. Do not fall back to `gh issue create`, `curl`, email, or another network
|
|
58
61
|
service.
|
|
62
|
+
The builder can turn automatic reports off with `vybekiit feedback consent off`.
|
|
59
63
|
|
|
60
64
|
## Definition of done
|
|
61
65
|
|
|
62
|
-
The
|
|
66
|
+
The report was authorized, the command returned a feedback reference, and
|
|
63
67
|
`checklist.md` records only that reference.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: watch-my-app
|
|
3
|
+
description: "the builder knows whether their online app is healthy and gets a safe repair note when it is not. Use when the builder says something like: watch my app; check if my app is working; tell me when my app is down."
|
|
4
|
+
metadata:
|
|
5
|
+
vybekiit-generated: buyer-skill-stub
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- vybekiit:generated:buyer-skill-stub -->
|
|
9
|
+
|
|
10
|
+
# Skill: watch-my-app
|
|
11
|
+
|
|
12
|
+
**Goal:** the builder knows whether their online app is healthy and gets a safe repair note when it is not.
|
|
13
|
+
|
|
14
|
+
**Contract:** one action at a time · verify-before-advance · plain language (`language.md`) ·
|
|
15
|
+
translate every error · celebrate. Never copy private links, sign-in details, or personal information
|
|
16
|
+
into an incident note.
|
|
17
|
+
|
|
18
|
+
## Steps
|
|
19
|
+
|
|
20
|
+
1. **Explain the check.** Say: *"I’ll check your online app and tell you clearly if it needs attention."*
|
|
21
|
+
|
|
22
|
+
2. **Find the public address.** Use the app address already saved for this project. If none is saved,
|
|
23
|
+
ask the builder for the public home page address only.
|
|
24
|
+
**Verify:** open the address once and confirm it belongs to this app.
|
|
25
|
+
|
|
26
|
+
3. **Run the guardian.** Run `vybekiit guardian check --target=app=<public-address> --json`.
|
|
27
|
+
**Verify:** the command finishes without asking a question and reports healthy, slow, or down.
|
|
28
|
+
|
|
29
|
+
4. **Translate the finding.** If healthy, tell the builder: *"Your app is responding normally."*
|
|
30
|
+
If slow or down, explain what happened in one sentence and use the returned repair note as the
|
|
31
|
+
agent’s next task. Do not show private link details.
|
|
32
|
+
**Verify:** repeated checks of the same issue keep one incident reference.
|
|
33
|
+
|
|
34
|
+
5. **Prove the repair.** After a repair is online, run the exact same guardian check again.
|
|
35
|
+
**Verify:** the public address reports healthy before saying it is fixed.
|
|
36
|
+
|
|
37
|
+
6. **Celebrate.** 🎉 Say: *"Your app check is healthy, and the guardian remembers what it checked."*
|
|
38
|
+
|
|
39
|
+
## If anything breaks
|
|
40
|
+
|
|
41
|
+
If the address is wrong, ask for the public home page address again. If the guardian itself fails once,
|
|
42
|
+
run `vybekiit doc-fallback cloudflare` and tell the builder only: *"I’m double-checking the official
|
|
43
|
+
setup guide for this. I’ll have the next step in a moment."*
|
|
44
|
+
|
|
45
|
+
## Definition of done
|
|
46
|
+
|
|
47
|
+
The guardian checked the public app, any incident note contains no private link details, repeated issues
|
|
48
|
+
share one reference, and a repaired app passed the same online check.
|
|
49
|
+
|
|
50
|
+
## After completing this skill
|
|
51
|
+
|
|
52
|
+
Append one entry to `checklist.md` Decision log using `formatChecklistEntry({ from, to, because })`.
|
|
53
|
+
Update the Progress section with what was checked and what should happen next.
|