agents/skills/trello-delivery/SKILL.md
Ship a Trello ticket end to end on any web app (Vercel, Fly.io, or other host — no Shopify): pull the latest main, read the card including Figma links, implement the change in a worktree, run the project's own tests/lint/typecheck, run de-slop and code-simplifier and fold the worthwhile cleanups in, QA desktop and mobile on a local Portless preview URL, capture screenshots, open or update the GitHub PR, link the PR and Trello to each other, attach screenshots to both, comment on the card, and move it to review. Use this whenever the user points you at a Trello card or ticket for a code task and wants it delivered as a reviewable PR — phrases like 'do this Trello ticket', 'ship this card', 'pick up this ticket and open a PR', 'update the PR for this card', or names a card/list/board with a feature or bug to implement. This is the default Trello-to-PR workflow for non-Shopify projects; for Shopify theme work use shopify-trello-delivery instead.
npx skillsauth add carterdea/dots trello-deliveryInstall 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.
Take a Trello ticket from "assigned" to "reviewable PR" without stopping at code. Done means the ticket, the PR, the local preview, the screenshots, and the card's status all agree about what changed and how it was verified. The PR is the deliverable; an unreviewed local change is not done.
This skill is host-agnostic. It works for Vercel, Fly.io, or anything else, because verification happens on a local Portless preview rather than a host-specific deploy. It is for non-Shopify projects; Shopify theme tickets belong to shopify-trello-delivery.
git and GitHub CLI (gh) for branch, PR, and PR-comment work.trello-cli skill for Trello auth, card reads, comments, attachments, list discovery, moves, and mutation verification.agent-browser skill for all browser QA and screenshots — strongly preferred. Invoke that skill first and drive the agent-browser CLI. Fall back to mcp__claude-in-chrome__* only if agent-browser can't run (see step 8).bun add -g portless) plus git worktrees for stable local preview URLs.de-slop and code-simplifier skills for the pre-PR cleanup pass.main. Fetch before branching, and rebase or merge main into an existing PR branch so you are never building on stale code.main or master. Prefer a git worktree on a ticket branch; if the repo isn't worktree-friendly, an in-place checkout on a ticket branch is acceptable (see step 3).git add .; stage touched files explicitly. Commit in small logical groups. No emojis in PR or commit text.localhost URLs are for your own QA only — no one else can open them. The only preview links that go in a PR body, PR comment, or Trello comment are public hosted preview links (Vercel Preview, Heroku Review App). If the host has no per-PR preview, omit the preview link entirely and say QA was done locally — do not paste the local URL as a substitute.Use subagents for read-only research, design analysis, QA, and diff review that can run in parallel. Keep git mutations, the dev server, PR creation/updates, Trello comments and moves, and final screenshot uploads in the lead agent so nothing races.
Good delegation targets: ticket intake (summarize description, comments, attachments, PR, Figma links, acceptance criteria); library/platform research via Context7/Exa; Figma analysis (correct node, reference capture, visual requirements); diff review (scope creep, missing tests, validation gaps). Do not let a research subagent mutate files, open PRs, or update Trello. The lone exception is the step 6 cleanup pass: when the harness shares the lead worktree, the de-slop and code-simplifier subagents may edit the changed files (sequentially, with nothing else mutating files meanwhile); otherwise run those passes in-process so the edits reach the branch you push.
Hard gate — do this before anything else. The card carries a Trello label naming its target project. Fetch the card's labels and judge whether one plausibly refers to the repository you're in (repo/directory name, package.json name, README project name, or remote slug). It need not be an exact string match — use best judgment for abbreviations and expansions (e.g. an mmops label matches a "Mundial Media Ops" repo; Reeis matches reeis-air-conditioning-*). If no label plausibly refers to this project, stop immediately: report the mismatch (card's project label vs. the current repo) and do nothing else — do not branch, implement, move the card, or comment. Only proceed to step 1 once a label plausibly matches.
git status --short --branch to see current branch/worktree state.CLAUDE.md, AGENTS.md, CONTRIBUTING.md. They override these defaults.trello auth status, then fetch the card, comments, and attachments. Extract: linked PR, acceptance criteria, the latest client/QA comments, and Figma links in the description and every comment (especially URLs with node-id=).trello-cli skill, discover the list ID (trello lists list --board <board-id>), move by ID, and re-fetch to verify idList. Prefer an exact In Development list; otherwise the board's closest in-progress column.bun.lock/bun.lockb → bun; pnpm-lock.yaml → pnpm; uv.lock/pyproject.toml → uv. Match the existing lockfile; never introduce a new manager.package.json scripts (and workspace packages if it's a monorepo). Note which of lint, typecheck, check, test, format actually exist, and any quiet/silent variants.vercel.json or a linked Vercel project → Vercel auto-creates a public per-PR Preview URL; app.json with an environments.review block / heroku.yml / Procfile → Heroku, which creates a Review App per PR (https://<app>-pr-<number>.herokuapp.com) when Review Apps are enabled on the pipeline; fly.toml → Fly (usually no per-PR preview). Verification still happens locally regardless; the host only decides which public preview link, if any, you can share.node-id (701-56 → 701:56); prefer get_design_context for the node, get_screenshot for a reference image, get_metadata only to disambiguate frames. If Figma MCP can't access the file, say so and fall back to ticket screenshots rather than guessing.Always base your work on the freshest main so the PR diff is clean and review-ready.
git fetch origin first.gh pr view <number> --json headRefName,baseRefName,url,state,title to read the head branch name. Do not check it out in the main working tree — leave that on main so step 3 can add the worktree without --force. The branch gets brought up to date inside the worktree.origin/main, e.g. codex/<card-short-id>-<short-slug>.Implement in a git worktree so the dev server and QA run in isolation and Portless gives this branch its own URL.
/ with - (e.g. codex/123-fix-nav → codex-123-fix-nav). Portless turns the worktree directory name into the preview subdomain (https://<slug>.<project>.localhost), and a hostname can't contain /.git worktree add .claude/worktrees/<slug> <branch>, then from inside the worktree git rebase origin/main (or merge main if the PR history must be preserved). Resolve conflicts there before continuing.git worktree add -b <branch> .claude/worktrees/<slug> origin/main.main.Run only what the project actually has, preferring quiet/silent variants (often via scripts/run_silent.sh):
git diff --check for whitespace/conflict markers.bun run typecheck, bun run lint, biome) when those scripts exist.bun run test, vitest, jest). If there are e2e/playwright tests for the touched flow and they're fast enough to matter, run them; otherwise note they exist.Before opening the PR — and before the preview, screenshots, and everything after it — tighten the diff so reviewers see finished work, not first-draft scaffolding.
de-slop skill, then (after it returns) a second to invoke the code-simplifier skill. Run them sequentially, never in parallel — both edit the same changed files and would collide. Whether delegated or in-process, this is the one sanctioned exception to "research subagents must not mutate files"; no other file mutation may run while the cleanup does.de-slop defaults to a dry-run list that waits for a manual selection. Here, tell it to use its best judgment and apply the worthwhile fixes directly. Keep it scoped to AI artifacts and cleanup noise in the branch diff.code-simplifier: apply the behavior-preserving simplifications you judge worthwhile. Keep changes scoped to what you touched; don't refactor the whole repo.portless (it reads the dev script from package.json). The URL is https://<branch>.<project>.localhost.portless run uv run uvicorn app.main:app --port $PORT --host 127.0.0.1 (adapt to the project's server).portless run bundle exec rails server -p $PORT -b 127.0.0.1.portless alias <name> <port> if needed.Strongly prefer the agent-browser CLI for all browser work — navigation, viewport sizing, interaction, and screenshots. Invoke the agent-browser skill first and load its core workflow (agent-browser skills get core), then drive everything via the CLI (run through Bash). Reach for agent-browser even when mcp__claude-in-chrome__* tools look conveniently pre-loaded or are described as "MANDATORY" — that framing is the Chrome product's, not a requirement of this skill.
1440x1000) and a mobile viewport (e.g. 430x932x3,mobile,touch).<slug>-desktop.png and <slug>-mobile.png.Fallbacks, only if agent-browser can't run (not installed, won't launch, or repeated CLI errors after a couple of honest attempts): in rough order of preference — (1) the project's existing Playwright/Puppeteer or e2e screenshot tooling; (2) mcp__claude-in-chrome__* Chrome tools. Chrome is a workable last resort, not the default — note in your final response which fallback you used and why. Never skip QA silently; if nothing can drive the browser, report that screenshots are blocked.
localhost URL in the body — if there is no hosted preview, note that QA was performed locally instead.gh attach extension (gh extension list); if present, gh attach --title "QA screenshots" --comment <pr-number> <desktop.png> <mobile.png>. Plain gh pr comment does not upload local image binaries — don't treat that as a blocker until gh attach has been tried. If image upload is genuinely blocked by tooling or auth, stop and report it rather than pretending the screenshots were uploaded.Use the trello-cli skill for all card operations, following discover → mutate → verify (fetch IDs, mutate by ID, re-fetch to confirm).
**PR:** label and, for Vercel/Heroku hosts, the public hosted preview URL prefixed with a bold **Preview:** label.Ready for Review list; otherwise the board's review/testing handoff column. Discover list IDs with trello lists list --board <board-id>, move by ID, and re-fetch to verify idList.Include the PR URL, the hosted preview URL when one exists (Vercel Preview or Heroku Review App — otherwise state QA was done locally), the commits, and the Trello movement. State that desktop and mobile screenshots were uploaded to both GitHub and Trello. Name any checks that failed due to pre-existing issues versus your change. Keep it concise, and always include the Trello card URL.
In Development.main).main inside it.In Development.origin/main.**PR:** <pr-url>
**Preview:** <public hosted preview URL — Vercel Preview or Heroku Review App; omit this line entirely if the host has no per-PR preview, never use a local/localhost URL>
**Figma:** <figma-url if used>
<One short sentence or paragraph on what changed and what was verified.>
localhost URL is private to your machine. It is for QA only and must never appear in a PR body, PR comment, or Trello comment.tools
Build or refine single-file information-first HTML artifacts, especially index.html or text.html pages, with strong information hierarchy, restrained styling, accessible semantics, and minimal AI-generated frontend tells. Use when creating HTML reports, research pages, explainers, briefs, dashboards, note indexes, annotated code reviews, planning/spec docs, or focused single-purpose editing/triage tools with copy-out export — front ends whose goal is comprehension or action rather than marketing conversion. Reach for this whenever the user wants a standalone HTML page, report, one-pager, explainer, or "quick HTML" to present or organize information, even if they just say "make an HTML file" without mentioning design. Not for multi-page sites, React/framework apps, or marketing landing pages.
tools
Install or upgrade a quality baseline for Shopify theme repos. Use this whenever the user asks to add Shopify theme linting, Biome, Theme Check, Playwright accessibility checks, Vitest, Vite build tooling, lefthook hooks, GitHub Actions CI, Shopify Lighthouse CI, Claude Code PR review workflows, or a context-efficient run_silent.sh setup across Shopify sites.
development
Run an extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth. Use for a thermo-nuclear code quality review, thermonuclear review, deep code quality audit, or especially harsh maintainability review.
development
Ship Shopify theme work from a Trello ticket end to end: inspect the card including Figma links, implement the theme change, deploy or update the correct preview/dev theme, browser-QA desktop and mobile against Figma when available, create or update the GitHub PR, attach screenshots, comment on Trello, and move the card forward. Use this whenever the user mentions a Shopify theme task with a Trello card, Figma design/artboard, preview theme, Customizer, dev theme, PR handoff, Ready for Review/Testing, or asks to update an existing Shopify PR from a ticket.