Agent skill

Create Ticket

by willowtreeapps in willowtreeapps/vocable-android

A skill your agent uses when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket.

MITAuto-check passedMobile

Install Create Ticket

skills CLI
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install willowtreeapps/vocable-android create-ticket --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/create-ticket .claude/skills/create-ticket && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
create-ticket
GitHub stars
127
Token cost
~2.4k tokens
SKILL.md length
870 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket.

  • Works in 3 steps: The problem/need — not the title… → Parent issue, if this is part of a… → Design/doc links (Figma, Drive, etc.),…
  • Starting new work that needs a GitHub issue in this repo
  • SKILL.md covers Before drafting, Template — follow exactly, no…, Scope-creep guard — check… and Creating the issue, plus 3 more sections
  • Calls gh and git

What it does

Create Ticket is an agent skill from willowtreeapps/vocable-android. Use when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket. Enforces a tight, single-unit-of-work template so tickets don't grow into sprawling, hard-to-follow documents (see

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile. It works with GitHub and Android. The licence is MIT.

When your agent uses it

  • Starting new work that needs a GitHub issue in this repo
  • Asked to create/write/file a ticket

Example prompts

  • “/create-ticket”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. The problem/need — not the title restated, the actual "why."
  2. Parent issue, if this is part of a larger ticket (Part of #N). Omit if standalone.
  3. Design/doc links (Figma, Drive, etc.), if any — these get referenced as bare pointers, never pasted/embedded as content.

What it can do on your machine

Read from SKILL.md and the folder at commit b7ced56. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Create Ticket loads about 2.4k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 870 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from willowtreeapps/vocable-android at commit b7ced56, republished under its MIT licence (© willowtreeapps). 870 words, ~2,358 tokens.

Download SKILL.mdSave it as .claude/skills/create-ticket/SKILL.md (or your agent's skills folder).
name
create-ticket
description
Use when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket. Enforces a tight, single-unit-of-work template so tickets don't grow into sprawling, hard-to-follow documents (see

create-ticket

This repo's existing large tickets (#613, #617, #622) accumulated day-by-day plans, duplicate "resolved/unresolved decisions" tables, and inline strikethrough history until they became hard for anyone — human or Claude — to actually use. This skill exists to stop that pattern from recurring: every new ticket gets scoped to one unit of work and written in one fixed shape.

Before drafting

Gather (ask the user via AskUserQuestion if not already clear from the conversation):

  1. The problem/need — not the title restated, the actual "why."
  2. Parent issue, if this is part of a larger ticket (Part of #N). Omit if standalone.
  3. Design/doc links (Figma, Drive, etc.), if any — these get referenced as bare pointers, never pasted/embedded as content.

Template — follow exactly, no extra sections

Part of #<parent>            <!-- omit this line entirely if standalone -->

## Why
2-4 sentences. The problem or need driving this ticket, not a restatement of the title.

## Scope
One sentence naming the single unit of work this issue covers.

## Acceptance Criteria
- [ ] Short, independently-verifiable checklist items

## Out of Scope
- Adjacent things this issue deliberately does NOT cover, with a pointer to where they ARE tracked (another issue number, or "not yet tracked")

## Links
- Design/doc links as bare URLs only — no embedded tables, screenshots-as-text, or copy-pasted doc content

Scope-creep guard — check before creating

If the drafted issue would need more than ~8 acceptance criteria, or the "Why" section is actually describing more than one unrelated concern, stop before creating it. Say so explicitly and propose splitting into multiple issues instead (one per unit of work, each Part of #<same parent> if applicable). This check is the actual point of this skill — it's the direct fix for how #613 and #617 grew unmanageable. Don't skip it because splitting feels like extra work up front; it's cheaper than the alternative.

Do not add: day-by-day plans, "resolved decisions" / "decisions still needed" tables, embedded design mockup descriptions, or strikethrough-tracked history. If a decision needs to change after the ticket is created, edit the Acceptance Criteria directly or leave a comment — don't accumulate a decision log inside the issue body.

Creating the issue

Once the body is drafted and passes the scope-creep guard, create it with gh issue create -R willowtreeapps/vocable-android --title "<title>" --body "<drafted body>".

Creating and linking the branch

Sub-issue tickets whose PR will target a parent integration branch (e.g. feature/voice-selection — the normal case per CLAUDE.md's sub-issue convention) must use createLinkedBranch to show up under the issue's "Development" section. Closes #N does not link or auto-close when the PR's base isn't the repo's default branch (closingIssuesReferences comes back empty, willCloseTarget: false) — confirmed on #653/#654. There is also no mutation to attach an already-existing branch/PR after the fact — createLinkedBranch only creates a new ref, it can't adopt one. So call it first, before pushing any branch with that name; if a plain branch is pushed first, the only fix is deleting and recreating both the branch and PR.

  1. Get the issue's node ID (same query as "Adding it to the board" step 1), the repository's node ID, and the base commit to branch from (the tip of the parent's integration branch, e.g. feature/voice-selection, or main for a standalone issue with no parent):
    bash
    git rev-parse origin/<base-branch>
    gh api repos/willowtreeapps/vocable-android --jq '.node_id'
  2. Create + link the branch in one call (name follows the usual feature/<issue-number>/<short-description> convention) — needs write access to the repo (fails with FORBIDDEN: does not have the correct permissions if missing, a distinct failure from the project-scope INSUFFICIENT_SCOPES case below):
    bash
    gh api graphql -f query='
    mutation($issueId: ID!, $oid: GitObjectID!, $name: String!, $repositoryId: ID!) {
      createLinkedBranch(input: {issueId: $issueId, oid: $oid, name: $name, repositoryId: $repositoryId}) {
        linkedBranch { ref { name } }
      }
    }' -f issueId="<issue node id>" -f oid="<base commit SHA>" \
       -f name="feature/<issue-number>/<short-description>" -f repositoryId="<repo node id>"
  3. Fetch and check out the branch it just created, instead of creating a new local one:
    bash
    git fetch origin feature/<issue-number>/<short-description>
    git checkout feature/<issue-number>/<short-description>

Standalone issues targeting main don't have this problem — Closes #N works normally there — but every sub-issue in this repo's workflow targets a parent branch, so treat createLinkedBranch-first as the default.

Show full SKILL.md (472 more words)Show less

Adding it to the board

Every issue this skill creates also gets added to Project #50 with Status "Pre Backlog" — an issue not on the board is invisible to triage/prioritization.

The gh token needs the project scope for this (not just read:project) — if a mutation below fails with INSUFFICIENT_SCOPES, run gh auth refresh -s project (an interactive device-flow approval) before retrying.

  1. Get the issue's node ID (from the gh issue create output URL, or query it):
    bash
    gh api graphql -f query='
    query { repository(owner: "willowtreeapps", name: "vocable-android") {
      issue(number: <N>) { id }
    } }'
  2. Add it to the project (project node ID PVT_kwDOAAiCcM4AiZ3r — Project #50 on willowtreeapps):
    bash
    gh api graphql -f query='
    mutation($projectId: ID!, $contentId: ID!) {
      addProjectV2ItemById(input: {projectId: $projectId, contentId: $contentId}) {
        item { id }
      }
    }' -f projectId="PVT_kwDOAAiCcM4AiZ3r" -f contentId="<issue node id>"
    Note the returned item.id — that's the project item ID, different from the issue's node ID, and what the next steps need.
  3. Look up the Status field ID and "Pre Backlog" option ID — derive these live rather than hardcoding them; they're GitHub GraphQL object IDs (not secrets), but they're project config that can be renumbered if the board's fields/options ever change:
    bash
    gh api graphql -f query='
    query { organization(login: "willowtreeapps") { projectV2(number: 50) {
      fields(first: 20) { nodes {
        ... on ProjectV2SingleSelectField { id name options { id name } }
      } }
    } } }' --jq '.data.organization.projectV2.fields.nodes[] | select(.name=="Status")'
    Take the field's id and the id of the "Pre Backlog" option from the output.
  4. Set Status to "Pre Backlog":
    bash
    gh api graphql -f query='
    mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {
      updateProjectV2ItemFieldValue(input: {
        projectId: $projectId, itemId: $itemId, fieldId: $fieldId,
        value: { singleSelectOptionId: $optionId }
      }) { projectV2Item { id } }
    }' -f projectId="PVT_kwDOAAiCcM4AiZ3r" -f itemId="<project item id from step 2>" \
       -f fieldId="<field id from step 3>" -f optionId="<option id from step 3>"
  5. Move it to the top of its column — new tickets should sort first in the board's grouped-by-Status view. Omitting afterId on updateProjectV2ItemPosition moves an item to the front of the whole project-wide list, which also puts it first within its own Status group, without disturbing other items' relative order.
    bash
    gh api graphql -f query='
    mutation($projectId: ID!, $itemId: ID!) {
      updateProjectV2ItemPosition(input: {projectId: $projectId, itemId: $itemId}) {
        clientMutationId
      }
    }' -f projectId="PVT_kwDOAAiCcM4AiZ3r" -f itemId="<project item id from step 2>"

Linking sub-issues to their parent

If the ticket has a Part of #<parent> line, also link it via GitHub's native sub-issue relationship (not just the text reference) — this is what populates the parent issue's "Sub-issues progress" and this issue's "Parent issue" fields on the project board automatically; there's no separate project-field mutation for it.

bash
gh api graphql -f query='
mutation($issueId: ID!, $subIssueId: ID!) {
  addSubIssue(input: {issueId: $issueId, subIssueId: $subIssueId}) {
    issue { number }
    subIssue { number }
  }
}' -f issueId="<parent issue node id>" -f subIssueId="<new issue node id>"

Get each node ID the same way as step 1 above (repository(...).issue(number: N).id). Skip this step entirely for standalone issues (no Part of #<parent> line).

After creating and linking, this is the point where the "Starting new work" workflow in CLAUDE.md continues: branch as feature/<issue-number>/<short-description>, PR against the right integration branch using .github/PULL_REQUEST_TEMPLATE.md, and a Documentation/work-log/<issue-number>-<slug>.md entry once the work is done.

© willowtreeapps, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/create-ticket of willowtreeapps/vocable-android.

Open the folder on GitHubat commit b7ced56

Compare with similar skills

Create Ticket next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Create Ticket compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Ticket this skillwillowtreeapps/vocable-android127—~2.4kAutomated safety check: PassMIT
Launch On Devicezly2006/zhihu-plus-plus4.2k—~3.1kAutomated safety check: PassCC-BY-NC-4.0
Guided PR Fixupalexvanyo/composelife267—~1kAutomated safety check: PassApache-2.0
UI Devwidget RoundafkT/DevUtils1.6k—~880Automated safety check: PassApache-2.0
Web To Mobilesuntay44/web-to-mobile-magic-plugin107—~781Automated safety check: PassMIT
Capturing Preview Screenshots In CIskydoves/android-testing-skills333—~4.5kAutomated safety check: NotesApache-2.0

Similar skills

  • Launch On Device

    zly2006/zhihu-plus-plus

    Build, install, and launch the Zhihu++ Android app on a connected device using ADB.

    4.2k GitHub stars~3.1k tokensUpdated yesterday
    MobileAuto-check passed
  • Guided PR Fixup

    alexvanyo/composelife

    Performs a guided fixup of a given GitHub PR. An agent skill from alexvanyo/composelife.

    267 GitHub stars~1k tokensUpdated today
    MobileAuto-check passed
  • UI Devwidget Round

    afkT/DevUtils

    在需要圆角矩形纯色背景、描边边框时,优先用 DevWidget(io.github.afkt:DevWidgetX)的 dev.widget.ui.round 包替代 shape / layer-list drawable。流程与核心坑在 SKILL,Round 系列 View、R.styleable.DevWidget 中 app:dev 属性及源码对照见…

    1.6k GitHub stars~880 tokensUpdated 1 mo ago
    MobileAuto-check passed
  • Web To Mobile

    suntay44/web-to-mobile-magic-plugin

    Orchestrate website or web app conversion into a mobile app.

    107 GitHub stars~781 tokensUpdated 24 days ago
    MobileAuto-check passed
  • Capturing Preview Screenshots In CI

    skydoves/android-testing-skills

    A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.

    333 GitHub stars~4.5k tokensUpdated 4 mo ago
    MobileAuto-check: notes
  • Release App

    K9i-0/ccpocket

    ccpocketアプリのバージョン更新と、指定プラットフォーム向けリリースを行う. An agent skill from K9i-0/ccpocket.

    1.1k GitHub stars~1.1k tokensUpdated 5 days ago
    MobileAuto-check passed

Works with

Categories

Questions about Create Ticket

What does Create Ticket do?

A skill your agent uses when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket. Create Ticket is an agent skill from willowtreeapps/vocable-android. Use when starting new work that needs a GitHub issue in this repo, or when asked to create/write/file a ticket.

When should I use Create Ticket?

Create Ticket fits situations like: starting new work that needs a GitHub issue in this repo; asked to create/write/file a ticket.

How do I install Create Ticket in Claude Code?

Run `npx skills add willowtreeapps/vocable-android --skill create-ticket -a claude-code`. Or copy the skill folder (.claude/skills/create-ticket in willowtreeapps/vocable-android) into .claude/skills/create-ticket in your project. Claude Code loads it when a task matches its description.

How do I install Create Ticket in Codex?

Run `npx skills add willowtreeapps/vocable-android --skill create-ticket -a codex`. Or copy the skill folder (.claude/skills/create-ticket in willowtreeapps/vocable-android) into .agents/skills/create-ticket in your project. Codex loads it when a task matches its description.

Can I use Create Ticket in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add willowtreeapps/vocable-android --skill create-ticket -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-ticket, .gemini/skills/create-ticket, .github/skills/create-ticket and .opencode/skills/create-ticket in your project.

What does Create Ticket need to run?

Going by SKILL.md and its folder, Create Ticket needs the command-line tools its instructions call (gh and git).

Does Create Ticket access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Create Ticket safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Create Ticket use?

Create Ticket is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Create Ticket use?

About 2.4k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Create Ticket?

Skills that share tags, products or a category with Create Ticket: Launch On Device (zly2006/zhihu-plus-plus, 4.2k stars), Guided PR Fixup (alexvanyo/composelife, 267 stars), UI Devwidget Round (afkT/DevUtils, 1.6k stars) and Web To Mobile (suntay44/web-to-mobile-magic-plugin, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create Ticket?

willowtreeapps (a GitHub organization) maintains it in willowtreeapps/vocable-android, which has 127 GitHub stars. The repository was last updated on September 1, 2026.

Source: willowtreeapps/vocable-android on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.