Agent skill

Phoenix GitHub

by Arize-ai in Arize-ai/phoenix

Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository.

Apache-2.0Auto-check passedAI & LLM Engineering

Install Phoenix GitHub

skills CLI
$ npx skills add Arize-ai/phoenix --skill phoenix-github -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Arize-ai/phoenix phoenix-github --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Arize-ai/phoenix.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/phoenix-github .claude/skills/phoenix-github && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
phoenix-github
GitHub stars
12k
Token cost
~6.5k tokens
SKILL.md length
2,561 words
Files
8 (incl. scripts)
Skills in repo
39
Repo updated
First seen
Licence
Apache-2.0

At a glance

Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository.

  • Filing roadmap issues
  • SKILL.md covers Repository and Boards, Quick Reference, Tooling and Sprint Operations, plus 7 more sections
  • Runs Python and Shell scripts from its folder; calls gh
  • Applying labels

What it does

Phoenix GitHub is an agent skill from Arize-ai/phoenix. Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository. Use when filing roadmap issues, triaging bugs, applying labels, running sprint close-out and rollover, auditing board hygiene, checking ticket-load balance across the team, keeping roadmap epics up to date, flagging epics that need planning, or querying issue/project state via the GitHub CLI.

Its SKILL.md is about 6.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts (for example `scripts/_board.py`, `scripts/board.json` and `scripts/health.py`).

It sits in AI & LLM Engineering, covering LLM observability and User stories. It works with GitHub and Arize Phoenix. The repository describes itself as: AI Observability & Evaluation. The licence is Apache-2.0.

When your agent uses it

  • Filing roadmap issues
  • Applying labels
  • Running sprint close-out and rollover
  • Auditing board hygiene

Example prompts

  • “/phoenix-github”

Requirements

  • Python 3
  • A Bash shell

What it can do on your machine

