--- name: phoenix-skill-development description: Develop, refine, and maintain skills in the skills/ directory. Use when creating a new skill, updating an existing skill, adding rule files, or improving skill quality and consistency. license: Apache-2.0 metadata: author: oss@arize.com version: "1.0.0" internal: true --- # Skill Development Guide for creating and refining skills in the `skills/` directory of this repository. Skills are packaged instructions that teach AI agents how to work with Phoenix features. ## Directory Structure ``` skills/ {skill-name}/ # kebab-case, prefixed with "phoenix-" for Phoenix features SKILL.md # Required: skill definition and index README.md # Optional: human-oriented overview rules/ # Optional: detailed rule files {prefix}-{topic}.md {prefix}-{topic}-{lang}.md ``` ### Existing Skills | Skill | Purpose | Has Rules | | ----- | ------- | --------- | | `phoenix-tracing` | OpenInference instrumentation and span types | Yes (31 files) | | `phoenix-evals` | Evaluator development and validation | Yes (33 files) | | `phoenix-cli` | CLI debugging and analysis | No (single SKILL.md) | ## Creating a New Skill ### 1. Plan the Scope Determine whether the skill needs rule files: - **Single SKILL.md** (like `phoenix-cli`): Self-contained topics, command references, single-workflow tools - **SKILL.md + rules/** (like `phoenix-tracing`, `phoenix-evals`): Multi-faceted topics with language-specific guides, multiple workflows, or extensive reference material ### 2. Create SKILL.md Every skill requires a `SKILL.md` with YAML frontmatter: ```yaml --- name: {skill-name} description: {What it does. When to use it. Include trigger phrases.} license: Apache-2.0 metadata: author: oss@arize.com version: "1.0.0" languages: Python, TypeScript # omit if language-agnostic --- ``` **Frontmatter rules:** - `name`: kebab-case, match directory name - `description`: Third person, specific, includes trigger terms - `license`: Always `Apache-2.0` - `metadata.author`: Use `oss@arize.com` for Phoenix skills - `metadata.version`: Semver string (e.g., `"1.0.0"`) - `metadata.languages`: Only include if skill has language-specific content - `metadata.internal`: Set to `true` for skills not intended for public listing (e.g., skills in `.agents/skills/`). Omit for public skills in `skills/`. ### 3. Structure the SKILL.md Body SKILL.md serves as the **index and entry point**. The agent reads this first and navigates to rule files as needed. **Required sections:** | Section | Purpose | | ------- | ------- | | Title (`# Name`) | Skill name with brief description | | Quick Reference | Table mapping tasks to rule files | | Rule Categories | Table of prefix patterns | **Optional sections (include as relevant):** | Section | Purpose | | ------- | ------- | | When to Apply | Trigger scenarios | | Workflows | Step-by-step paths through rules | | Key Principles | Core decision-making guidance | | Common Attributes | Reference tables | | How to Use | Navigation guidance | | References | External docs and API links | ### 4. Organize Rule Files #### Naming Conventions **Pattern:** `{prefix}-{topic}[-{language}].md` **Prefix categories (reuse these across skills):** | Prefix | Purpose | Example | | ------ | ------- | ------- | | `setup-*` | Installation, configuration | `setup-python.md` | | `fundamentals-*` | Core concepts, reference | `fundamentals-overview.md` | | `instrumentation-*` | Auto/manual setup | `instrumentation-auto-python.md` | | `span-*` | Span type specifications | `span-llm.md` | | `evaluators-*` | Evaluator types, patterns | `evaluators-code-python.md` | | `experiments-*` | Datasets, running experiments | `experiments-running-typescript.md` | | `production-*` | Deployment, monitoring | `production-python.md` | | `annotations-*` | Feedback, scoring | `annotations-overview.md` | | `validation-*` | Calibration, testing | `validation-calibration-python.md` | **Language suffixes:** - `-python.md` — Python-specific content - `-typescript.md` — TypeScript-specific content - No suffix — Language-agnostic or overview (e.g., `span-llm.md`, `evaluators-overview.md`) **Overview files:** Use `-overview.md` suffix for conceptual introductions (e.g., `fundamentals-overview.md`, `production-overview.md`). #### Flat Structure All rule files go directly in `rules/` — no subdirectories. Use prefixes for organization, not folders. ``` rules/ setup-python.md # Good: flat with prefix setup-typescript.md span-llm.md # Good: no language suffix (language-agnostic) evaluators-code-python.md # Good: prefix-topic-language ``` ### 5. Write Rule Files #### Standard Structure ```markdown # Title Brief description of what this rule covers. ## Metadata (optional) | Field | Value | | ----- | ----- | | Priority | 1 (Critical) | | Setup Time | 5 minutes | ## Quick Start / Basic Pattern Minimal working example. ## Detailed Sections Expanded content with examples. ## See Also - `related-rule.md` — Brief description - [External docs](https://docs.arize.com/phoenix) ``` #### Code Examples - Always use fenced blocks with language tags: `python`, `typescript`, `bash`, `json` - Show **working, copy-pasteable** examples - Include both minimal and production-ready patterns when relevant #### Cross-References - Reference other rule files by filename: `setup-python.md`, `span-llm.md` - Reference external docs with full URLs - Keep references one level deep (SKILL.md → rule file, not rule → rule → rule) ## Refining Existing Skills ### Adding a Rule File 1. Choose the correct prefix from the table above (or establish a new one) 2. Follow the naming convention: `{prefix}-{topic}[-{language}].md` 3. Add an entry in `SKILL.md` under Quick Reference and Rule Categories 4. Cross-reference related rules in the new file's "See Also" section ### Updating SKILL.md When adding content to SKILL.md, keep it as an **index** — move detailed content to rule files. SKILL.md should stay under 500 lines. ### Improving Consistency Common issues to fix when refining: | Issue | Fix | | ----- | --- | | Missing metadata table | Add Priority, Setup Time if applicable | | Inconsistent headings | Standardize to `## Quick Start`, `## See Also` | | Inline code dumps | Extract to rule files, link from SKILL.md | | Missing cross-references | Add `## See Also` with related rules | | Vague descriptions | Make frontmatter description specific with trigger terms | ## Quality Checklist ### SKILL.md - [ ] Frontmatter has all required fields (`name`, `description`, `license`, `metadata`) - [ ] `metadata.internal: true` is set for skills in `.agents/skills/`; omitted for skills in `skills/` - [ ] Description is third person, specific, includes trigger terms - [ ] Quick Reference table maps tasks to rule files - [ ] Rule Categories table lists all prefixes used - [ ] Under 500 lines - [ ] No detailed content that belongs in rule files ### Rule Files - [ ] Follow `{prefix}-{topic}[-{language}].md` naming - [ ] Have a clear `# Title` and brief description - [ ] Include working code examples with language tags - [ ] Cross-reference related rules in `## See Also` - [ ] Use consistent heading structure ### Overall Skill - [ ] Flat `rules/` directory (no subdirectories) - [ ] Consistent terminology throughout all files - [ ] Language-specific content split into `-python.md` / `-typescript.md` files - [ ] Language-agnostic content has no language suffix - [ ] No time-sensitive information (no dates, version caveats) ## Anti-Patterns **Putting too much in SKILL.md.** SKILL.md is an index. If a section exceeds ~30 lines of content, extract it to a rule file. **Deep reference chains.** Rule files should not require reading other rule files to be useful. Each rule should be self-contained enough to act on independently. **Generic rule names.** Use `evaluators-code-python.md` not `code-eval.md`. Prefixes enable discovery via `ls rules/{prefix}-*`. **Mixing languages in one file.** Split into `-python.md` and `-typescript.md` unless the content is truly language-agnostic. **Forgetting SKILL.md updates.** Every new rule file must be reflected in the SKILL.md Quick Reference and Rule Categories tables. ## Workflow Summary ``` 1. Plan scope → single SKILL.md or SKILL.md + rules/? 2. Create directory: skills/{skill-name}/ 3. Write SKILL.md with frontmatter and index 4. Create rules/ directory (if needed) 5. Write rule files following naming conventions 6. Update SKILL.md index to reference all rules 7. Run quality checklist ```