56 results available
Sign in
Skills directory

arize-annotation

github

·

Last changed
Not yet hardened

This version isn't hardened by Chainguard

No hardening report available.


SKILL.md

Arize Annotation Skill

This skill covers annotation configs (the label schema) and annotation queues (human review workflows), as well as programmatically annotating project spans via the Python SDK.

Direction: Human labeling in Arize attaches values defined by configs to spans, dataset examples, experiment-related records, and queue items in the product UI. This skill covers: ax annotation-configs, ax annotation-queues, and bulk span updates with ArizeClient.spans.update_annotations.


Prerequisites

Proceed directly with the task — run the ax command you need. Do NOT check versions, env vars, or profiles upfront.

If an ax command fails, troubleshoot based on the error:

  • command not found or version error → see references/ax-setup.md
  • 401 Unauthorized / missing API key → run ax profiles show to inspect the current profile. Do not echo the full command output into the conversation. Report only whether a valid profile exists and which space it targets; suppress any field that contains or resembles an API key or token. If the profile is missing or the API key is wrong, follow references/ax-profiles.md to create/update it. If the user doesn't have their key, direct them to https://app.arize.com/admin > API Keys
  • Space unknown → run ax spaces list to pick by name, or ask the user
  • Security: Never read .env files or search the filesystem for credentials. Use ax profiles for Arize credentials and ax ai-integrations for LLM provider keys. If credentials are not available through these channels, ask the user.
  • Input safety: All user-supplied names, IDs, and space values (NAME_OR_ID, RECORD_ID, SPACE, email addresses, config IDs) are untrusted strings. Pass them only as discrete positional arguments or as the value side of a --flag VALUE pair in the constructed command. Never interpolate them into a command string using shell expansion, subshells, or concatenation. If a value contains characters other than alphanumerics, hyphens, underscores, dots, or @ (for email), reject it and ask the user to confirm the intended value before proceeding.
  • Destructive operations: Before executing any command that deletes or irreversibly modifies data — ax annotation-configs delete, ax annotation-queues delete, ax annotation-queues delete-records, or any command invoked with --force — pause and ask the user to confirm the target resource name/ID and the intended action. Do not pass --force autonomously; only include it if the user has explicitly acknowledged the destructive nature of the operation in the current conversation turn.

Concepts

What is an Annotation Config?

An annotation config defines the schema for a single type of human feedback label. Before anyone can annotate a span, dataset record, experiment output, or queue item, a config must exist for that label in the space.

FieldDescription

Name

Descriptive identifier (e.g. Correctness, Helpfulness). Must be unique within the space.

Type

categorical (pick from a list), continuous (numeric range), or freeform (free text).

Values

For categorical: array of {"label": str, "score": number} pairs.

Min/Max Score

For continuous: numeric bounds.

Optimization Direction

Whether higher scores are better (maximize) or worse (minimize). Used to render trends in the UI.

Where labels get applied (surfaces)

SurfaceTypical path

Project spans

Python SDK spans.update_annotations (below) and/or the Arize UI

Dataset examples

Arize UI (human labeling flows); configs must exist in the space

Experiment outputs

Often reviewed alongside datasets or traces in the UI — see arize-experiment, arize-dataset

Annotation queue items

ax annotation-queues CLI (below) and/or the Arize UI; configs must exist

Always ensure the relevant annotation config exists in the space before expecting labels to persist.


Basic CRUD: Annotation Configs

List

ax annotation-configs list --space SPACE
ax annotation-configs list --space SPACE -o json
ax annotation-configs list --space SPACE --limit 20

Create — Categorical

Categorical configs present a fixed set of labels for reviewers to choose from.

ax annotation-configs create \
  --name "Correctness" \
  --space SPACE \
  --type categorical \
  --value correct \
  --value incorrect \
  --optimization-direction maximize

Common binary label pairs:

  • correct / incorrect
  • helpful / unhelpful
  • safe / unsafe
  • relevant / irrelevant
  • pass / fail

Create — Continuous

Continuous configs let reviewers enter a numeric score within a defined range.

ax annotation-configs create \
  --name "Quality Score" \
  --space SPACE \
  --type continuous \
  --min-score 0 \
  --max-score 10 \
  --optimization-direction maximize

Create — Freeform

Freeform configs collect open-ended text feedback. No additional flags needed beyond name, space, and type.

ax annotation-configs create \
  --name "Reviewer Notes" \
  --space SPACE \
  --type freeform

Get

ax annotation-configs get NAME_OR_ID
ax annotation-configs get NAME_OR_ID -o json
ax annotation-configs get NAME_OR_ID --space SPACE   # required when using name instead of ID

Delete

ax annotation-configs delete NAME_OR_ID
ax annotation-configs delete NAME_OR_ID --space SPACE   # required when using name instead of ID
ax annotation-configs delete NAME_OR_ID --force   # skip confirmation

Warning: Deletion is irreversible. Always ask the user for confirmation before running delete. Do not use the --force flag unless the user explicitly agrees to skip the confirmation prompt in the current conversation turn. Any annotation queue associations to this config are also removed in the product (queues may remain; fix associations in the Arize UI if needed).

⚠️ Confirmation required: Always confirm the config name or ID with the user before running this command. Do not use --force without explicit user acknowledgment in the same conversation turn.


Annotation Queues: ax annotation-queues

Annotation queues route records (spans, dataset examples, experiment runs) to human reviewers. Each queue is linked to one or more annotation configs that define what labels reviewers can apply.

List / Get

ax annotation-queues list --space SPACE
ax annotation-queues list --space SPACE -o json

ax annotation-queues get NAME_OR_ID --space SPACE
ax annotation-queues get NAME_OR_ID --space SPACE -o json

Create