Read from SKILL.md and the folder at commit 3383f07. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 7 files in scripts/ (Python and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Phoenix GitHub loads about 6.5k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 2,561 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~107
When it runs · the whole SKILL.md, loaded when a task matches
~6.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Arize-ai/phoenix at commit 3383f07, republished under its Apache-2.0 licence (© Arize-ai). 2,561 words, ~6,548 tokens.

Download SKILL.mdSave it as .claude/skills/phoenix-github/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
phoenix-github
description
Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository. Use when filing roadmap issues, triaging bugs, applying labels, running sprint close-out and rollover, auditing board hygiene, checking ticket-load balance across the team, keeping roadmap epics up to date, flagging epics that need planning, or querying issue/project state via the GitHub CLI.
license
Apache-2.0
metadata.author
oss@arize.com
metadata.version
2.1.0
metadata.internal
true

Phoenix GitHub

Reference for managing issues, labels, project boards, and sprint operations on Arize-ai/phoenix using the gh CLI.

Repository and Boards

Arize-ai/phoenix

There are two project boards. Pick deliberately.

BoardNumberProject IDWhat it holds
phoenix (sprint board)#42PVT_kwDOA5FfSM4AIM-TEverything. ~6.3k items, Sprint/Points/Priority fields. This is the board sprint work runs on.
phoenix roadmap#45PVT_kwDOA5FfSM4AJaRo~75 high-level epics with Start/Target dates. No sprints.

Day-to-day sprint operations mean board #42. Roadmap epics with dates live on #45.

Quick Reference

TaskSee
Close out a sprint / roll slipped ticketsSprint Operations
Check the board is up to dateBoard Hygiene
Check nobody is starving or buriedTicket Load Health
Run a standup — recent work and work in flight per personStandup
Keep roadmap epics current / flag ones needing planningRoadmap Health
File a roadmap epicRoadmap Issues
Add an epic to the roadmap board (#45)Putting the Epic on the Roadmap Board
Apply the right labelsLabel Taxonomy
Set project fields by handProject Field Mechanics
Create a bug or feature requestStandard Issues

Tooling

Five bundled scripts under scripts/ back the tech-lead workflows. They read the roster, the sprint calendar, and all field IDs live — nothing about a person, sprint, or ticket is hardcoded.

bash
cd .agents/skills/phoenix-github/scripts

# Sprint board (#42) — needs a snapshot first
./snapshot.sh board.json     # ~60-90s, walks the whole board once
./health.py   board.json     # hygiene + load report (read-only)
./rollover.py board.json     # sprint rollover plan (dry run by default)
./standup.py  board.json     # per-person did/doing report (read-only;
                             # snapshot optional but recommended)

# Roadmap board (#45) — small, fetches live
./roadmap.py                 # roadmap audit (dry run by default)

For board #42, snapshot once and run every check off that file. The ProjectV2 API has no server-side field filter, so a full read is ~63 sequential pages. Re-taking the snapshot per check wastes minutes.

A snapshot is a read cache, not a source of truth for writes. Anything closed or moved since it was taken still reads as open in the file, so rollover.py --apply refuses to run against a snapshot older than 2 hours (PHOENIX_SNAPSHOT_MAX_AGE_MIN; override with --stale-ok if you know the file is still accurate). Re-snapshot before applying, and again afterwards.

Board #45 is ~75 items — one page — so roadmap.py just fetches it each run.

Every script that writes is dry-run by default and takes --apply.

Tunable via env vars: PHOENIX_MIN_TICKETS (3), PHOENIX_MAX_TICKETS (15), PHOENIX_ROSTER_TEAM (oss-eng; comma-separated list of org teams), PHOENIX_ROSTER_EXCLUDE (empty; comma-separated logins to omit from all reporting), PHOENIX_ROSTER_INCLUDE (empty; comma-separated logins to add to the roster regardless of team membership), PHOENIX_STANDUP_DAYS (2), PHOENIX_PROJECT_NUMBER (42), PHOENIX_SNAPSHOT_MAX_AGE_MIN (120), PHOENIX_ISSUE_LIMIT (5000). Team-wide values live in .claude/settings.json (env block); personal overrides go in .claude/settings.local.json. Neither is read by a plain shell — export them when running the scripts outside Claude Code.


Sprint Operations

Sprints are 14 days, defined by the Sprint iteration field on board #42 (field ID PVTIF_lADOA5FfSM4AIM-TzgFYwU4 — stable). Individual iteration IDs rotate every sprint, so always resolve them live; never hardcode one.

bash
# Current and upcoming sprints
gh api graphql -F org=Arize-ai -F num=42 -f query='
query($org: String!, $num: Int!) {
  organization(login: $org) { projectV2(number: $num) {
    field(name: "Sprint") { ... on ProjectV2IterationField {
      id configuration { iterations { id title startDate duration } } } } } } }'

The current sprint is the iteration whose [startDate, startDate + duration) window contains today.

New iterations cannot be created through the API. If no future sprint exists, add it on the Sprint field in the GitHub UI before rolling anything over. The scripts fail with a clear message rather than guessing.

Sprint Close-Out

Run at the end of each sprint. Any ticket still open and not Done rolls to the next sprint and gets a comment recording the slip.

bash
./snapshot.sh board.json
./rollover.py board.json                 # 1. review the plan (changes nothing)
./rollover.py board.json --apply         # 2. move them + comment

Slip comment posted on each rolled ticket:

markdown
Slipped from **Sprint 11-21-33** → moved to **Sprint 11-21-34**.

Rolled over during sprint close-out.

Useful flags:

FlagEffect
(none)Dry run — prints the plan, changes nothing
--applyPerform the moves and post comments
--strandedAlso sweep tickets left behind on already-completed sprints
--only 123,456Restrict to specific issue numbers
--no-commentMove without commenting (use for bulk cleanup of old strays)
--stale-okApply from a snapshot older than the freshness limit

"Stranded" means a sprint that has actually finished, taken from the board's own completed-iteration list. Work parked on a future iteration is deliberate planning and is never pulled backwards, no matter how many iterations exist.

Always review the dry run before --apply. Rolling a sprint comments on every affected ticket, which notifies every assignee and watcher — it is loud and not worth undoing by hand.

A ticket whose move succeeded but whose comment failed is reported separately: it is already in the next sprint, so re-running will not pick it up again.

For the --stranded sweep specifically, prefer --no-comment: those tickets slipped many sprints ago and a fresh "slipped" notification on each is noise.


Board Hygiene

The board is only useful if it reflects reality. health.py checks six things:

CheckWhy it matters
Open tickets tagged to a past sprintSlipped but never rolled — invisible work
Status Done but issue still openEither close the issue or correct the status
In progress with no assigneeNobody actually owns it
Current-sprint tickets with no assigneeCommitted to but unowned
Current-sprint tickets with no StatusWon't appear in any board column
Open repo issues not on the boardWork that exists but is untracked
bash
./health.py board.json --section hygiene

Fix stranded past-sprint tickets with ./rollover.py board.json --stranded. Add missing issues to the board with the mutation in Project Field Mechanics.


Ticket Load Health

Goal: keep everyone fed at all times. Every person on the roster should be carrying between 3 and 15 tickets. Under 3 means they are about to run dry; over 15 means they are buried and the queue is not real.

Roster is the live membership of the PHOENIX_ROSTER_TEAM team(s) (default @Arize-ai/oss-eng), so it self-updates as the teams change. Collaborators who carry sprint work without belonging to a roster team are added by login via PHOENIX_ROSTER_INCLUDE, and show in the roster label as +login. Prefer adding someone to the org team when that is appropriate — the include list is a standing override that does not self-update. Logins listed in PHOENIX_ROSTER_EXCLUDE are dropped from the roster and filtered out of snapshot assignee data at parse time, so they never appear in any report.

bash
./health.py board.json --section load

Two numbers are reported per person, and they answer different questions:

  • sprint — open, non-Done tickets in the current sprint. This is the actionable number: it drives who needs work assigned this sprint.
  • total — open, non-Done tickets assigned anywhere on the board. This is ownership debt: a large gap between total and sprint means someone is nominally accountable for a long tail they are not working.

The report also flags sprint work assigned to people outside the roster team, which is informational rather than a problem.

Acting on the report
SignalAction
Someone under 3 in-sprintPull ready tickets from Backlog into the sprint and assign
Someone over 15 in-sprintRe-assign to a starving teammate, or push to next sprint
Large ownership debt (high total, low sprint)Unassign the stale tail, or move it to Backlog
Unassigned current-sprint ticketsAssign to whoever is furthest under the minimum

Assigning and moving to the backlog:

bash
gh issue edit 14541 --repo Arize-ai/phoenix --add-assignee <login>
gh issue edit 14541 --repo Arize-ai/phoenix --remove-assignee <login>

Prefer moving ready, well-scoped tickets to a starving teammate over inventing new ones. Tickets labelled good-agent-issue are already scoped tightly enough to hand off cleanly.


Standup

standup.py answers the two standup questions for every roster person:

  • did — merged PRs they authored and closed issues they were assigned, inside the lookback window (default 2 days). Queried live from GitHub search.
  • doing — their open PRs, plus (with a snapshot) their board items in In progress or Needs Review. Without a snapshot it falls back to open assigned issues updated inside the window, which is noisier.
bash
./snapshot.sh board.json
./standup.py board.json          # recommended: board statuses make "doing" real
./standup.py                     # defaults to board.json; if the file is
                                 # missing, falls back to live-only mode
FlagEffect
--days NLookback window in days (default 2, PHOENIX_STANDUP_DAYS)
--person XOnly this login; repeatable, accepts non-roster logins too
--jsonMachine-readable output

Read-only — it never mutates the board or issues. When presenting the report, lead with people whose did is empty and whose doing is empty or stale: they are the ones a standup exists to catch.


Roadmap Health

Board #45 is the roadmap. The job is to keep every current epic honest about two things: how far along it is, and how well it is broken down.

bash
./roadmap.py                 # audit, changes nothing
./roadmap.py --apply         # write planning labels + backfill Status
./roadmap.py --section planning   # one section only:
                                  # progress | planning | freshness | fields
What "current" means

An epic is current when it has started (Start Date on or before today, or no Start Date) and is still open. Everything scheduled for a future quarter is out of scope — there is no point auditing the specificity of work nobody has begun.

Today that is ~14 of the 46 open epics; the rest are dated Q4 2026 and later.

How progress is measured

Roadmap progress lives in the epic body checklist, not in the Status field or GitHub sub-issues. Only a minority of epics use real sub-issues, so the audit parses - [ ] / - [x] items out of the body and counts an item as a real ticket when it references an issue (#1234 or a full issue URL). A bare number under 1000 does not count — the repo passed that long ago, so Phase #2 is prose, not a ticket.

Needs planning

An epic is flagged when it has no checklist at all, or when fewer than 50% of its remaining (unchecked) items are real tickets — meaning the work ahead is still loose bullets.

The ratio deliberately ignores completed items. Epics often record shipped work as prose (- [x] OAuth audience scoping ...), and counting that history would flag well-run epics as under-planned.

This matches how epics are meant to evolve: list new scope as generic bullets first, then promote them to real issues lazily as they get picked up. The flag fires when an epic is being worked but its remaining scope has not been promoted.

Flagged epics get the needs planning label:

bash
# One-time setup; --apply creates it automatically if missing
gh label create "needs planning" --repo Arize-ai/phoenix \
  --color FBCA04 --description "Roadmap epic lacks a broken-down plan"

# Find them later
gh issue list --repo Arize-ai/phoenix --label "needs planning" --state open

--apply also removes the label from epics that have since been planned, so it stays truthful in both directions.

To clear a flag, break the loose bullets into issues (the to-issues skill does this) and link them back into the parent's checklist.

Show full SKILL.md (1,000 more words)Show less
Other checks
CheckMeaning
QuietNo body edit or comment on a current epic for over 60 days — either dead or unreported
OverduePast its Target Date and still open — re-date it or cut scope
Complete but openEvery checklist item ticked, issue still open — close it
Missing StatusStatus is empty; the audit proposes a value (see below)
Status disagreesStatus contradicts the issue's real state
Missing datesOpen epic with no Start or Target Date
Missing InitiativeCurrent epic with no Initiative set (reported, never written)

Status is inferred from the issue itself, and only ever written with --apply:

SituationProposed Status
Issue closedDone
Open, startedIn Progress
Open, future Start DateTodo

Status is currently empty on most of board #45, so the first --apply will propose a large backfill. Review the dry run before running it.


Label Taxonomy

Component Labels (c/)

Every issue should have at least one component label.

LabelArea
c/uiFrontend / React UI
c/serverFastAPI backend / server logic
c/tracesTracing, spans, OpenTelemetry ingestion
c/evalsEvaluations framework
c/datasetsDatasets CRUD and management
c/experimentsExperiment runs and comparisons
c/annotationsHuman annotations and queues
c/promptsPrompt management and prompt SDK
c/playgroundLLM playground and provider support
c/agentsIn-browser or terminal AI agents for Phoenix (PXI)
c/clientPython/TypeScript SDK and REST client
c/cli@arizeai/phoenix-cli
c/apiREST API surface
c/sessionsSessions and session tracking
c/otelOpenTelemetry / OTel ingestion
c/rbacRole-based access control
c/authAuthentication
c/infraInfrastructure, jobs, storage connectors
c/helmHelm chart / Kubernetes deployment
c/mcpMCP (Model Context Protocol) integration
c/integrationsThird-party framework integrations
c/filtersFilter UI and filter logic
c/metricsMetrics and aggregations
c/usabilityUsability and UX papercuts
c/dxDeveloper experience
Priority Labels
LabelUse
priority: highestRoadmap epics and critical P0 bugs
priority: highImportant but not blocking
priority: mediumNormal queue work
priority: lowNice-to-have
Size Labels

size:XS, size:S, size:M, size:L, size:XL, size:XXL — rough effort. Board #42 also has a numeric Points field (1, 2, 3, 5) which is the one the sprint board sorts on; the labels are advisory.

Type / Status Labels
LabelUse
roadmapHigh-level roadmap epic
bugSomething isn't working
enhancementNew feature or improvement
documentationDocs-only change
triageNeeds triage by the team
blockedBlocked on external dependency
backlogAcknowledged but not scheduled
needs informationAwaiting info from the reporter
needs attentionNeeds a maintainer to look
designNeeds design work before engineering
onboardingRelated to new-user onboarding flows
phoenix-cloudArize-hosted Phoenix (cloud) specific
user requestRequested by a user
good-agent-issueWell-scoped enough for an AI agent to pick up
agent-in-progressAn agent is currently working on this issue
good first issueSuitable for a new external contributor

Roadmap Issues

Roadmap issues are high-level epics representing product initiatives.

Title Format
🗺️ [category] Title

The 🗺️ prefix marks an epic. Sub-issues that roll up under an epic use the same [category] bracket but drop the emoji (e.g. [agents] dataset tools).

Categories: ui/ux, agents, tools, tracing/traces, sessions, evals, server-evals, sandboxes, annotations, prompts, datasets/experiments, infrastructure, enterprise, sdk/connectors. A few standalone epics use a product name instead of a bracket (e.g. @arizeai/phoenix-cli, REST API).

Labels per Category

Every roadmap epic gets roadmap + enhancement. Add priority: highest for actively-prioritized epics, plus the relevant component label(s):

CategoryComponent labels
ui/uxc/ui
agentsc/agents
toolsc/agents (often none beyond roadmap)
tracing / tracesc/traces
sessionsc/sessions, c/ui
evalsc/evals (add c/playground when playground-related)
server-evals / sandboxesc/evals, c/server
annotationsc/annotations
promptsc/prompts, c/playground
datasets/experimentsc/datasets, c/experiments
infrastructurec/infra
enterprisec/rbac, c/auth
sdk/connectorsc/client
@arizeai/phoenix-clic/cli, c/dx
REST APIc/api, c/server
Body Template

Epic bodies are bare checkbox lists of tickets — no prose, no rationale. List new scope as generic bullets first and promote them to detailed sub-issues lazily, as they get picked up.

Once an epic is current, Roadmap Health flags it if the remaining bullets have not been promoted to real issues.

markdown
<one-line description of the initiative>

## Spike

- [ ]

## Front End

- [ ]

## Back End

- [ ]

## Open Questions

-
Creating a Roadmap Issue
bash
gh issue create \
  --repo Arize-ai/phoenix \
  --title "🗺️ [category] Title" \
  --label "roadmap,priority: highest,c/ui" \
  --body "$(cat <<'EOF'
Description of the initiative.

## Spike

- [ ]

## Front End

- [ ]

## Back End

- [ ]

## Open Questions

-
EOF
)"

gh issue create does not support --json. Capture the issue URL from stdout and extract the number with grep -oE '[0-9]+$'.

Putting the Epic on the Roadmap Board

An epic is not done being filed until it is on board #45 with dates. Until then roadmap.py cannot see it, so it is never audited or flagged.

bash
NODE_ID=$(gh api repos/Arize-ai/phoenix/issues/{number} --jq '.node_id')

ITEM_ID=$(gh api graphql -f query='
  mutation($project: ID!, $content: ID!) {
    addProjectV2ItemById(input: {projectId: $project, contentId: $content}) {
      item { id }
    }
  }' \
  -f project="PVT_kwDOA5FfSM4AJaRo" \
  -f content="$NODE_ID" \
  --jq '.data.addProjectV2ItemById.item.id')

Then set Start Date and Target Date on that $ITEM_ID with Set a Date Field. Both are board-#45 field IDs and only work with an item ID from board #45.


Project Field Mechanics

Field IDs below are stable. Iteration (sprint) IDs are not — resolve those live, see Sprint Operations.

Board #42 — phoenix (sprint board)
FieldID
Project IDPVT_kwDOA5FfSM4AIM-T
StatusPVTSSF_lADOA5FfSM4AIM-TzgFJPQg
Sprint (iteration)PVTIF_lADOA5FfSM4AIM-TzgFYwU4
PointsPVTSSF_lADOA5FfSM4AIM-TzgHhukw
Priority (number)PVTF_lADOA5FfSM4AIM-TzgNgl3g

Status options (note the emoji and spacing are part of the name):

StatusOption ID
Backlog71ea9c79
📘 Todof75ad846
👨💻 In progress47fc9ee4
🔍. Needs Review35410d8c
👍 Approvedd85daefa
✅ Done98236657

Points options: 1 5694a02d, 2 e50f7f7e, 3 268e6755, 5 4f52b74b

Board #45 — phoenix roadmap
FieldID
Project IDPVT_kwDOA5FfSM4AJaRo
Start DatePVTF_lADOA5FfSM4AJaRozgInoCI
Target DatePVTF_lADOA5FfSM4AJaRozgInn58
StatusPVTSSF_lADOA5FfSM4AJaRozgFw9n0
InitiativePVTSSF_lADOA5FfSM4AJaRozg-EB08
Sub-issues progressPVTF_lADOA5FfSM4AJaRozgXC5Zs

Status options: Todo f75ad846, In Progress 47fc9ee4, Done 98236657

Initiative options: Agents b38eaffc, infrastructure fdb510cd, enterprise 4b78ba6c. Currently unset on every item — roadmap.py reports it for current epics but never writes it.

Add an Issue to a Board

Pass the project ID of the board you mean: #42 for sprint work, #45 for roadmap epics. The returned $ITEM_ID is scoped to that board — using it against the other one fails.

bash
NODE_ID=$(gh api repos/Arize-ai/phoenix/issues/{number} --jq '.node_id')

# Sprint board #42: PVT_kwDOA5FfSM4AIM-T
# Roadmap board #45: PVT_kwDOA5FfSM4AJaRo
ITEM_ID=$(gh api graphql -f query='
  mutation($project: ID!, $content: ID!) {
    addProjectV2ItemById(input: {projectId: $project, contentId: $content}) {
      item { id }
    }
  }' \
  -f project="PVT_kwDOA5FfSM4AIM-T" \
  -f content="$NODE_ID" \
  --jq '.data.addProjectV2ItemById.item.id')
Set the Sprint (iteration)
bash
gh api graphql -f query='
  mutation($project: ID!, $item: ID!, $field: ID!, $iter: String!) {
    updateProjectV2ItemFieldValue(input: {
      projectId: $project, itemId: $item, fieldId: $field,
      value: {iterationId: $iter}
    }) { projectV2Item { id } }
  }' \
  -f project="PVT_kwDOA5FfSM4AIM-T" \
  -f item="$ITEM_ID" \
  -f field="PVTIF_lADOA5FfSM4AIM-TzgFYwU4" \
  -f iter="$ITERATION_ID"
Set a Single-Select Field (Status, Points)
bash
gh api graphql -f query='
  mutation($project: ID!, $item: ID!, $field: ID!, $option: String!) {
    updateProjectV2ItemFieldValue(input: {
      projectId: $project, itemId: $item, fieldId: $field,
      value: {singleSelectOptionId: $option}
    }) { projectV2Item { id } }
  }' \
  -f project="PVT_kwDOA5FfSM4AIM-T" \
  -f item="$ITEM_ID" \
  -f field="PVTSSF_lADOA5FfSM4AIM-TzgFJPQg" \
  -f option="47fc9ee4"
Set a Date Field (board #45)
bash
gh api graphql -f query='
  mutation($project: ID!, $item: ID!, $field: ID!, $value: Date!) {
    updateProjectV2ItemFieldValue(input: {
      projectId: $project, itemId: $item, fieldId: $field,
      value: {date: $value}
    }) { projectV2Item { id } }
  }' \
  -f project="PVT_kwDOA5FfSM4AJaRo" \
  -f item="$ITEM_ID" \
  -f field="PVTF_lADOA5FfSM4AJaRozgInoCI" \
  -f value="2026-04-01"
Remove an Item from a Board
bash
gh api graphql -f query='
  mutation($project: ID!, $item: ID!) {
    deleteProjectV2Item(input: {projectId: $project, itemId: $item}) {
      deletedItemId
    }
  }' \
  -f project="PVT_kwDOA5FfSM4AIM-T" \
  -f item="$ITEM_ID"

Standard Issues

Bug Report
bash
gh issue create \
  --repo Arize-ai/phoenix \
  --title "Short description of the bug" \
  --label "bug,triage,c/traces" \
  --body "..."
Feature Request
bash
gh issue create \
  --repo Arize-ai/phoenix \
  --title "Short description of the feature" \
  --label "enhancement,c/ui" \
  --body "..."

Querying

The board and roadmap change constantly — query live rather than trusting a snapshot in this file.

bash
# Open issues on the sprint board (fast; search-based)
gh issue list --repo Arize-ai/phoenix \
  --search "project:Arize-ai/42 is:open" --limit 200 \
  --json number,title,assignees

# All open roadmap epics
gh issue list --repo Arize-ai/phoenix --label roadmap --state open \
  --limit 100 --json number,title --jq '.[] | "\(.number)\t\(.title)"'

# Roadmap epics currently flagged as needing planning
gh issue list --repo Arize-ai/phoenix --label "needs planning" --state open \
  --json number,title --jq '.[] | "\(.number)\t\(.title)"'

# Roadmap epics for a component
gh issue list --repo Arize-ai/phoenix --label "roadmap,c/evals" --state open \
  --json number,title --jq '.[] | "\(.number)\t\(.title)"'

# Unassigned, ready-to-pick-up work (feed a starving teammate from here)
gh issue list --repo Arize-ai/phoenix --state open \
  --label good-agent-issue --search "no:assignee" --json number,title

gh issue list --search "project:Arize-ai/42 ..." is fast but cannot see project field values (Sprint, Status, Points). Anything that depends on those needs the full board snapshot — use scripts/snapshot.sh.

Epics group their child issues as a markdown checklist in the body (often bucketed by Phoenix surface — Datasets, Prompts, Playground, Experiments, Evals — with a ## ✅ Completed section). When filing a sub-issue, link it back from the parent's checklist.

© Arize-ai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. 1 hidden character (zero-width or bidirectional) removed. Raw file

Files

SKILL.md and 7 other files (scripts) in .agents/skills/phoenix-github of Arize-ai/phoenix.

  • SKILL.md
  • scripts/_board.py
  • scripts/board.json
  • scripts/health.py
  • scripts/roadmap.py
  • scripts/rollover.py
  • scripts/snapshot.sh
  • scripts/standup.py

Open the folder on GitHubat commit 3383f07

Compare with similar skills

Phoenix GitHub next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Phoenix GitHub compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Phoenix GitHub this skillArize-ai/phoenix12k—~6.5kAutomated safety check: PassApache-2.0
Agents Operationfazer-ai/agents118—~1.3kAutomated safety check: PassApache-2.0
Phoenix LLM ObservabilityOrchestra-Research/AI-Research-SKILLs13k2 repos~2.9kAutomated safety check: PassMIT
Debug Issue With Datadoglangfuse/langfuse35k—~1.6kAutomated safety check: PassCustom licence
Managed Deep Agentslangchain-ai/langchain-skills1.3k—~8.7kAutomated safety check: NotesMIT
Phx Researcholiver-kriska/claude-elixir-phoenix564—~836Automated safety check: PassMIT

Similar skills

  • Agents Operation

    fazer-ai/agents

    Modo operação do fazer.ai agents: debugar conversas em produção e corrigir comportamentos inesperados do agente.

    118 GitHub stars~1.3k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Phoenix LLM Observability

    Orchestra-Research/AI-Research-SKILLs

    Sets up Arize Phoenix to trace, evaluate and monitor LLM applications, with instrumentation for OpenAI, LangChain and LlamaIndex and a self-hosted server.

    13k GitHub starsUsed in 2 repos~2.9k tokens
    AI & LLM EngineeringAuto-check passed
  • Debug Issue With Datadog

    langfuse/langfuse

    Establish root cause by combining Datadog telemetry with the Langfuse repo.

    35k GitHub stars~1.6k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Managed Deep Agents

    langchain-ai/langchain-skills

    Official

    INVOKE THIS SKILL when building, testing, or deploying Managed Deep Agents in LangSmith.

    1.3k GitHub stars~8.7k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check: notes
  • Phx Research

    oliver-kriska/claude-elixir-phoenix

    Research Elixir/Phoenix/Ecto topics or evaluate Hex libraries (--library).

    564 GitHub stars~836 tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check passed
  • Research

    oliver-kriska/claude-elixir-phoenix

    Research Elixir/Phoenix/Ecto topics or evaluate Hex libraries (--library).

    564 GitHub stars~1.2k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check passed

More from Arize-ai/phoenix

All 39 skills in this repo
  • Harbor Exec

    Arize-ai/phoenix

    A skill your agent uses when working with Harbor's harbor exec CLI workflow: compiling files, directories, or globs into Harbor tasks; running map jobs; configuring artifacts and existence-only…

    12k GitHub stars~909 tokensUpdated today
    Auto-check passed
  • Mintlify

    Arize-ai/phoenix

    Build and maintain documentation sites with Mintlify. An agent skill from Arize-ai/phoenix.

    12k GitHub starsUsed in 7 repos~3.4k tokens
    Auto-check passed
  • Phoenix Frontend

    Arize-ai/phoenix

    Frontend development guidelines for the Phoenix AI observability platform.

    12k GitHub stars~709 tokensUpdated today
    Auto-check passed
  • Phoenix Graphql

    Arize-ai/phoenix

    Write efficient GraphQL queries against the Phoenix API. An agent skill from Arize-ai/phoenix.

    12k GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Phoenix Server

    Arize-ai/phoenix

    Backend development guide for the Phoenix AI observability platform (Strawberry GraphQL, SQLAlchemy async, FastAPI).

    12k GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Phoenix Storybook

    Arize-ai/phoenix

    Conventions for creating, modifying, and reviewing production-faithful Storybook stories in the Phoenix frontend (js/app/stories, js/app/.storybook).

    12k GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Questions about Phoenix GitHub

What does Phoenix GitHub do?

Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository. Phoenix GitHub is an agent skill from Arize-ai/phoenix. Manage GitHub issues, labels, project boards, sprint operations, and roadmap health for the Arize-ai/phoenix repository.

When should I use Phoenix GitHub?

Phoenix GitHub fits situations like: filing roadmap issues; applying labels; running sprint close-out and rollover; auditing board hygiene.

How do I install Phoenix GitHub in Claude Code?

Run `npx skills add Arize-ai/phoenix --skill phoenix-github -a claude-code`. Or copy the skill folder (.agents/skills/phoenix-github in Arize-ai/phoenix) into .claude/skills/phoenix-github in your project. Claude Code loads it when a task matches its description.

How do I install Phoenix GitHub in Codex?

Run `npx skills add Arize-ai/phoenix --skill phoenix-github -a codex`. Or copy the skill folder (.agents/skills/phoenix-github in Arize-ai/phoenix) into .agents/skills/phoenix-github in your project. Codex loads it when a task matches its description.

Can I use Phoenix GitHub in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Arize-ai/phoenix --skill phoenix-github -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/phoenix-github, .gemini/skills/phoenix-github, .github/skills/phoenix-github and .opencode/skills/phoenix-github in your project.

What does Phoenix GitHub need to run?

Going by SKILL.md and its folder, Phoenix GitHub needs Python and a shell for the scripts in its folder and the command-line tools its instructions call (gh). Our summary lists: Python 3; A Bash shell.

Does Phoenix GitHub access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Phoenix GitHub safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Phoenix GitHub use?

Phoenix GitHub is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Phoenix GitHub use?

About 6.5k tokens (SKILL.md is roughly 26k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Phoenix GitHub?

Skills that share tags, products or a category with Phoenix GitHub: Agents Operation (fazer-ai/agents, 118 stars), Phoenix LLM Observability (Orchestra-Research/AI-Research-SKILLs, 13k stars), Debug Issue With Datadog (langfuse/langfuse, 35k stars) and Managed Deep Agents (langchain-ai/langchain-skills, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Phoenix GitHub?

Arize-ai (a GitHub organization) maintains it in Arize-ai/phoenix, which has 11,738 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 7, 2026.

Source: Arize-ai/phoenix on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.