arize-instrumentation
Skill2 starsChanged 5 months agoApache-2.0View on GitHub
Adds Arize AX tracing to an LLM application for the first time. Follows a two-phase agent-assisted flow to analyze the codebase then implement instrumentation after user confirmation. Use when the user wants to instrument their app, add tracing from scratch, set up LLM observability, integrate OpenTelemetry or openinference, or get started with Arize tracing.
- Reads credentials
- Installs packages
2 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- github/awesome-copilotedited, first seen Oct 25, 2026
- Arize-ai/arize-skillstheir own version, first seen Oct 7, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- github/awesome-copilot★ 41k49% same
Wrote their own version · 1
- Arize-ai/arize-skills★ 73same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository168 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .cursor/rules/CO-STAR-UI-CREATOR/AGENT.mdcCursor rule
- .cursor/rules/CO-STAR-UI-CREATOR/CO-STAR-CREATOR.mdCursor rule
- .cursor/rules/CO-STAR-UI-CREATOR/CO-STAR-PROMPT.mdCursor rule
- .cursor/rules/CO-STAR-UI-CREATOR/README.mdCursor rule
- .cursor/rules/CO-STAR-UI-CREATOR/ui.mdCursor rule
- 401-403-bypass-techniquesSkill
- active-directory-acl-abuseSkill
- active-directory-certificate-servicesSkill
- active-directory-kerberos-attacksSkill
- agent-browserSkill
- ai-ml-securitySkill
- ai-seoSkill
- android-pentesting-tricksSkill
- anti-debugging-techniquesSkill
- api-auth-and-jwt-abuseSkill
- api-authorization-and-bolaSkill
- api-recon-and-docsSkill
- api-secSkill
- arbitrary-write-to-rceSkill
- arize-adminSkill
- arize-ai-provider-integrationSkill
- arize-annotationSkill
- arize-compliance-auditSkill
- arize-datasetSkill
- arize-evaluatorSkill
- arize-experimentSkill
- arize-linkSkill
- arize-prompt-optimizationSkill
- arize-promptsSkill
- arize-traceSkill
- authbypass-authentication-flawsSkill
- auth-secSkill
- binary-protection-bypassSkill
- browser-exploitation-v8Skill
- building-nango-functions-locallySkill
- building-nango-functions-remotelySkill
- building-nango-functionsSkill
- business-logic-vulnerabilitiesSkill
- business-logic-vulnSkill
- classical-cipher-analysisSkill
- clickjackingSkill
- cmdi-command-injectionSkill
- code-obfuscation-deobfuscationSkill
- compliance-checkSkill
- compliance-trackingSkill
- container-escape-techniquesSkill
- core-engineeringSkill
- cors-cross-origin-misconfigurationSkill
- crlf-injectionSkill
- csp-bypass-advancedSkill
- csrf-cross-site-request-forgerySkill
- csv-formula-injectionSkill
- d3-visualizationSkill
- dangling-markup-injectionSkill
- defi-attack-patternsSkill
- dependency-confusionSkill
- deserialization-insecureSkill
- dns-rebinding-attacksSkill
- documentation-writerSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. About 0 are common, 15 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈15
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Use this skill when the user wants to add Arize AX tracing to their application.
- Distinctive: line 16
If the user asks you to "set up tracing" or "instrument my app with Arize", you can start with:
- Very specific: line 40
Do NOT proactively check ax installation or version.
- Distinctive: line 41
Never silently replace a user-provided space ID, project name, or project ID.
- Distinctive: line 45
If monorepo scope, service entrypoint, or target app is still unclear after quick inspection — or you would otherwise open with a bare list …
- Distinctive: line 49
Ask minimal numbered or short bullet questions — only what blocks Phase 1 or Phase 2.
- Distinctive: line 89
If monorepo: which service(s) you propose to instrument
- Distinctive: line 92
If the user explicitly asked you to instrument the app now, and the target service is already clear, present the Phase 1 summary briefly …
- Distinctive: line 96
Use the Agent Setup Prompt routing table to map detected signals to integration docs and fetch the matched pages for exact installation …
- Very specific: line 122
Run ax profiles show to check for an existing profile.
- Very specific: line 123
If no profile exists, guide the user to run ax profiles create which provides an interactive wizard that walks through API key and space …
- Distinctive: line 125
If the user needs to find their API key manually, direct them to https://app.arize.com and to navigate to the settings page (do not use …
- Distinctive: line 133
Use auto-instrumentation first.
- Distinctive: line 134
Prefer the repo's native integration surface before adding generic OpenTelemetry plumbing.
- Distinctive: line 135
Fail gracefully: if env vars are missing (warn, do not crash).
- Very specific: line 142
When the app has tool/function execution: add manual CHAIN + TOOL spans (see references/manual-spans.md) so the trace tree shows each tool …
- Distinctive: line 146
Treat instrumentation as complete only when all of the following are true:
- Distinctive: line 155
Run the application and trigger at least one LLM call.
- Very specific: line 158
If the app uses tools: confirm CHAIN and TOOL spans appear with input.value / output.value so tool calls and results are visible.
- Distinctive: line 160
When verification is blocked by CLI or account issues, end with a concrete status:
- Very specific: line 179
If the user asks about IDE-based instrumentation guidance or MCP setup, see references/tracing-assistant-mcp.md.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Arize Instrumentation Skill
Use this skill when the user wants to add Arize AX tracing to their application. Follow the two-phase, agent-assisted flow from the Agent-Assisted Tracing Setup and the Arize AX Tracing — Agent Setup Prompt.
Quick start (for the user)
If the user asks you to "set up tracing" or "instrument my app with Arize", you can start with:
Follow the instructions from https://arize.com/docs/PROMPT.md and ask me questions as needed.
Then execute the two phases below.
Core principles
- Prefer inspection over mutation — understand the codebase before changing it.
- Do not change business logic — tracing is purely additive.
- Use auto-instrumentation where available — add manual spans only for custom logic not covered by integrations.
- Follow existing code style and project conventions.
- Keep output concise and production-focused — do not generate extra documentation or summary files.
- NEVER embed literal credential values in generated code — always reference environment variables (e.g.,
os.environ["ARIZE_API_KEY"],process.env.ARIZE_API_KEY). This includes API keys, space IDs, and any other secrets. The user sets these in their own environment; the agent must never output raw secret values.
Phase 0: Environment preflight
Before changing code:
- Confirm the repo/service scope is clear. For monorepos, do not assume the whole repo should be instrumented.
- Identify the local runtime surface you will need for verification:
- package manager and app start command
- whether the app is long-running, server-based, or a short-lived CLI/script
- whether
axwill be needed for post-change verification
- Do NOT proactively check
axinstallation or version. Ifaxis needed for verification later, just run it when the time comes. If it fails, see references/ax-profiles.md. - Never silently replace a user-provided space ID, project name, or project ID. If the CLI, collector, and user input disagree, surface that mismatch as a concrete blocker.
When you must ask the user first
If monorepo scope, service entrypoint, or target app is still unclear after quick inspection — or you would otherwise open with a bare list of questions — use this opening pattern:
- Acknowledge the skill, e.g.: I found the arize-instrumentation skill in this repo (you may add
skills/arize-instrumentation/SKILL.mdif helpful). - Then a clear pause line, e.g.: A few clarifying questions before I invoke it:
- Ask minimal numbered or short bullet questions — only what blocks Phase 1 or Phase 2.
Phase 1: Analysis (read-only)
Do not write any code or create any files during this phase.
Steps
- Check dependency manifests to detect stack:
- Python:
pyproject.toml,requirements.txt,setup.py,Pipfile - TypeScript/JavaScript:
package.json - Java:
pom.xml,build.gradle,build.gradle.kts - Go:
go.mod
- Python:
- Scan import statements in source files to confirm what is actually used.
- Check for existing tracing/OTel — look for
TracerProvider,register(),opentelemetryimports,ARIZE_*,OTEL_*,OTLP_*env vars, or other observability config (Datadog, Honeycomb, etc.). - Identify scope — for monorepos or multi-service projects, ask which service(s) to instrument.
What to identify
| Item | Examples |
| Language | Python, TypeScript/JavaScript, Java, Go |
| Package manager | pip/poetry/uv, npm/pnpm/yarn, maven/gradle, go modules |
| LLM providers | OpenAI, Anthropic, LiteLLM, Bedrock, etc. |
| Frameworks | LangChain, LangGraph, LlamaIndex, Vercel AI SDK, Mastra, etc. |
| Existing tracing | Any OTel or vendor setup |
| Tool/function use | LLM tool use, function calling, or custom tools the app executes (e.g. in an agent loop) |
Key rule: When a framework is detected alongside an LLM provider, inspect the framework-specific tracing docs first and prefer the framework-native integration path when it already captures the model and tool spans you need. Add separate provider instrumentation only when the framework docs require it or when the framework-native integration leaves obvious gaps. If the app runs tools and the framework integration does not emit tool spans, add manual TOOL spans so each invocation appears with input/output (see references/manual-spans.md).
Phase 1 output
Return a concise summary:
- Detected language, package manager, providers, frameworks
- Proposed integration list (from the routing table in the docs)
- Any existing OTel/tracing that needs consideration
- If monorepo: which service(s) you propose to instrument
- If the app uses LLM tool use / function calling: note that you will add manual CHAIN + TOOL spans so each tool call appears in the trace with input/output (avoids sparse traces).
If the user explicitly asked you to instrument the app now, and the target service is already clear, present the Phase 1 summary briefly and continue directly to Phase 2. If scope is ambiguous, or the user asked for analysis first, stop and wait for confirmation.
Integration routing and docs
Use the Agent Setup Prompt routing table to map detected signals to integration docs and fetch the matched pages for exact installation steps and code snippets. Use llms.txt as a fallback for doc discovery.
See references/integration-routing.md for the full list of supported integrations by language and platform.
Phase 2: Implementation
Proceed only after the user confirms the Phase 1 analysis.
Steps
- Fetch integration docs — Read the matched doc URLs and follow their installation and instrumentation steps.
- Install packages using the detected package manager before writing code:
- Python:
pip install arize-otelplusopeninference-instrumentation-{name}(hyphens in package name; underscores in import, e.g.openinference.instrumentation.llama_index). - TypeScript/JavaScript:
@opentelemetry/sdk-trace-nodeplus the relevant@arizeai/openinference-*package. - Java: OpenTelemetry SDK plus
openinference-instrumentation-*in pom.xml or build.gradle. - Go: Use
arize-otel-gofor tracer setup, plus a per-provider instrumentor when one exists. Install:
Wire the exporter with one call:go get github.com/Arize-ai/arize-otel-go go get github.com/Arize-ai/openinference/go/openinference-semantic-conventions go get github.com/Arize-ai/openinference/go/openinference-instrumentation # Plus exactly one of these, matched to the detected client: go get github.com/Arize-ai/openinference/go/openinference-instrumentation-openai-go # official openai/openai-go SDK go get github.com/Arize-ai/openinference/go/openinference-instrumentation-anthropic-sdk-go # anthropics/anthropic-sdk-go v1.43+arizeotel.Register(ctx, arizeotel.Options{ProjectName: "my-app"})— defaults tootlp.arize.com(US), usearizeotel.EndpointArizeEuropefor EU. It readsARIZE_SPACE_ID/ARIZE_API_KEY/ARIZE_PROJECT_NAME/ARIZE_COLLECTOR_ENDPOINTfrom env when the matchingOptionsfields are unset. Wire the OpenAI instrumentor by passingoption.WithMiddleware(openaiotel.Middleware(otel.Tracer("my-app")))toopenai.NewClient(...)(alongsideoption.WithAPIKey(...)). Wire the Anthropic instrumentor by passingoption.WithMiddleware(anthropicotel.Middleware(otel.Tracer("my-app")))toanthropic.NewClient(...). Both instrumentors exposeWithTraceConfig(instrumentation.TraceConfig{...})for in-code overrides of theOPENINFERENCE_HIDE_*env-driven masking config. Module floor is Go 1.25 (the openinference Go modules require it;arize-otel-goitself is Go 1.23+).
- Python:
- Credentials — User needs an Arize API Key and Space ID. Check existing
axprofiles forARIZE_API_KEYandARIZE_SPACE— never read.envfiles:- Run
ax profiles showto check for an existing profile. Runax profiles validateto verify an existing profile's credentials are still valid. - If no profile exists, guide the user to run
ax profiles createwhich provides an interactive wizard that walks through API key and space setup. See CLI profiles docs for details. - OAuth alternative (v0.18.0+): Users can authenticate via browser-based OAuth PKCE instead of API keys by running
ax auth login. Inform users of this option if they prefer not to manage API keys — do not runax auth loginyourself as it opens a browser. - If the user needs to find their API key manually, direct them to https://app.arize.com and to navigate to the settings page (do not use organization-specific URLs with placeholder IDs — they won't resolve for new users).
- If credentials are not set, instruct the user to set them as environment variables — never embed raw values in generated code. All generated instrumentation code must reference
os.environ["ARIZE_API_KEY"]/os.environ["ARIZE_SPACE"](Python),process.env.ARIZE_API_KEY/process.env.ARIZE_SPACE(TypeScript/JavaScript), oros.Getenv("ARIZE_API_KEY")/os.Getenv("ARIZE_SPACE_ID")(Go —arize-otel-goreadsARIZE_SPACE_ID, notARIZE_SPACE). With the recommendedarizeotel.Register(ctx, arizeotel.Options{...})flow, generated Go code does not need to callos.Getenvat all —Registerreads both env vars when the matchingOptionsfields are unset. - See references/ax-profiles.md for full profile setup and troubleshooting.
- Run
- Centralized instrumentation — Create a single module (e.g.
instrumentation.py,instrumentation.ts,instrumentation.go) and initialize tracing before any LLM client is created. - Existing OTel — If there is already a TracerProvider, add Arize as an additional exporter (e.g. BatchSpanProcessor with Arize OTLP). Do not replace existing setup unless the user asks.
Implementation rules
- Use auto-instrumentation first; manual spans only when needed.
- Prefer the repo's native integration surface before adding generic OpenTelemetry plumbing. If the framework ships an exporter or observability package, use that first unless there is a documented gap.
- Fail gracefully if env vars are missing (warn, do not crash).
- Import order: register tracer → attach instrumentors → then create LLM clients.
- Project name attribute (required): Arize rejects spans with HTTP 500 if the project name is missing —
service.namealone is not accepted. Set it as a resource attribute on the TracerProvider (recommended — one place, applies to all spans):- Python:
register(project_name="my-app")handles it automatically (sets"openinference.project.name"on the resource). For routing spans to different projects, useset_routing_context(space_id=..., project_name=...)fromarize.otel. - TypeScript: Arize accepts both
"model_id"(shown in the official TS quickstart) and"openinference.project.name"viaSEMRESATTRS_PROJECT_NAMEfrom@arizeai/openinference-semantic-conventions(shown in the manual instrumentation docs) — both work. - Go:
arizeotel.Register(ctx, arizeotel.Options{ProjectName: "my-app"})handles this automatically (setsopeninference.project.nameandservice.nameon the resource). If you're wiringsdktrace.NewTracerProviderdirectly (multi-exporter, on-prem collector), passattribute.String("openinference.project.name", "my-app")toresource.New(...)manually.
- Python:
- CLI/script apps — flush before exit:
provider.shutdown()(TS) /provider.force_flush()thenprovider.shutdown()(Python) /tp.Shutdown(ctx)(Go) must be called before the process exits, otherwise async OTLP exports are dropped and no traces appear. - When the app has tool/function execution: add manual CHAIN + TOOL spans (see references/manual-spans.md) so the trace tree shows each tool call and its result — otherwise traces will look sparse (only LLM API spans, no tool input/output).
Verification
Treat instrumentation as complete only when all of the following are true:
- The app still builds or typechecks after the tracing change.
- The app starts successfully with the new tracing configuration.
- You trigger at least one real request or run that should produce spans.
- You either verify the resulting trace in Arize, or you provide a precise blocker that distinguishes app-side success from Arize-side failure.
After implementation:
- Run the application and trigger at least one LLM call.
- Use the
arize-traceskill to confirm traces arrived. If empty, retry shortly. Verify spans have expectedopeninference.span.kind,input.value/output.value, and parent-child relationships. - If no traces: verify
ARIZE_SPACEandARIZE_API_KEY, ensure tracer is initialized before instrumentors and clients, check connectivity tootlp.arize.com:443, and inspect app/runtime exporter logs so you can tell whether spans are being emitted locally but rejected remotely. For debug setGRPC_VERBOSITY=debugor passlog_to_console=Truetoregister(). Common gotchas: (a) missing project name resource attribute causes HTTP 500 rejections —service.namealone is not enough; Python: passproject_nametoregister(); TypeScript: set"model_id"orSEMRESATTRS_PROJECT_NAMEon the resource; Go: addattribute.String("openinference.project.name", "my-app")toresource.New(...); (b) CLI/script processes exit before OTLP exports flush — callprovider.force_flush()thenprovider.shutdown()(Python/TS) ortp.Shutdown(ctx)(Go) before exit; (c) CLI-visible spaces/projects can disagree with a collector-targeted space ID — report the mismatch instead of silently rewriting credentials. - If the app uses tools: confirm CHAIN and TOOL spans appear with
input.value/output.valueso tool calls and results are visible.
When verification is blocked by CLI or account issues, end with a concrete status:
- app instrumentation status
- latest local trace ID or run ID
- whether exporter logs show local span emission
- whether the failure is credential, space/project resolution, network, or collector rejection
Reference links
| Resource | URL |
| Agent-Assisted Tracing Setup | https://arize.com/docs/ax/alyx/tracing-assistant |
| Agent Setup Prompt (full routing + phases) | https://arize.com/docs/PROMPT.md |
| Arize AX Docs | https://arize.com/docs/ax |
| Full integration list | https://arize.com/docs/ax/integrations |
| Doc index (llms.txt) | https://arize.com/docs/llms.txt |
IDE Integration (MCP)
If the user asks about IDE-based instrumentation guidance or MCP setup, see references/tracing-assistant-mcp.md.
Save Credentials for Future Use
See references/ax-profiles.md § Save Credentials for Future Use.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