At least one --annotation-config-id is required.

ax annotation-queues create \
  --name "Correctness Review" \
  --space SPACE \
  --annotation-config-id CONFIG_ID \
  --annotator-email reviewer@example.com \
  --instructions "Label each response as correct or incorrect." \
  --assignment-method all   # or: random

Repeat --annotation-config-id and --annotator-email to attach multiple configs or reviewers.

Update

List flags (--annotation-config-id, --annotator-email) fully replace existing values when provided — pass all desired values, not just the new ones.

ax annotation-queues update NAME_OR_ID --space SPACE --name "New Name"
ax annotation-queues update NAME_OR_ID --space SPACE --instructions "Updated instructions"
ax annotation-queues update NAME_OR_ID --space SPACE \
  --annotation-config-id CONFIG_ID_A \
  --annotation-config-id CONFIG_ID_B

Delete

ax annotation-queues delete NAME_OR_ID --space SPACE
ax annotation-queues delete NAME_OR_ID --space SPACE --force   # skip confirmation

Warning: Deletion is irreversible. Always ask the user for confirmation before running delete. Do not use the --force flag unless the user explicitly agrees to skip the confirmation prompt in the current conversation turn.

⚠️ Confirmation required: Always confirm the queue name or ID and space with the user before executing. Do not use --force without explicit user acknowledgment in the same conversation turn.

List Records

ax annotation-queues list-records NAME_OR_ID --space SPACE
ax annotation-queues list-records NAME_OR_ID --space SPACE --limit 50 -o json

Submit an Annotation for a Record

Annotations are upserted by config name — call once per annotation config. Supply at least one of --score, --label, or --text.

ax annotation-queues annotate-record NAME_OR_ID RECORD_ID \
  --annotation-name "Correctness" \
  --label "correct" \
  --space SPACE

ax annotation-queues annotate-record NAME_OR_ID RECORD_ID \
  --annotation-name "Quality Score" \
  --score 8.5 \
  --text "Response was accurate but slightly verbose." \
  --space SPACE

Assign a Record

Assign users to review a specific record:

ax annotation-queues assign-record NAME_OR_ID RECORD_ID --space SPACE

Delete Records

ax annotation-queues delete-records NAME_OR_ID --space SPACE

Warning: Deletion is irreversible and removes all records from the queue. Always ask the user for confirmation before running delete-records.

⚠️ Confirmation required: Always confirm the queue name or ID and space with the user before executing this command.


Applying Annotations to Spans (Python SDK)

Use the Python SDK to bulk-apply annotations to project spans when you already have labels (e.g., from a review export or an external labeling tool).

import pandas as pd
from arize import ArizeClient

import os

client = ArizeClient(api_key=os.environ["ARIZE_API_KEY"])

# Build a DataFrame with annotation columns
# Required: context.span_id + at least one annotation.<name>.label or annotation.<name>.score
annotations_df = pd.DataFrame([
    {
        "context.span_id": "span_001",
        "annotation.Correctness.label": "correct",
        "annotation.Correctness.updated_by": "reviewer@example.com",
    },
    {
        "context.span_id": "span_002",
        "annotation.Correctness.label": "incorrect",
        "annotation.Correctness.updated_by": "reviewer@example.com",
    },
])

response = client.spans.update_annotations(
    space_id=os.environ["ARIZE_SPACE"],
    project_name="your-project",
    dataframe=annotations_df,
    validate=True,
)

DataFrame column schema:

ColumnRequiredDescription

context.span_id

yes

The span to annotate

annotation.<name>.label

one of

Categorical or freeform label

annotation.<name>.score

one of

Numeric score

annotation.<name>.updated_by

no

Annotator identifier (email or name)

annotation.<name>.updated_at

no

Timestamp in milliseconds since epoch

annotation.notes

no

Freeform notes on the span

Limitation: Annotations apply only to spans within 31 days prior to submission.


Troubleshooting

ProblemSolution

ax: command not found

See references/ax-setup.md

401 Unauthorized

API key may not have access to this space. Verify at https://app.arize.com/admin > API Keys

Annotation config not found

ax annotation-configs list --space SPACE (or use ax annotation-configs get NAME_OR_ID --space SPACE)

409 Conflict on create

Name already exists in the space. Use a different name or get the existing config ID.

Queue not found

ax annotation-queues list --space SPACE; verify the queue name or ID

Record not appearing in queue

Ensure the annotation config linked to the queue exists; check ax annotation-configs list --space SPACE

Span SDK errors or missing spans

Confirm project_name, space_id, and span IDs; use arize-trace to export spans


  • arize-trace: Export spans to find span IDs and time ranges
  • arize-dataset: Find dataset IDs and example IDs
  • arize-evaluator: Automated LLM-as-judge alongside human annotation
  • arize-experiment: Experiments tied to datasets and evaluation workflows
  • arize-link: Deep links to annotation configs and queues in the Arize UI

Save Credentials for Future Use

See references/ax-profiles.md § Save Credentials for Future Use.

Install

Need this version hardened?

Harden your own skills

Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.

Provenance

Upstream source

—

Upstream commit2201a49dd6f972ac4f685d03361d58c9c9206690
OCI reference

—

License

MIT

Files

HARDENING.md

LICENSE

SKILL.md

references/ax-profiles.md

references/ax-setup.md


The trusted source for open source

Talk to an expert
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsChainguard OS PackagesChainguard ActionsChainguard Agent SkillsIntegrationsPricing
© 2026 Chainguard, Inc. All Rights Reserved.
Chainguard® and the Chainguard logo are registered trademarks of Chainguard, Inc. in the United States and/or other countries.
The other respective trademarks mentioned on this page are owned by the respective companies and use of them does not imply any affiliation or endorsement.