
Telemetry Management
FreeStreamline your telemetry event tracking and validation.
Free · Opens the source repo
What Telemetry Management does
The Telemetry Management skill provides a structured approach to managing telemetry events within the n8n ecosystem. It utilizes the @n8n/telemetry event registry, which organizes telemetry events by product domain and ensures that each event is well-defined with a description and a schema for its properties. This skill is particularly useful for developers and designers who need to implement or review telemetry tracking in both frontend and backend code, ensuring consistency and clarity in how events are logged and analyzed.
With this skill, users can easily access a catalog of registered telemetry events using simple commands. This catalog can be displayed in a human-readable format or as structured JSON for programmatic access. By leveraging the track() function, users can emit telemetry events with confidence, knowing that they are using validated entries from the registry. This not only simplifies the process of tracking events but also enhances type safety and reduces the likelihood of errors due to typos or incorrect property types.
The skill also provides guidelines for adding new events to the registry, emphasizing the importance of avoiding duplicates and maintaining a clear naming convention. This structured approach helps teams collaborate effectively and ensures that telemetry data remains consistent over time. Additionally, the skill outlines best practices for testing telemetry events, promoting a robust development workflow that minimizes the risk of issues in production.
Overall, the Telemetry Management skill is essential for teams looking to implement telemetry in their applications, providing the tools and guidelines necessary to do so effectively and reliably.
When to use it
Use this skill when implementing or reviewing telemetry tracking in n8n applications, ensuring structured and validated event logging.
When not to use it
This skill is not suitable for applications that do not utilize the n8n framework or for teams not focused on telemetry management.
What you can build with it
Implementing New Telemetry Events
When adding new telemetry events, use the catalog to ensure you're not duplicating existing events and follow the naming conventions.
Validating Event Properties
Use the `track()` function to validate event payloads against the defined schema, ensuring data integrity in your analytics.
Collaborating on Telemetry Changes
When making changes to telemetry events, communicate with the data team to coordinate any necessary updates or deprecations.
How to install Telemetry Management
View source1. Install with the skills CLI
npx skills add n8n-io/n8n/telemetry --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by n8n-ioTelemetry
The registry
Events migrated to the registry live in packages/@n8n/telemetry as one entry per event — its exact emitted name, a description, and a zod schema typing its properties — organized per product domain in src/events/ and composed into TELEMETRY_EVENT.<DOMAIN>.<EVENT>. The package defines registered events and never depends on transport SDKs.
To find which events are registered, what they mean, or what properties they carry, run the catalog first:
pnpm --filter @n8n/telemetry catalog # human-readable, grouped by domain
pnpm --filter @n8n/telemetry catalog --json # structured, for programmatic use
The registry is being adopted incrementally. Events not yet registered do not appear in the catalog, so search track() call sites when the catalog has no match.
Pass the entry itself to track() — it resolves the emitted name internally:
import { TELEMETRY_EVENT } from '@n8n/telemetry';
telemetry.track(TELEMETRY_EVENT.PLATFORM.USER_IS_PART_OF_EXPERIMENT, {
name: experimentName,
variant,
});
Both track() implementations accept registry entries and plain strings. Plain strings remain supported for events that have not yet migrated:
- Frontend:
packages/frontend/editor-ui/src/app/plugins/telemetry/index.ts - Backend:
packages/cli/src/telemetry/index.ts
Entries get property autocomplete and compile-time checks — typo'd, missing, or wrongly typed properties fail typecheck. When the telemetry transport is initialized, track() additionally validates registered-event payloads via getEventValidationError (shared from @n8n/telemetry) and logs a warning on mismatch, including unrecognized properties that slipped past structural typing. A validation warning does not stop the event from being emitted.
Adding an event
- Check the catalog first (
pnpm --filter @n8n/telemetry catalog). If an existing event covers the same user action from another surface, augment it with a property instead of adding a near-duplicate event. - Pick the domain by the event's subject — what the event is about, never the surface that triggered it.
User opened Credential modalis CREDENTIALS whether opened from the NDV, template setup, or chat. The trigger context goes into asourceproperty. - Name it with the house grammar: sentence case, actor first, past-tense verb, specific object (
User pinned node data). No template interpolation in names — variability goes into properties. The name must snake_case cleanly into a BigQuery table name: no punctuation beyond spaces, no casing that collides after snake_casing. - Write the entry
descriptionstating what the event means and when it fires — a registry test rejects blank descriptions. Document individual properties with.describe()where the key alone is not obvious. - Type the properties with zod (
import { z } from 'zod/v4'):snake_casekeys, explicit.optional()where a call site may omit a value,z.looseObject()/.catchall()for genuinely dynamic remainders. Schemas must stay JSON-Schema-representable — no transforms, refinements, orz.date()(a registry test enforces this viaz.toJSONSchema()). - Place the emission: frontend via
useTelemetry().track(...); backend either through aRelayEventMaphandler inpackages/cli/src/events/relays/telemetry.event-relay.ts(event-bus-driven) or a directTelemetry.track(...)call — both reference the same registry entry.
Hard rules
- Never rename an emitted event. BigQuery materializes one table per event name; a rename orphans downstream history. A rename is delete + create, names are never reused, and removals must be coordinated with the data team before deleting the registry entry.
- Never duplicate an event name — one entry per event across all domains, referenced by every call site (even FE + BE). CI fails on collision.
- Properties evolve additively only. Changing a property's type forks warehouse columns even under a stable name. Mark deprecations on the schema (
.meta({ deprecated: true })) instead of removing. - Breaking changes need a data-team heads-up in Slack plus a Notion note before they ship.
Testing
Do not retype event-name literals in tests:
- In call-site tests, mock
useTelemetry().trackor the backendTelemetry.trackservice and expect the registry entry itself with the payload. - In frontend transport tests, expect
window.rudderanalytics.trackto receiveentry.nameand the augmented payload. - In backend transport tests, expect the RudderStack payload's
eventfield to equalentry.nameand itspropertiesto include the event payload.
Related
Experiment exposure and metric events follow n8n:experiments (.agents/skills/experiments/SKILL.md).
Frequently asked questions about Telemetry Management
Similar skills
WinMD API Search
Easily find and explore Windows desktop APIs.
WebMCPify
Transform any web app into an agent-ready platform.
Phoenix Tracing
Instrument LLM applications with OpenInference tracing.
Foundry Hosted Agent CopilotKit
Guidance for developing agentic web apps on Azure.
Power Automate Foundation
Connect AI agents to Power Automate seamlessly.
Power Automate Flow Builder
Efficiently build and deploy Power Automate flows programmatically.
