agentleFS
OHOKAYYEAHOHOKAYYEAH/claude-skills/skills/ticket/SKILL.md

ticket

Skill1 starsChanged 34 days agoMITView on GitHub

File (or find) the tracker ticket for a unit of work: dedupe-search first, create only if nothing covers it, set sprint and lane, return the key ("already tracked as X" is success). Fire when work starts or is decided with no known ticket, or on "file a ticket for this". Never speculative or bulk. NOT /triage (decides which of several findings deserve a ticket) or closing tickets.

23 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use orchestrate, retro and 4 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • varun29ankuSSkill

    orchestrate

    This skill should be used when the user asks to 'orchestrate a task', 'break down work into parallel agents', 'coordinate subtasks', 'run agents in parallel', or mentions 'multi-agent'. Decomposes complex tasks into tracked subtasks, dispatches parallel subagents, and coordinates until completion.

    Also in 4 projects that use this

  • AWSSkill

    retro

    Conduct a retrospective on a coding session.

    Also in 3 projects that use this

  • AWSSkill

    ship

    Finalize dev work on an issue branch — update docs, push, and open a PR.

    Also in 3 projects that use this

  • GoogleSkill

    prototype

    Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.

    Also in 3 projects that use this

  • Microsoft AzureSkill

    verify

    End-to-end app testing pipeline for browser-based web apps on cloud browsers via Azure Playwright Workspaces: verify the live app, author tests for working flows, heal failing tests, then re-run with video and produce one consolidated report. Three phases (app verification, test authoring, test healing) plus a scoped final sanity run; each phase emits a sub-report. Use when asked to "verify my app", "make sure my app works and has good test coverage", "do a full QA pass", "add tests where I'm missing coverage", "fix failing tests and add new ones", "smoke test before deploy", "QA my deployment", or any combined verify-and-test ask. Requires Azure CLI (`az login`) and a Playwright Workspace resource ID — bootstraps configs on first invocation. Browser-based web apps with Playwright only — not for unit/API tests, native mobile/desktop, load/perf, or full accessibility audits.

    Also in 3 projects that use this

  • SentrySkill

    review

    Fixture review skill.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

7 rules. 0 are common, 4 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 20 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Never bulk-file — route a list through a triage pass first: If the input is several findings rather than one decided unit of work, a …

    line 28
  2. Distinctive:

    Read the cwd repo's CLAUDE.md, walking up to the repo root.

    line 40
  3. Distinctive:

    Search the tracker for anything already covering this scope before drafting anything.

    line 56
  4. Very specific:

    Keep the payload small — a wide Jira search overflows context fast.

    line 61
  5. Distinctive:

    Lane: Use a status the board actually maps to a visible column.

    line 110
  6. Very specific:

    Default lane is In Progress when the work starts now (the build-it-now case).

    line 116
  7. Distinctive:

    When chained, that key is the return value: the caller uses it to link the PR, comment progress, and close the ticket at the end of the …

    line 130

“Common” is measured: kept by at least 6 in 10 of the 20 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

A unit of work should exist on the board before it exists in prod. The failure this prevents is quiet: work that starts ad-hoc — a hotfix, a build off a Slack ask, a follow-up decided mid-session — never gets a ticket, so it's invisible to everyone who reads the board, and the close-out step that would have tracked it has nothing to close. The standing rule: a decided follow-up gets FILED in the session it is decided; a comment on some other ticket is durable but UNTRACKED.

The discipline is search before create. Most of the time the right outcome is "already tracked as X" — that's the skill succeeding, not failing.

0. Guard

  • Never file speculatively. A ticket is for work that is being done or has been decided — not for an idea, a maybe, or a caveat.
  • Never bulk-file — route a list through a triage pass first. If the input is several findings rather than one decided unit of work, a batch-triage step (/triage, if installed) owns the cut (fold / merge / file / drop) and hands back only the survivors. Filing the list yourself is the bypass that makes this guard unreachable: a composite skill calling /ticket once per finding never sees a list, so it never trips. Five tickets nobody will prioritize is noise that makes the board less trustworthy, not more.
  • check token → run steps 1–2 and report the verdict; create nothing.

1. Resolve the tracker (by cwd)

Read the cwd repo's CLAUDE.md, walking up to the repo root.

