CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

phoenix-pr-description

Writes and maintains the body of a pull request opened by a coding agent on Arize-ai/phoenix, including a fixed "How this PR was made" section that reports steering, abandoned approaches, and verification gaps so a reviewer can pick a review depth. Use when opening a PR, editing a PR body, pushing more commits to an agent-authored PR, or when the user asks for a PR description, PR summary, or provenance section.

76

Quality

95%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Phoenix PR Description

A PR body lets a reviewer answer three questions at a glance: do I need to review this, how long will review and testing take, and should I hand it to my agent. Write only what serves those three. The author can always extend the body; a body nobody reads cannot be shortened after the fact.

Default to short. A one-line What plus the provenance table is a complete body. Add a section only when a reviewer needs it to answer one of the three questions.

Template

Use these H2 headings in this order. Omit a heading when it would be empty. Never add others.

resolves #<issue>            <- only when an issue exists

## What
<one sentence: the change, ticket, dependency such as "Stacked on #16660">
<media: one video or screenshot; required when the PR changes rendered UI>
<optional: up to 4 bullets, one sentence each, behavior not files>

## Try it                    <- only when a reviewer can exercise the change in under a minute
1. <step ending in what the reviewer should observe>

## How this PR was made
| Agent | User turns | Steering turns | Questions asked | Sessions |
|---|---|---|---|---|
| <tool (model)> | n | n | n | n |

**Starting point:** <the ask in a few words>; <bare / with constraints / with spec>
**Steering:** <categories only, from: scope, approach, correctness, style> or none
**Abandoned:** <approach, reason> or none
**Verified:** <what ran>. Not verified: <gap> or none
**Look hardest at:** <riskiest hunks>

<sub>Stats as of <short sha>, counted from <method>.</sub>

Limits, all hard:

  • What: one sentence, then at most 4 bullets of one sentence each. No Why section; fold the reason into the sentence only when it is not obvious from the ticket.
  • Bold only on-screen control names. Code font for identifiers. No nested bullets, no file lists, no "Summary" or "Changes" headings, no closing paragraph.
  • Each provenance line is one line of at most 12 words. Steering names categories, not details.
  • Media: one item, bold caption above it stating what to notice. Required when the PR changes what a user sees (components, styles, layout, motion); capture it with the phoenix-pr-screenshot skill. When it cannot be captured, say why in What instead.
  • Total body above the provenance section fits on one screen without scrolling.

Reference: Arize-ai/phoenix#16662 is the upper bound for a large change. Most PRs should be far shorter. See examples.md for a large, a small, and a non-UI body.

Provenance definitions

FieldCount
AgentTool and model, as the user names them
User turnsMessages the human typed. Exclude approvals, tool results, system messages
Steering turnsUser turns that changed scope or approach or corrected output. Exclude "continue", answers to the agent's questions, approvals. Borderline counts
Questions askedTimes the agent stopped to ask before acting
SessionsDistinct conversations, counting resumes and compactions separately

Describe the work, not the person. Paraphrase the ask; never quote it. Write "none" rather than omitting a line. Never grade the PR ("low risk", "thorough"). A one-prompt, zero-steering PR is a normal outcome and is reported as such.

Counting

Count from a record, not memory. One method is given; invent the equivalent for your own tool.

Claude Code writes each session to ~/.claude/projects/<slug>/<session>.jsonl, where the slug is the working directory with / replaced by -. Human messages are user entries whose message.content is a string:

f=$(ls -t ~/.claude/projects/$(pwd | sed 's#/#-#g')/*.jsonl | head -1)
jq -r 'select(.type=="user" and (.message.content|type)=="string") | .message.content' "$f"

Pipe through wc -l for user turns; read the lines to classify steering. Sum across files when several sessions contributed. With no record, or after a compaction, write approx. after each number and name the method in the stamp as "recall".

Keeping it current

Every edit to the body, including after review rounds, recounts the table and rewrites the stamp with the commit the stats cover. Reviewer-driven turns are user turns and usually steering turns.

Before posting

  • Body above the provenance section fits on one screen
  • What is one sentence plus at most 4 one-sentence bullets
  • A UI change carries media, or What says why it has none
  • Every provenance line is present, one line, 12 words or fewer
  • Counts came from a record, or every number carries approx.
  • Stamp names the current head commit
Repository

Arize-ai/phoenix

Path

.agents/skills/phoenix-pr-description/SKILL.md

Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.