Launch On Device
zly2006/zhihu-plus-plus
Build, install, and launch the Zhihu++ Android app on a connected device using ADB.
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.
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install willowtreeapps/vocable-android create-ticket --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .claude/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticketType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install willowtreeapps/vocable-android create-ticket --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/create-ticket .agents/skills/create-ticket && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .agents/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install willowtreeapps/vocable-android create-ticket --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/create-ticket .cursor/skills/create-ticket && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .cursor/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/willowtreeapps/vocable-android.git --path .claude/skills/create-ticket--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install willowtreeapps/vocable-android create-ticket --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/create-ticket .gemini/skills/create-ticket && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .gemini/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install willowtreeapps/vocable-android create-ticketInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/create-ticket .github/skills/create-ticket && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .github/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add willowtreeapps/vocable-android --skill create-ticket -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install willowtreeapps/vocable-android create-ticket --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/willowtreeapps/vocable-android.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/create-ticket .opencode/skills/create-ticket && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "create-ticket" agent skill from https://github.com/willowtreeapps/vocable-android/tree/main/.claude/skills/create-ticket into .opencode/skills/create-ticket/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-ticket", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
create-ticketA 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. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b7ced56. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
ghgitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from willowtreeapps/vocable-android at commit b7ced56, republished under its MIT licence (© willowtreeapps). 870 words, ~2,358 tokens.
.claude/skills/create-ticket/SKILL.md (or your agent's skills folder).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.
Gather (ask the user via AskUserQuestion if not already clear from the conversation):
Part of #N). Omit if standalone.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 contentIf 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.
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>".
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.
feature/voice-selection, or main
for a standalone issue with no parent):git rev-parse origin/<base-branch>
gh api repos/willowtreeapps/vocable-android --jq '.node_id'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):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>"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.
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.
gh issue create output URL, or query it):gh api graphql -f query='
query { repository(owner: "willowtreeapps", name: "vocable-android") {
issue(number: <N>) { id }
} }'PVT_kwDOAAiCcM4AiZ3r — Project #50 on willowtreeapps):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>"item.id — that's the project item ID, different from the issue's node ID, and what the next steps need.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")'id and the id of the "Pre Backlog" option from the output.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>"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.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>"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.
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
Just SKILL.md in .claude/skills/create-ticket of willowtreeapps/vocable-android.
Open the folder on GitHubat commit b7ced56
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Create Ticket this skillwillowtreeapps/vocable-android | 127 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Launch On Devicezly2006/zhihu-plus-plus | 4.2k | — | ~3.1k | Automated safety check: Pass | CC-BY-NC-4.0 | |
| Guided PR Fixupalexvanyo/composelife | 267 | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| UI Devwidget RoundafkT/DevUtils | 1.6k | — | ~880 | Automated safety check: Pass | Apache-2.0 | |
| Web To Mobilesuntay44/web-to-mobile-magic-plugin | 107 | — | ~781 | Automated safety check: Pass | MIT | |
| Capturing Preview Screenshots In CIskydoves/android-testing-skills | 333 | — | ~4.5k | Automated safety check: Notes | Apache-2.0 |
zly2006/zhihu-plus-plus
Build, install, and launch the Zhihu++ Android app on a connected device using ADB.
alexvanyo/composelife
Performs a guided fixup of a given GitHub PR. An agent skill from alexvanyo/composelife.
afkT/DevUtils
在需要圆角矩形纯色背景、描边边框时,优先用 DevWidget(io.github.afkt:DevWidgetX)的 dev.widget.ui.round 包替代 shape / layer-list drawable。流程与核心坑在 SKILL,Round 系列 View、R.styleable.DevWidget 中 app:dev 属性及源码对照见…
suntay44/web-to-mobile-magic-plugin
Orchestrate website or web app conversion into a mobile app.
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.
K9i-0/ccpocket
ccpocketアプリのバージョン更新と、指定プラットフォーム向けリリースを行う. An agent skill from K9i-0/ccpocket.
Categories
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.
Create Ticket fits situations like: starting new work that needs a GitHub issue in this repo; asked to create/write/file a ticket.
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.
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.
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.
Going by SKILL.md and its folder, Create Ticket needs the command-line tools its instructions call (gh and git).
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
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.
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.
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.
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.
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.