.cursor/skills/enrich-linear-ticket-description/SKILL.md
Prepares a Linear issue for another agent: interviews only when needed, updates the description with behavior-first context, and stops—never implements the ticket itself. Use when refining handoff for CODE-* issues, syncing product intent to Linear, or when the user says "interview me about this ticket" / "update Linear for an implementer".
npx skillsauth add Samuel-Harris/Bytes-and-Nibbles-Website enrich-linear-ticket-descriptionInstall 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.
Elicit intended behavior from the developer when needed, then write it into the Linear issue. The ticket text is the handoff contract for a different implementation agent.
| Use this skill | Skip this skill (use another workflow) | | -------------- | ---------------------------------------- | | You are preparing or tightening a Linear issue for a future implementer | The user wants you to implement now—use normal implementation, not this skill | | Ticket is vague, missing ACs, or needs behavior-first cleanup on Linear | No Linear issue ID and the user does not want Linear updated | | You need durable, shared spec on the issue for humans and agents | — |
Linear description MUST emphasize:
Do NOT put on Linear unless the developer explicitly asked for it:
…".If the developer volunteers implementation constraints, add a dedicated section (see template) so agents treat them as hard requirements, not inferred stack defaults.
In brownfield repos, you may use a short "Product / system context (read-only)" subsection: neutral facts like "Bytes are edited in the CMS and shown on the public site" only to disambiguate behavior. Do not turn that into a file-level implementation checklist on Linear.
Deeper technical mapping (paths, existing hooks) belongs in repo exploration by the implementer, not in the ticket—unless the developer explicitly required a specific location or approach.
Optional: reuse the ambiguity dimensions from .cursor/skills/deep-interview/SKILL.md (goal, constraints, success criteria, context) without requiring numeric scoring unless the user wants that rigor.
Whenever you refer to the issue to the user (kickoff, each interview round, confirmations, final handoff), include both:
CODE-2, LIN-123), andget_issue.Example: CODE-2 — Add finished/unfinished flag to CMS
The user may have only pasted an ID; the title is what ties the conversation to the right work. Do not rely on the ID alone in user-facing text.
Identify the issue
Confirm Linear issue id (e.g. CODE-2) and read title and description via Linear MCP (get_issue) when updating Linear. Read the MCP tool schema under the workspace mcps folder before calling tools. Retain the title for every user-visible mention of this issue (see User-visible issue identity).
Assess: interview needed?
Judge whether the issue already satisfies a behavior-first handoff (summary, rules/outcomes, scope/non-goals, testable ACs). If yes, tell the user the ticket looks ready for an implementer, skip steps 3–4, then either go to step 7 (no description change) or steps 5–7 if a small Linear polish is still warranted (e.g. user asked to normalize wording or strip speculative implementation). If no, continue.
Classify
Greenfield vs brownfield. If brownfield and the ticket touches existing product behavior, do a light codebase pass (search or explore subagent) so questions are informed—do not paste exploration results wholesale into Linear unless they are product facts (e.g. "there are two content types: bytes and nibbles").
Interview (only if step 2 said gaps remain)
Drive questions until behavior, scope, success/failure behavior, and explicit implementation constraints (if any) are clear enough that an agent could write tests from the ticket alone.
Draft the Linear body
Use the template below. Strip implementation fluff. Merge with any developer-mandated technical constraints in the optional section.
Update Linear (if there is something to change)
Call save_issue with id and new description (Markdown) only when the body should change. Do not change title unless the developer asked. Preserve existing attachments; note that link attachments are often append-only in MCP—do not rely on removing old links via the tool. If no edit is needed, do not call save_issue for the sake of it.
Confirm (and stop)
Reply with {id} — {title}, the issue URL, and a short summary: either what was added/changed for implementers or why the ticket was left unchanged. Do not start implementation.
Use headings similar to this (adapt labels to the work; omit empty sections).
## Summary
[One short paragraph: outcome-oriented, no stack.]
## Actors & surfaces
[Who interacts; which product areas (e.g. CMS vs public site).]
## Intended behavior
- **When** … **then** …
- **Rules** … (invariants, ordering, defaults)
- **Edge cases** … (empty states, legacy data, permission failures—behavior only)
## Out of scope
- …
## Acceptance criteria
- [ ] …
- [ ] …
## Explicit implementation constraints (only if mandated by developer)
[Libraries, algorithms, services, or file/area the developer required. If empty, omit this section entirely.]
## Notes for implementers
[Optional: non-prescriptive reminders—e.g. "Field name in production data is `isPublished`" if that is a **domain** name, not a path. Prefer domain language over repo structure.]
CODE-2) to the user without the title—avoid; they may not remember which ticket that is (see User-visible issue identity).| Avoid on Linear | Prefer on Linear |
| ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| "Add is_finished in v1_bytes.tsx and bytes.ts" | "Every block in the byte article tree has is_finished (default false), persisted with the document." |
| "Use onPreSave to validate" | "When the user tries to publish, block the save if any tracked unit is unfinished; show which units are unfinished." |
| "Use React state for toggles" | "Editors can mark each unit finished or not; default unfinished." |
If the user also wants a local transcript (Q&A + scores), run the deep-interview skill or append a short "## Interview transcript" section in a repo doc only when they ask—keep Linear itself behavior-first.
development
# Code Review Instructions ## Introduction You are a senior software engineer. ## Exploring the changes Run `git --no-pager diff origin/main...HEAD` to identify the differences between this branch and the main branch. Perform any other necessary git diffs to explore the changes made in this branch. ## Rules: - You absolutely must not edit any of the code. - Investigate any potential issue you find, to validate whether it actually is an issue. ## Code Review Checklist (internal) Work thro
testing
Iterative planning consensus loop. Orchestrates Planner, Architect, and Critic agents in rounds until the plan is approved or max iterations reached. Use for complex tasks that need a validated plan before implementation.
development
Audit a repository's Cursor configuration or evaluate whether a specific artefact (rule, skill, command, subagent) is correctly placed. Use when optimising the repo for Cursor, improving indexing, adding or assessing rules/skills, or deciding where information should live.
development
Generate a holistic product vision from Linear tickets. Pulls backlog, to-do, and in-progress tickets and synthesises them into a status-agnostic overview. Use when starting a new feature to understand the bigger picture, onboarding to the project, or when AI needs context on long-term goals. Supports refreshing existing masterplans with latest data.