
launchdarkly-metric-instrument
Instrument a LaunchDarkly metric event in a codebase by adding a track() call. Use when the user wants to wire up an event, instrument an action for a metric, add tracking to a feature, or confirm that an event is flowing to LaunchDarkly.
- Installs
- 3.2K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/launchdarkly/ai-tooling --skill launchdarkly-metric-instrument- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads launchdarkly-metric-instrument automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
LaunchDarkly Metric Instrument
You're using a skill that will guide you through adding a track() call to a codebase so a LaunchDarkly metric can measure it. Your job is to detect the SDK in use, find the right place in code to add the call, write it correctly, and verify that events are reaching LaunchDarkly.
Prerequisites
This skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.
Required MCP tools:
list-metric-events— verify events are flowing after instrumentation
Optional MCP tools (enhance workflow):
get-project— retrieve the SDK key for the right environment when SDK initialization is needed
Workflow
Step 1: Detect the SDK
Before writing any code, understand the LaunchDarkly setup already in this codebase.
-
Search for existing
track()calls. This is the fastest signal:- Look for
ldClient.track(,.track(,ld.track( - If any exist, they tell you the SDK type, call signature, and context pattern in one shot — mirror those exactly.
- Look for
-
Search for SDK imports and initialization if no
track()calls exist:- Check
package.json,requirements.txt,go.mod,Gemfile,*.csprojfor an LD SDK dependency - Look for
LDClient,ldclient,launchdarkly-server-sdk,launchdarkly-node-server-sdk,launchdarkly-react-client-sdk, etc. - Find the initialization block to understand how the client is accessed across the codebase
- Check
-
Determine client-side or server-side. This is the most critical distinction — it determines the
track()signature:SDK type track()signatureNotes Server-side (Node, Python, Go, Java, Ruby, .NET) ldClient.track(eventKey, context, data?, metricValue?)Context required per call Client-side (React, browser JS) ldClient.track(eventKey, data?, metricValue?)Context set at init, not per call See SDK Track Patterns for full examples by language.
Step 2: Install & Initialize (if SDK not present)
Skip this step if the SDK is already in the codebase.
-
Detect the package manager from lockfiles:
package-lock.json/yarn.lock/pnpm-lock.yaml→ npm/yarn/pnpm;Pipfile.lock/poetry.lock→ pip/poetry;go.sum→ go modules;Gemfile.lock→ bundler. -
Install the appropriate SDK using the detected package manager. See SDK Track Patterns for the right package name per language.
-
Get the SDK key using
get-project— fetch the project and choose the key for the environment the user wants to instrument (typicallyproductionorstagingfor initial testing). -
Add SDK initialization following the patterns already in this codebase. If there's a central config or service layer, add the LD client there. See SDK Track Patterns for initialization examples.
Step 3: Find the Right Placement
Locate where in the code the user action or event occurs.
-
Ask if you're not sure where the action happens. Don't guess at placement — a
track()call in the wrong location (e.g. a render method instead of a submit handler) produces misleading data. -
Look for signals of the right location:
- Form submissions, button click handlers, API route completions, mutation hooks
- Existing analytics calls (
segment.track(),mixpanel.track(),gtag()) — these are often co-located with where LD track calls should go - Comments like
// TODO: track this
-
Show the candidate location to the user before writing anything:
I'll add the track() call here, in the checkout submit handler (src/checkout/CheckoutForm.tsx, line 47). Does that look right? -
Proceed once confirmed (or if you're confident enough from codebase signals).
Step 4: Write the track() Call
Write the call following the patterns found in Step 1.
Server-side SDKs — context is required:
ldClient.track('checkout-completed', context);
Client-side SDKs — context is implicit:
ldClient.track('checkout-completed');
For value metrics — include metricValue with the numeric measurement:
// Server-side: latency metric (ms)
ldClient.track('api-response-time', context, null, responseTimeMs);
// Client-side: revenue metric
ldClient.track('purchase-completed', { orderId }, purchaseAmountUSD);
Key rules:
- Match the existing context. Don't construct a new context inline. Find where the codebase already builds its context/user object (used for
variation()calls) and use the same one. This is how LD correlates the event to the right experiment participant. metricValueonly forvaluemetrics. Forcountandoccurrencemetrics, omitmetricValueentirely.- Respect wrapper patterns. If the codebase wraps LD calls behind a utility (
featureFlags.track(),analytics.ldTrack()), add the new call through that wrapper — not by callingldClientdirectly. - Match the event key exactly.
track()event keys are case-sensitive. Use the exact string that the metric was created with.
See SDK Track Patterns for full per-language examples.
Step 5: Verify
Guide the user to trigger the action in their local or staging environment. Then use list-metric-events to confirm the event key appears:
list-metric-events(projectKey, environmentKey)
If the event key appears: confirm success and show a summary.
If the event key is absent after triggering, work through this checklist:
| Problem | Check |
|---|---|
| Wrong event key casing | Does the track() call match the metric's event key exactly? |
| SDK not initialized | Is ldClient initialized before the track() call runs? |
| Server-side: wrong context | Is the context passed to track() the same context used for variation() calls? |
| Client-side: no flag evaluation first | Has the SDK initialized and identified the user before track() is called? |
| Wrong environment | Is list-metric-events querying the same environment where the action was triggered? |
| Data delay | list-metric-events shows the last 90 days with up to ~5 min delay — try again in a moment |
Surface a summary once verified:
✓ Event flowing: checkout-completed
Seen in: production
Next: this event is now ready to back a metric. Use the metric-create skill to set one up,
or attach an existing metric to your experiment.
Important Context
track()calls only count in experiments when a flag is evaluated first. The event is correlated to an experiment participant because LD saw avariation()call from that context. If the user triggers the action without evaluating any flag, the event may still be ingested but won't appear in experiment results.- Client-side SDKs flush events on an interval (default ~30 seconds) or on page unload. In tests, you may need to call
ldClient.flush()explicitly to see events appear immediately. - Server-side SDKs also buffer events. Calling
ldClient.flush()aftertrack()in development ensures the event is sent before the process exits or the test ends. metricValueunits must match the metric definition. If the metric was created with unitms, pass milliseconds. Passing seconds into a milliseconds metric will produce silently wrong results.- The
dataparameter is for custom metadata, not the metric value. Pass extra context (order ID, category, etc.) indata. Pass the numeric measurement inmetricValue.
References
- SDK Track Patterns —
track()call syntax, initialization, and package names for every supported SDK
FAQ
What does the launchdarkly-metric-instrument skill do?
Instrument a LaunchDarkly metric event in a codebase by adding a track() call. Use when the user wants to wire up an event, instrument an action for a metric, add tracking to a feature, or confirm that an event is flowing to LaunchDarkly.
How do I install launchdarkly-metric-instrument?
Run npx skills add https://github.com/launchdarkly/ai-tooling --skill launchdarkly-metric-instrument in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/launchdarkly-metric-instrument/ (personal) or .claude/skills/launchdarkly-metric-instrument/ (project).
Which AI agents can use launchdarkly-metric-instrument?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is launchdarkly-metric-instrument safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains launchdarkly-metric-instrument?
It is published by launchdarkly in launchdarkly/ai-tooling, and it is an official skill from the maker of the technology it covers. It has 3,239 recorded installs.
More from launchdarkly/ai-tooling
onboarding
launchdarkly/ai-tooling
Scripted onboarding for LaunchDarkly: quiet execution, fixed sequence, SDK install, first flag with a live reveal, MCP offered afterwards. Enforces step completion before advancing and redirects drift. Use when adding LaunchDarkly, setting up or integrating feature flags in a project, SDK integration, or 'onboard me'.
launchdarkly-flag-discovery
launchdarkly/ai-tooling
Audit your LaunchDarkly feature flags to understand the landscape, find stale or launched flags, and assess removal readiness. Use when the user asks about flag debt, stale flags, cleanup candidates, flag health, or wants to understand their flag inventory.
launchdarkly-flag-create
launchdarkly/ai-tooling
Create and configure LaunchDarkly feature flags in a way that fits the existing codebase. Use when the user wants to create a new flag, wrap code in a flag, add a feature toggle, or set up an experiment. Guides exploration of existing patterns before creating.
launchdarkly-flag-targeting
launchdarkly/ai-tooling
Control LaunchDarkly feature flag targeting including toggling flags on/off, percentage rollouts, targeting rules, individual targets, and copying flag configurations between environments. Use when the user wants to change who sees a flag, roll out to a percentage, add targeting rules, or promote config between environments.
launchdarkly-flag-cleanup
launchdarkly/ai-tooling
Safely remove a feature flag from code while preserving production behavior. Use when the user wants to remove a flag from code, delete flag references, or create a PR that hardcodes the winning variation after a rollout is complete.
launchdarkly-metric-choose
launchdarkly/ai-tooling
Choose the right metrics for a LaunchDarkly experiment, guarded rollout, or release policy. Use when the user wants to know which metrics to use, which is the primary metric for an experiment, what guardrails to add, or which events to monitor in a rollout. Surfaces what will auto-attach from existing release policies before making additional recommendations.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.