cwd conditionwhere the ticket goes
CLAUDE.md declares a Jira projectcreate via the Atlassian MCP. Resolve site + cloudId at runtime — never hardcode one: this skill is shared across projects and Atlassian sites, and a wrong cloudId 400s as "not explicitly granted". Call getAccessibleAtlassianResources, or read the cloudId from the project's own CLAUDE.md / memory
CLAUDE.md declares an in-repo tickets/ trackerwrite tickets/<PREFIX>-NNN-slug.md (next seq), commit + push per the repo's convention
a git repo with NO trackersurface that; offer to set one up (/setup-ticketing, if installed — one confirm), then file. Declined → say so and stop; don't invent a home
a non-repo / homeless cwdask where it belongs (e.g. a personal tickets repo, if you keep one); don't invent a home

Pick the right project when a site has several. A tracker split by area (e.g. by team or component) routes on what the work is: file it in the project that owns the code or behavior it changes. When it genuinely straddles two, file in the one whose board you actually work from and note the other in the body.

2. Dedupe search — the load-bearing step

Search the tracker for anything already covering this scope before drafting anything. Search on the distinctive nouns (feature name, error string, customer / order / account number, ticket ids mentioned in the ask), not a paraphrase of the summary you were about to write.

Keep the payload small — a wide Jira search overflows context fast. Narrow fields to key/summary/status (never *all), cap maxResults, and search the likely projects rather than the whole site.

Classify into exactly one:

  • Exists — a ticket already covers this. Report the key and stop; if its lane is wrong for what's about to happen, fix the lane (step 4) and nothing else.
  • Partial overlap → subsume — an older/narrower ticket is a subset of this work. Prefer widening the existing ticket over minting a new one. If the new scope is genuinely bigger, create it, then link the old one (createJiraIssueLink; createIssueLink on a v1 connection) and close it as superseded with a comment saying by what — never leave a silent duplicate.
  • None — proceed to create.

Say which verdict you reached and on what evidence. "I searched and found nothing" is a bounded claim; "there's no ticket for this" is an absolute one, and the absolute one is how duplicates get filed.

3. Create

  • Summary — what the work is, readable by someone who wasn't in the session. Not the session's name, not a ticket-speak template.
  • Body — whatever spec already exists is the body: a feature spec block, an investigation's findings + proposed fix, or the scope statement that prompted the ship. Don't re-derive it and don't pad it. Include acceptance criteria when the work has a testable outcome — QA reads acceptance criteria off the ticket, not the PR.
  • Type — the project's own convention (commonly Story for new capability, Bug for a regression or production incident, Task for cleanup).
  • Assignee — leave it unassigned unless the ask names someone. Assignees change, so an auto-assignee goes stale. Tools that answer "what's mine" must count unassigned tickets rather than filter on assignee alone.

Omit fields the project rejects rather than fighting them (some projects' priority field, for instance, refuses both object and string forms on create).

4. Make it visible — sprint + lane

A created ticket is not yet a tracked ticket. Two things hide one:

  • Sprint. On a scrum board, issue-create APIs do not auto-assign the active sprint, so a fresh ticket is absent from the board until the sprint field is set explicitly. Resolve the active sprint at runtime — query project = <KEY> AND sprint in openSprints() and read the sprint field off a result, taking the entry whose state is active. The field holds an issue's full sprint history, closed ones included, so filter on state rather than taking the first element; setting a closed id hides the ticket exactly like setting none. Sprint ids are per-board — two boards running at once have two different ids. Never carry an id over from memory or a previous run.
  • Lane. Use a status the board actually maps to a visible column. An exotic or unmapped status makes the ticket vanish from view while looking correct in the API — check the project's own conventions before reaching for one. Read the transition id from listJiraIssueTransitions (getTransitionsForJiraIssue on a v1 connection) rather than hardcoding it; ids differ per workflow.

Default lane is In Progress when the work starts now (the build-it-now case). With the file token — a follow-up, a deferred fix, something decided but not being built today — leave it in the project's backlog/To-Do lane instead. Filing tomorrow's work as In Progress lies about what's actually being worked.

5. Report (glanceable)

One line, then only what's needed:

🎫 <TICKET-ID> — <created | already tracked | widened | superseded N> · <lane> · <sprint name>

Then the URL, and — if you subsumed or triaged anything — one line on what you folded in or deliberately left as a comment. Nothing else.

When chained, that key is the return value: the caller uses it to link the PR, comment progress, and close the ticket at the end of the flow.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.