skills/create-ticket/SKILL.md
Create a ticket in YouTrack or GitHub based on project config. Use when the user asks to create a ticket, new issue, or add a task, or provides a structured spec. Can invoke product-analyst agent to structure raw ideas before submission. Do NOT use for unstructured need expression (use express-need skill instead).
npx skillsauth add nicolas-codemate/claudecodeconfig create-ticketInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill creates a new ticket/issue in the project's configured tracking system (YouTrack or GitHub). It detects whether the user provides a raw idea or a structured spec, and adapts accordingly.
Before anything else, determine what the user gave us:
| Input | Detection | Action |
|-------|-----------|--------|
| Raw idea (free text, no structure) | No headings, no FR/AC, informal language | → Step 0b: Product Analysis |
| Structured spec (from /express-need) | Has ## Functional Requirements, ## Acceptance Criteria | → Step 1: Detect Source |
| Requirements file path | Argument ends in .md, file exists | → Step 1: Detect Source (read file) |
| Just --type + short title | Short text + flag, clearly just a title | → Step 1: Detect Source (wizard for description) |
The user gave a raw idea. Propose to structure it via the product-analyst agent:
AskUserQuestion:
questions:
- question: "Je détecte un besoin brut. Voulez-vous le structurer avant de créer le ticket ?"
header: "Analyse produit"
multiSelect: false
options:
- label: "Oui, analyser avec l'agent produit"
description: "Scout + interview + synthèse via product-analyst (détecte les concerns architecturales)"
- label: "Non, créer directement"
description: "Utiliser le texte tel quel comme description"
If "Non": Use the raw text as-is as the description. Continue to Step 1.
If "Oui": run the scout/interview/synthesis flow below, then use the final document as the ticket description and continue to Step 1.
Launch the product-analyst agent in scout mode:
Agent:
subagent_type: product-analyst
model: sonnet
description: "Scout raw idea: {short summary}"
prompt: |
SCOUT PHASE — no answers provided yet.
Raw need: {raw text}
Your job in this invocation:
1. Lightweight codebase scan
2. Detect cross-cutting concerns triggered by the need
3. For each concern, check the framework via Context7 for native solutions
4. Produce EITHER a `## Clarification Needed` block (1-5 targeted questions)
OR the full synthesis document if no concerns detected.
Discipline: only ask questions that would change an architectural decision.
Store output as scout_output.
scout_output contains ## Clarification Needed: proceed to Step 0b.2 (INTERVIEW)scout_output contains ## Functional Requirements: skip to Step 0b.4, set structured_document = scout_outputParse the ## Clarification Needed section. For each question (Q1, Q2, ...), present it via AskUserQuestion using the scout-provided header, context, question text, and options. Always append an "Autre (préciser)" option for free-form answers.
Collect answers into a scout_answers block:
## Scout Answers
- Q1 ({question title}): {answer}
- Q2 ({question title}): {answer}
Relaunch product-analyst in synthesis mode with the raw need AND the scout answers:
Agent:
subagent_type: product-analyst
model: sonnet
description: "Synthesize raw idea: {short summary}"
prompt: |
SYNTHESIS PHASE — scout answers provided below.
Raw need: {raw text}
{scout_answers}
Produce the full structured document. Bake scout answers into Architectural
Constraints where applicable. Every constraint must have a rationale tied to
a product commitment. Do NOT return Clarification Needed.
Store the agent's output as structured_document.
Use the structured_document as the ticket description. Extract the # Title as the default ticket title. Continue to Step 1.
Read .claude/ticket-config.json to determine the target system.
ticket-config.json → Determine Source
├── --source flag provided → Use flag value (youtrack | github)
├── default_source == "youtrack" → YouTrack
├── default_source == "github" → GitHub
├── default_source == "auto"
│ ├── Only youtrack.project_prefix set → YouTrack
│ ├── Only github.repo set → GitHub
│ └── Both configured → Ask user via AskUserQuestion
└── No config found → Ask user via AskUserQuestion
AskUserQuestion:
question: "Où souhaitez-vous créer le ticket ?"
header: "Destination"
options:
- label: "YouTrack"
description: "Créer dans le projet YouTrack"
- label: "GitHub"
description: "Créer comme issue GitHub"
If .claude/ticket-config.json does not exist, display:
# Configuration manquante
Le fichier `.claude/ticket-config.json` est introuvable.
**Options** :
1. Lancer `/resolve --init` pour configurer le projet
2. Utiliser `--source youtrack` ou `--source github` pour forcer la destination
Three modes, by priority:
If the user passed a title or description inline:
--type is provided, use it; otherwise default to taskIf a file path is passed (typically from /express-need):
taskIf no arguments provided, collect via AskUserQuestion:
Step 1 - Title (required):
AskUserQuestion:
question: "Quel est le titre du ticket ?"
header: "Titre"
Step 2 - Type (default: task):
AskUserQuestion:
question: "Quel type de ticket ?"
header: "Type"
options:
- label: "Task"
description: "Tâche technique ou fonctionnelle"
- label: "Bug"
description: "Rapport de bug"
- label: "Feature"
description: "Nouvelle fonctionnalité"
Step 3 - Description (required):
AskUserQuestion:
question: "Décrivez le ticket (contexte, objectif, critères d'acceptation)"
header: "Description"
Step 4 - Priority (optional):
AskUserQuestion:
question: "Quelle priorité ?"
header: "Priorité"
options:
- label: "Pas de priorité"
description: "Ne pas définir de priorité"
- label: "Critical"
description: "Bloquant, à traiter immédiatement"
- label: "Major"
description: "Important, à traiter rapidement"
- label: "Normal"
description: "Priorité standard"
- label: "Minor"
description: "Peut attendre"
Step 5 - Labels/tags (optional):
AskUserQuestion:
question: "Labels ou tags à ajouter ? (séparés par des virgules, ou 'aucun')"
header: "Labels"
Step 6 - Milestone/sprint (optional):
AskUserQuestion:
question: "Milestone ou sprint ? (laisser vide pour aucun)"
header: "Milestone"
Display a formatted preview of the ticket before submission:
# Aperçu du ticket
| Champ | Valeur |
|-------------|-----------------------------|
| Destination | {YouTrack / GitHub} |
| Projet | {project prefix or repo} |
| Type | {bug / feature / task} |
| Titre | {title} |
| Priorité | {priority or "Non définie"} |
| Labels | {labels or "Aucun"} |
| Milestone | {milestone or "Aucun"} |
## Description
{description content}
---
Then ask for confirmation:
AskUserQuestion:
question: "Confirmer la création de ce ticket ?"
header: "Confirmation"
options:
- label: "Créer"
description: "Soumettre le ticket"
- label: "Modifier"
description: "Revenir en arrière pour corriger"
- label: "Annuler"
description: "Abandonner la création"
Determine project from ticket-config.json field youtrack.project_prefix
mcp__youtrack__find_projects or mcp__youtrack__get_projects to list available projects and ask user to pick oneCall mcp__youtrack__create_issue:
project: project prefix (e.g., "PROJ")summary: ticket titledescription: ticket description (markdown)Capture the returned issue ID and URL
Determine repository from ticket-config.json field github.repo
git remote get-url originBuild label list:
bug -> bug, feature -> enhancement, task -> (no label or custom)Run:
gh issue create \
--title "{title}" \
--body "{description}" \
--label "{labels}" \
--repo "{owner/repo}"
--milestone "{milestone}" if specifiedgh auth login"Display the result:
# Ticket créé avec succès
| Champ | Valeur |
|--------|---------------|
| ID | {ticket-id} |
| URL | {ticket-url} |
| Titre | {title} |
| Source | {YouTrack / GitHub} |
---
## Prochaine étape
Lancer `/resolve {ticket-id}` pour commencer l'implémentation ?
development
Method to diagnose and raise the Lighthouse performance score of a public page (landing, marketing, home). Use when asked to improve Lighthouse/PageSpeed scores, when auditing the first uncached paint of a public page, or when a landing embedded in a SPA must reach a top score. Do NOT use for in-app screen performance (data loading, rendering). For a brand-new landing, the first recommendation is static HTML with no framework runtime — most of this skill exists for when that is not an option.
tools
Audits a project's Claude Code setup against real usage — mines the project's conversations (worktrees included), confronts the project's skills/agents/CLAUDE.md with best practices, and proposes adjustments or new skills/agents/rules. Use when the user asks to audit the project config, analyze project conversations, or find automation opportunities for the current project. Do NOT use for the global ~/.claude configuration (use /audit-config instead).
development
Coaching workflow orchestrator. Guides the developer through implementation without writing code.
development
Disciplined methodology for code architecture refactoring. Use when the user asks to refactor architecture, decouple code, restructure a family of classes, redesign an interface, or rename/reorganize a set of related components. Forces a big-picture analysis before any code is written. Do NOT use for simple bug fixes, feature additions, or single-file refactoring.