From dev-workflow
Use when the user wants to process a backlog of dev tickets end-to-end with a known project / branch / merge target / task tracker / design reference workflow, but without committing to any specific platform (Jira / Linear / GitHub Issues / Notion / Figma / Zeplin / etc.). Trigger on requests like 「幫我跑任務」、「照我的流程把 backlog 做完」、「review failed 的全部處理掉」、「用我那套開發流程做事」、"work through my task list", "run my dev loop", "process my tickets end-to-end". Always asks the user up-front for project root, working branch, merge target, task list location, design reference location, and how to mark a task done — then loops through tickets implementing → verifying → committing → opening PR → merging → syncing → updating the tracker. Never bake in platform-specific API calls; figure those out at run time from the user's answers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dev-workflow:dev-task-loopThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A general-purpose loop for working through a dev backlog. The skill is intentionally platform-agnostic — it commits to **a workflow**, not to any specific tracker / VCS host / design tool.
A general-purpose loop for working through a dev backlog. The skill is intentionally platform-agnostic — it commits to a workflow, not to any specific tracker / VCS host / design tool.
Ask first, then loop. Six upfront questions establish the working context. After that, run a tight per-ticket loop until the user stops you or the backlog is empty.
Do not assume Jira, GitHub, Figma, or any other vendor unless the user names them in their answers.
Before doing anything, call AskUserQuestion with all six questions in one call. Do not start work until all are answered.
The six questions (Traditional Chinese — translate if the user is writing in English):
/Users/me/Documents/myapp, org/repo, "monorepo, packages/web".tim, dev, feature/foo.main, develop, release/v2.For each option list in AskUserQuestion, include the most likely choices the user has named in past sessions plus a free-text fallback (the harness adds "Other" automatically).
Store the six answers as the workflow contract for the rest of the session. Re-read them mentally before every phase.
Using the answer to question 4, fetch the list of tickets that match the user's "ready to work" filter.
How you do this depends on what they named:
| Tracker style | Approach |
|---|---|
| REST API with session cookie (Jira Cloud, Linear, Asana, etc.) | Navigate to the tracker once in the browser MCP, then call its REST endpoints via javascript_tool against the open tab — the session cookie carries auth. |
| GitHub / GitLab | Try the platform CLI (gh issue list, glab issue list) first; fall back to web automation if missing. |
| Markdown / Google Doc / Notion table | Read the file or the URL; parse the rows that match the filter. |
| User-named ad hoc list | Read whatever they pointed you at. |
Cache the result as a list of task IDs + one-line summaries. Show the list to the user and ask which one to start with (or "from the top").
For each ticket, run these steps in order. Do not skip verification.
Browser is the default lens. Open the task page in the browser to read it (so you see screenshots / inline images QA attached), and open the affected route in the browser to verify the fix. Source-level inspection and TypeScript checks are supporting evidence, not replacements.
javascript_tool against that tab to pull the description text cleanly.strike mark), filter those out — they represent already-handled items.git -C <project> status
git -C <project> branch --show-current
Make sure you're on the working branch from question 2. If git status shows uncommitted leftovers from a previous task, surface them and ask before continuing.
UI changes MUST be verified in a real browser before moving on. Type-check passing is not enough — pixels lie.
Run the verification appropriate to what changed:
mobile preset (375×812) and re-check.pnpm tsc --noEmit (or tsc, npx tsc) in the relevant package. Ignore pre-existing baseline errors; flag only new ones. This is necessary but not sufficient for UI work.package.json / pyproject.toml / etc. if the project has them for the touched module.curl / httpie against the local API if running, otherwise rely on type + test signal.git -C <project> add <specific files only>
git -C <project> commit -m "$(cat <<'EOF'
<type>(<scope>): <short subject> (<TICKET-ID>)
Why: <one or two sentences on the problem>
Fix: <one or two sentences on the change>
Co-Authored-By: Claude Opus 4.7 <[email protected]>
EOF
)"
git -C <project> push origin <working-branch>
Never git add -A / git add . — stage by path so secrets and stray files don't sneak in.
Use whatever VCS host the project lives on:
gh pr create if installed; otherwise navigate to https://github.com/<repo>/compare/<merge-target>...<working-branch>?expand=1 in the browser MCP and submit the form.glab mr create or the equivalent web form.Title = the commit subject. Body = the commit body verbatim.
The user's earlier sessions almost always include "merge it" — confirm once per session, then proceed without re-asking each ticket. If the user has said CI red is OK, don't block on red checks; merge anyway.
Merge strategy: prefer a real merge commit (--no-ff) so the PR shows up in the graph. Locally:
git -C <project> fetch origin
git -C <project> checkout <merge-target>
git -C <project> pull origin <merge-target>
git -C <project> merge --no-ff <working-branch> -m "Merge pull request #<n> from <fork>/<working-branch>"
git -C <project> push origin <merge-target>
git -C <project> checkout <working-branch>
git -C <project> rebase <merge-target>
git -C <project> push origin <working-branch> --force-with-lease
Use --force-with-lease, never raw --force.
Open the task page in the browser first, then run the actions the user named in question 6. Common patterns:
javascript_tool against it — the session cookie carries auth. After the API calls, eyeball the page to confirm the comment is visible and the status badge changed.Confirm with the user: "Comment posted, status moved to X — next ticket?"
After each ticket, summarise in two lines:
Then ask the user which ticket to take next, or "從下一張開始" if they want auto-pace.
git status shows unexpected files you didn't author — never blindly stash or reset..env* files or anything outside the project root the user named in question 1.--force (use --force-with-lease).--no-verify / --no-gpg-sign) unless the user explicitly says so.When stopping, output:
npx claudepluginhub timlai666/skills --plugin dev-workflowGuides reception of code review feedback: verify before implementing, avoid performative agreement, push back with technical reasoning when needed.
Design banners for social media, ads, website heroes, and print with multiple art direction options and AI-generated visuals.