Runrun.it — Task Lifecycle (Start → Develop → Finish)
Two main flows:
- Flow A — Start Task: fetch task data, verify workspace, create branch, analyze requirements, plan execution
- Flow B — Finish Task: create commits, open PR, comment on task, deliver
Input
| Campo |
Obrigatório |
Descrição |
| Link da task |
Sim |
URL da tarefa (ex.: https://runrun.it/en-US/tasks/14003) ou ID numérico |
| URLs antes/depois |
Não |
Para evidências visuais no PR e na task (Flow B, Template A) |
| Branch destino |
Não |
Padrão: development |
| Link da PR |
Não |
URL da Pull Request (Bitbucket ou GitHub). Se não fornecido, é criado no Step F4. |
| Link do workspace |
Não |
URL de validação (ex.: https://task14002--lojamm.myvtex.com/lancamentos) |
| Links extras |
Não |
GTM, Figma, documentos ou qualquer link adicional relevante |
| Prints/evidências |
Não |
URLs de screenshots (prnt.sc, Cloudinary, etc.) |
| Descrição da entrega |
Não |
O que foi entregue, em linguagem de negócio. Se não fornecido, é derivado da task. |
| Produção — tema/app novo |
Não |
URL do Admin da versão em produção (setup), ex.: https://{conta}.myvtex.com/admin/apps/{vendor}.{app}@{versao}/setup |
| Produção — tema/app anterior |
Não |
URL do setup da versão anterior (referência para comparação ou rollback) |
| Conta VTEX (para montar URL) |
Não |
Ex.: leeloo — use quando souber vendor.app@ver mas faltar o host completo |
Flow A — Start Task (Iniciar tarefa)
Triggered when the user says "iniciar tarefa", "começar task", "pega essa task", or provides a Runrun.it link asking to start work.
Step A1 — Fetch task data from Runrun.it
Extract the numeric ID from the URL (e.g. .../tasks/14003 → 14003).
Call runrunit_get_task via MCP:
server: user-runrunit-mcp
toolName: runrunit_get_task
arguments: { "id": <task_id> }
From the response, extract:
title — task title
id — task ID
project_id / project_name — project context (used to identify the correct workspace)
responsible_name — assigned developer
tags — tags to determine change type and technology
description — detailed requirements
board_stage_name — current stage
Also fetch comments and subtasks for full context:
server: user-runrunit-mcp
toolName: runrunit_list_task_comments
arguments: { "task_id": <task_id> }
server: user-runrunit-mcp
toolName: runrunit_list_subtasks
arguments: { "task_id": <task_id> }
Step A2 — Verify workspace / project folder
Before creating a branch, confirm the user is in the correct project folder.
- Check the current working directory (
pwd or workspace path from Cursor context).
- Cross-reference with the
project_name from the task to identify the expected repository.
- Look for project indicators:
manifest.json (VTEX IO), deno.json/mod.ts (deco.cx), package.json, .git folder.
If the workspace looks wrong:
- STOP and ask the user: "O workspace atual é
{cwd}, mas a task é do projeto {project_name}. Deseja continuar aqui ou trocar para outro diretório?"
- Do NOT proceed until the user confirms.
If the workspace looks correct:
- Inform the user: "Workspace confirmado:
{cwd} ({project_name})"
Step A3 — Create or checkout branch
Branch naming convention (POR PROJETO)
O padrão de branch depende do repositório. Detecte o projeto (pelo project_name da task, pelo git remote -v ou pela pasta) e use a convenção certa. Chame o nome final de {branch}:
| Projeto / repo |
Convenção |
Exemplo |
| Padrão (VTEX IO, deco.cx, geral) |
task{id} |
task14003 |
omie (Next.js + Strapi — C:\projetos\omie) |
{tipo}/{descricao-kebab} — NÃO usar task{id} (ver skill omie-commit) |
feat/blog-page, feat/new-home-blog, fix/popup-form |
- No padrão
{tipo}/{descricao}: {tipo} segue conventional commits (feat, fix, refactor, docs, style, chore) e {descricao} é um resumo curto em kebab-case derivado do título da task.
- Ao detectar o repositório omie, confirmar o nome com o usuário: "Projeto omie usa
{tipo}/<descricao>. Sugiro feat/{descricao} (da task '{title}'). Confirma esse nome ou prefere outro?"
- Se não tiver certeza da convenção ou da descrição, perguntar ao usuário antes de criar a branch.
Passos
Run git status to check for uncommitted changes.
- If there are uncommitted changes, STOP and ask: "Existem alterações não commitadas na branch atual. Deseja fazer stash, commit ou descartar antes de trocar?"
- Wait for user confirmation before proceeding.
Definir {branch} conforme a convenção do projeto (tabela acima) e checar se já existe:
git branch --list {branch}
git branch -r --list "*/{branch}"
If branch exists locally: ask the user: "A branch {branch} já existe. Deseja fazer checkout para ela?"
- On confirmation:
git checkout {branch}
If branch exists only on remote: ask: "A branch {branch} existe no remoto. Deseja fazer checkout?"
- On confirmation:
git checkout -b {branch} origin/{branch}
If branch does not exist: ask: "Vou criar a branch {branch} a partir de {current_branch}. Confirma?"
- The base branch should typically be
development or main — ask if unclear.
- On confirmation:
git checkout -b {branch} {base_branch}
Confirm to the user: "Branch {branch} pronta. Trabalhando a partir de {base_branch}."
Step A4 — Analyze task and identify technology / skills
Parse the task title, description, tags, and comments to determine:
Technology detection
| Signal in task data |
Technology |
Relevant skills |
vtex, vtex io, store-theme, site editor, shelf, checkout |
VTEX IO |
vtex-io-component, vtex-css, vtex-io-node-graphql, vtex-checkout, vtex-checkout-config |
css, estilo, style, layout, handle, seletor, tema, cor, responsiv (em projeto VTEX) |
VTEX IO CSS |
vtex-css (+ vtex-io-component se criar componente) |
deco, deco.cx, fresh, section, loader, island |
deco.cx |
deco-section, deco-loader, deco-island, deco-app, deco-vtex |
checkout, orderForm, checkout6-custom |
VTEX Checkout |
vtex-checkout, vtex-checkout-config |
graphql, node, resolver, client, middleware |
VTEX IO Node/GraphQL |
vtex-io-node-graphql |
link do Figma (figma.com/design/...), design, layout no figma, protótipo, mockup |
Design/Figma |
figma-assets (+ skill de implementação da stack) |
omie (projeto C:\projetos\omie), next.js/nextjs, strapi, cms, page builder/section, landing page/LP, blog, popup, component/componente, TBT/performance/pagespeed |
omie (Next.js + Strapi) |
Skills do projeto omie (project-scoped): component-creator, strapi-single-cpts, page-builder-section-mapper, section-performance-optimizer, frontend-performance, popup-form-template-creator, legacy-lp-text-sync, legacy-lp-css-background-sync, legacy-lp-section-precos |
Regra: em qualquer tarefa da plataforma VTEX (VTEX IO) que envolva CSS/estilo/layout/CSS Handles, sempre incluir a skill vtex-css no plano (Step A5) e lê-la antes de editar CSS.
Regra (Figma): se a task tiver um link do Figma (na descrição, comentários ou enviado pelo usuário), incluir a skill figma-assets no plano e usá-la para extrair design, tipografia/espaçamentos exatos e assets (SVG/imagens) antes de implementar.
Regra (omie): quando o repositório for o omie (C:\projetos\omie, stack Next.js + Strapi):
- Branch, commit, PR e comentário na task: seguir a skill
omie-commit (global, em ~/.cursor/skills) — branch feat/<descricao> (ver Step A3, não task{id}), commit Conventional Commits com corpo detalhado (contexto/porquê), descrição do PR com o template oficial do omie (em vez do Step F4) e comentário no Runrun.it com o hash do merge na master (deploy manual pela Omie, avisado via John — em vez dos Templates A/B do Step F5).
- Implementação: as demais skills do omie são project-scoped e ficam em
C:\projetos\omie\.cursor\skills\{skill}\SKILL.md (o Cursor as carrega automaticamente ao trabalhar nesse repo). Incluir a(s) skill(s) apropriada(s) no plano (Step A5) e ler antes de executar.
Task type detection
| Signal |
Type |
Approach |
criar, novo, adicionar, implementar |
New feature |
Create new files/components |
ajustar, corrigir, fix, bug |
Fix/adjustment |
Find and modify existing code |
alterar, mudar, atualizar, layout |
Update |
Modify existing components |
configurar, config, setup |
Configuration |
Update config files, settings |
Codebase exploration
Before presenting the plan, explore the project structure to understand what already exists:
- List key directories (
ls, Glob) to map the project layout.
- If VTEX IO: check
manifest.json for app name/version, store/ for blocks, react/ for components.
- If deco.cx: check
deno.json, sections/, loaders/, islands/, apps/.
- Search for files related to the task (e.g., if task mentions "shelf", search for shelf-related components).
Step A5 — Present plan and ask for permission
CRITICAL: NEVER start coding without user approval.
Present a structured plan to the user:
Tarefa: TASK-{id} — {title}
Projeto: {project_name}
Branch: task{id}
Tecnologia: {detected technology}
Plano de execução:
1. {Step 1 — what will be created/modified and why}
2. {Step 2 — ...}
3. {Step 3 — ...}
Arquivos que serão criados:
- {path/to/new/file.tsx} — {brief description}
Arquivos que serão modificados:
- {path/to/existing/file.tsx} — {what changes}
Skills que serão utilizadas:
- {skill name} — {why}
Posso prosseguir com esse plano?
Wait for the user to confirm, adjust, or reject the plan.
Step A6 — Execute task with appropriate skills
After user approval, execute the plan step by step:
- Read the relevant skill before starting (e.g.,
deco-section, vtex-io-component, vtex-css para CSS/estilo em VTEX IO, figma-assets quando houver link do Figma).
- Follow the skill instructions to create/modify files.
- After each significant change, briefly inform the user what was done.
- Before creating new files: confirm with the user ("Vou criar o arquivo
{path}. OK?").
- Before deleting files or code: ALWAYS ask ("Preciso remover
{path/code}. Posso prosseguir?").
- If the task is ambiguous at any point, stop and ask for clarification.
Permission rules during execution
| Action |
Permission required? |
| Read/search files |
No |
| Modify existing file (small change) |
No (inform after) |
| Modify existing file (large refactor) |
Yes — ask before |
| Create new file |
Yes — ask before |
| Delete file |
Always — ask before |
| Delete code block |
Always — ask before |
| Install dependency |
Yes — ask before |
| Change config files |
Yes — ask before |
Step A7 (optional) — Move task stage on Runrun.it
If the user asks, move the task to "In Progress" or the appropriate stage:
server: user-runrunit-mcp
toolName: runrunit_move_task_stage
arguments: { "task_id": <task_id>, "board_stage_name": "In Progress" }
Flow B — Finish Task (Finalizar tarefa)
Triggered when the user says "faz commit", "abre PR", "entrega a task", "comenta na task", or any finish-related action. Steps are numbered F1–F6 to distinguish from Flow A.
Step F1 — Fetch task data from Runrun.it
Extract the numeric ID from the URL (e.g. .../tasks/13631 → 13631).
Call runrunit_get_task via MCP:
server: user-runrunit-mcp
toolName: runrunit_get_task
arguments: { "id": <task_id> }
From the response, extract:
title — task title (used for PR title and commit message)
id — task ID (used for references)
project_id / project_name — project context
responsible_name — assigned developer
tags — tags to determine change type
description — detailed requirements (useful for PR description)
board_stage_name — current stage
Also fetch comments for extra context:
server: user-runrunit-mcp
toolName: runrunit_list_task_comments
arguments: { "task_id": <task_id> }
Step F2 — Determine change type
Map the task info to one of the PR change types:
| Tag / Keyword in title |
Type |
bug, fix, correção |
🐛 Correção de bug |
feature, novo, criar, adicionar |
✨ Novo recurso |
refactor, refatoração, melhoria |
♻️ Refatoração |
doc, documentação |
📖 Documentação |
layout, css, estilo, visual, ajust |
🎨 Alteração de layout |
If ambiguous, ask the user or default to 🎨 Alteração de layout.
Step F3 — Create semantic commits
Commit message format
Formato padrão (qualquer stack):
[TASK-{id}] {type}: {short description}
{optional body with more details}
Formato VTEX IO (theme / app publicável) — a linha Release: vai no INÍCIO, antes do assunto:
Release: {vendor}.{name}@{version}
[TASK-{id}] {type}: {short description}
{optional body with more details}
Where {type} follows conventional commits:
fix: for bug fixes
feat: for new features
refactor: for refactoring
docs: for documentation
style: for layout/visual changes
Example (VTEX IO — ajuste/homolog, SEM mudar versão)
[TASK-13631] style: adjust mobile shelf/search with sizes
Updated shelf and search layouts for mobile viewport
to properly display product size variations.
Example (VTEX IO — commit de PRODUÇÃO, com bump confirmado)
Release: store.theme-mm@3.5.12
[TASK-13631] style: adjust mobile shelf/search with sizes
Updated shelf and search layouts for mobile viewport
to properly display product size variations.
Example (não-VTEX IO, ex.: deco.cx)
[TASK-13631] style: adjust mobile shelf/search with sizes
Updated shelf and search layouts for mobile viewport
to properly display product size variations.
VTEX IO — versão e release (themes / apps da loja)
Quando o repositório for um app VTEX IO (raiz com manifest.json contendo vendor, name, version e builders), ao preparar o commit de entrega de task:
Detectar o app: {vendor}.{name} e a versão atual em "version" (semver x.y.z).
NÃO subir a versão em qualquer ajuste. Durante o desenvolvimento/ajustes/homolog (commits de branch, workspace de teste), manter a version do manifest.json como está. Commits comuns da task não alteram o manifest.json nem levam linha Release:.
Só alterar a versão quando for para PRODUÇÃO (publicação do tema/app na conta principal — vtex publish/deploy). Só nesse momento se faz o bump no manifest.json.
Ao ir para produção, SEMPRE perguntar ao usuário qual incremento (não decidir sozinho): patch, minor ou major.
Pergunte assim (sugerindo uma opção com base na mudança, mas aguardando confirmação):
Vou publicar {vendor}.{name} (versão atual {x.y.z}).
Qual incremento de versão?
- patch → {x.y.(z+1)} (correções, ajustes de layout/CSS)
- minor → {x.(y+1).0} (novas features/blocos compatíveis)
- major → {(x+1).0.0} (breaking changes)
- patch: correções, ajustes de layout/CSS, pequenas correções.
- minor: novas features ou blocos visíveis, mudanças compatíveis.
- major: breaking changes.
Só aplicar o bump depois da resposta do usuário.
CHANGELOG.md: se existir no repo, acrescentar entrada com TASK-{id}, resumo da mudança e o número da nova versão apenas no commit de release/produção (seguir o padrão já usado no arquivo).
Linha Release: só no commit de produção. Quando o bump acontecer, a linha Release: é a primeira linha da mensagem (vem antes do [TASK-…]), seguida de uma linha em branco e depois o assunto/corpo:
Release: {vendor}.{name}@{version}
[TASK-{id}] {type}: {short description}
Exemplo: Release: store.theme-mm@3.5.12 (use a versão nova confirmada e já refletida no manifest.json). Não usar a linha Release: como rodapé/trailer — neste fluxo ela é o início da mensagem. Em commits que não são de produção, não incluir a linha Release:.
Staging (commit de produção): incluir manifest.json (e CHANGELOG.md se alterado) no mesmo commit do release.
Monorepo / vários apps: aplicar bump e linha Release apenas no(s) app(s) que vão para produção; se o mesmo release tocar dois apps publicáveis, usar duas linhas Release: no topo, uma por app.
Resumo: ajuste/homolog = sem mudar versão e sem Release:. Produção = perguntar o incremento (patch/minor/major), fazer o bump no manifest.json e usar a linha Release: no topo do commit.
How to commit
- Run
git status and git diff to understand changes
- Run
git log --oneline -5 to follow existing commit style
- Stage relevant files:
git add <files>
- Write the commit message to a temp file, then commit with
-F:
# Write message to temp file (use the Write tool to create .git/COMMIT_MSG_TEMP)
# Then commit using git.exe directly to bypass Cursor --trailer injection:
& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP
IMPORTANT — Cursor --trailer workaround:
Cursor automatically injects --trailer 'Made-with: Cursor' into every git commit call.
Git versions older than 2.32 do NOT support --trailer and will fail with error: unknown option 'trailer'.
To work around this:
- Write the commit message to
.git/COMMIT_MSG_TEMP using the Write tool
- Append
Made-with: Cursor as the last line of the message (as a manual trailer)
- Call
git.exe directly via its full path to bypass Cursor's wrapper:
& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP
- If the full path doesn't work, try:
cmd /c "git.exe commit -F .git\COMMIT_MSG_TEMP"
- If hooks (lint, etc.) block the commit in projetos sem a exceção abaixo, use
commit ... --no-verify only when the failure is from hooks, not the trailer (never use --no-verify to hide real errors the user should fix in VTEX/Node projects unless agreed).
deco.cx — loja / projeto VFOR (e projetos Deco equivalentes): nos commits deste contexto, use quase sempre --no-verify com o git.exe e -F acima, porque os hooks do repositório (Deno, fmt, checagens longas) costumam atrapalhar o fluxo de tarefa no agente. Comando padrão:
& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP --no-verify
- Confirme com o usuário o workspace:
deno.json / mod.ts + repositório da loja Deco VFOR = aplicar o padrão.
- Não use
--no-verify por padrão em repositórios VTEX IO (store theme, apps) ou outros se o time exigir hooks — a regra geral de hook failure acima continua.
This applies to ALL git commit operations in this skill (commit, amend, etc.) — ajuste --no-verify conforme a stack do repositório aberto.
Step F4 — Open GitHub PR
PR title format
[{Project Name}] {task title}
Example: [Clovis B2C] vitrine/pesquisa mobile com numerações
PR body template
Exceção por projeto — omie: se o repositório for o omie (C:\projetos\omie), NÃO usar o template abaixo. Usar o template oficial do omie definido na skill omie-commit (seção "Pull Request"). O template abaixo é o padrão para os demais projetos.
Use this exact template, filling in data from the task:
# Título do PR: [{Project Name}] {task title}
## 🎯 Tipo de Mudança
> Marque o tipo de mudança que este PR introduz
- [{x or space}] 🐛 **Correção de bug** (alteração que corrige um problema)
- [{x or space}] ✨ **Novo recurso** (alteração que adiciona uma funcionalidade)
- [{x or space}] ♻️ **Refatoração** (uma alteração de código que não corrige um bug nem adiciona um recurso)
- [{x or space}] 📖 **Documentação** (atualizações na documentação)
- [{x or space}] 🎨 Alteração de layout (Mudança no layout sem alterar o comportamento de uma funcionalidade existente)
---
## 📝 Descrição
> {Description derived from task title, description, and comments. Summarize what was done.}
---
## 📸 Evidências Visuais (Se aplicável)
> Adicione capturas de tela, GIFs ou vídeos para demonstrar as mudanças de UI/UX.
**Antes:**

**Depois:**

---
## ✅ Checklist de Qualidade
- [x] Meu código segue as diretrizes deste projeto.
- [x] Realizei uma revisão do meu próprio código.
- [ ] Testei o fluxo de navegação.
- [ ] Comentei meu código nas áreas de difícil compreensão.
- [x] Minhas alterações não geram novos warnings.
---
## 🔗 Referências
> Adicione links para tarefas, épicos ou outras referências.
- **Tarefa:** [TASK-{id}](https://runrun.it/en-US/tasks/{id})
- **Versão publicável (VTEX IO):** `{vendor}.{name}@{version}` — usar a mesma versão do `manifest.json` deste PR (se aplicável)
- **Design no Figma:** [Link para o design]({figma_url or "https://..."})
- **Documento:** [Link]({doc_url or "https://..."})
Create the PR
git push -u origin HEAD
gh pr create --title "[{Project}] {task title}" --body "$(cat <<'EOF'
{filled template above}
EOF
)"
Return the PR URL to the user.
Step F5 — Update task on Runrun.it
Save PR link in the task
server: user-runrunit-mcp
toolName: runrunit_update_task
arguments: { "id": <task_id>, "task": { "link_da_branch": "<pr_url>" } }
Post comment on the task
server: user-runrunit-mcp
toolName: runrunit_create_comment
arguments: {
"task_id": <task_id>,
"text": "<comment text>"
}
Exceção por projeto — omie: se a task for do omie (C:\projetos\omie), NÃO usar os Templates A/B abaixo. Usar o template de comentário do omie na skill omie-commit (seção "Comentário no Runrun.it"), que exige o hash do merge na master — o deploy do omie é manual (time da Omie publica, avisado via John, usando esse hash).
Choose the comment template based on context:
Template A — Comentário técnico (default para evidências antes/depois)
Use when the user provides before/after URLs and the focus is on visual evidence of changes.
Resumo do que foi feito:
{Summary of changes based on commit messages and PR description}
Link da PR: {pr_url}
Passo a passo para testar:
1. Acesse {test_url or workspace URL}
2. {Step to reproduce/validate}
3. {What to check}
Evidências:
Antes (Desktop): {url}
Depois (Desktop): {url}
Antes (Mobile): {url}
Depois (Mobile): {url}
Template B — Comentário de entrega (handoff para validação)
Use when the user finishes a task and wants to document what was delivered, provide validation links (workspace, GTM, etc.), explain how to validate, attach evidence prints, or document theme/app versions live in production (VTEX Admin setup URLs). This is the preferred template when the user says "comenta na task", "entrega", "passa pra validação", "foi pra produção", or provides PR + prints + workspace links.
Atualização TASK-{id} - {task title}
O que foi entregue:
- {Bullet point describing deliverable 1 in business language, not technical jargon}
- {Bullet point describing deliverable 2}
- {Add as many bullets as needed}
Links:
- Pull Request (revisão do código): {pr_url}
- Ambiente de validação (workspace): {workspace_url}
{Include any extra links the user provides, e.g.:}
- GTM: {gtm_url}
- Figma: {figma_url}
- Documento: {doc_url}
{If the theme or store app was deployed to production on the main account, include the VTEX Admin setup URLs — see block below.}
Produção (VTEX Admin):
Versão nova do tema (ou app)
https://{conta}.myvtex.com/admin/apps/{vendor}.{nome-do-app}@{versao_nova}/setup
Versão antiga do tema (ou app)
https://{conta}.myvtex.com/admin/apps/{vendor}.{nome-do-app}@{versao_antiga}/setup
Como validar:
1) {Step-by-step instruction with specific actions to verify deliverable 1}
2) {Step-by-step instruction to verify deliverable 2}
{Number of steps should match the deliverables; be specific about what to check and where}
Evidências (prints):
{url_1}
{url_2}
{List each screenshot/print URL on its own line}
Ou, quando quiser destacar um único capture de produção ou do Admin:
Print:
https://prnt.sc/exemplo
Exemplo completo (produção + print) — texto simples, sem Markdown:
Atualização TASK-12345 - Ajuste vitrine
O que foi entregue:
- ...
Links:
- Pull Request (revisão do código): https://bitbucket.org/...
Produção (VTEX Admin):
Versão nova do tema
https://leeloo.myvtex.com/admin/apps/leeloo.store-theme@1.5.7/setup
Versão antiga do tema
https://leeloo.myvtex.com/admin/apps/leeloo.store-theme@1.5.6/setup
Como validar:
1) ...
Print:
https://prnt.sc/rwQq3HEvKLbr
Guidelines for Template B:
- Write "O que foi entregue" in business language — explain what the user/stakeholder sees, not what code was changed.
- Produção (theme/app): se a entrega foi para produção na conta principal, inclua o bloco "Produção (VTEX Admin)" com versão nova e, quando fizer sentido, versão anterior (rollback/referência). Se o usuário não passar as URLs, monte com
https://{conta}.myvtex.com/admin/apps/{vendor}.{app}@{semver}/setup usando conta + app + versões do manifest/Release: ou do que foi publicado. Não incluir o bloco se a task foi só homolog/workspace de teste.
- "Links" section is flexible: always include PR and workspace if provided; add any extra links the user passes (GTM, Figma, docs, etc.).
- "Como validar" steps should be actionable and map to the deliverables — tell the validator exactly where to go and what to check.
- Evidências / Print: URLs puras (Runrun.it sem Markdown). Use "Print:" com uma linha de URL quando for uma evidência única (ex.: tela do Admin).
- If the user provides the content for each section, use it as-is. If not, derive it from the task data, PR description, and commit messages.
- Ask the user for clarification if the deliverables or validation steps are unclear.
URL pattern (Admin): https://{conta}.myvtex.com/admin/apps/{vendor}.{nome}@{versao}/setup — use o semver que aparece no VTEX Admin ou na linha Release: do commit / manifest.json publicado.
Step F6 (optional) — Move task stage
If the user asks, move the task to the next stage:
server: user-runrunit-mcp
toolName: runrunit_move_task_stage
arguments: { "task_id": <task_id>, "board_stage_name": "Manager Validation" }
Upload de prints/evidências via Cloudinary
Sempre que houver prints/screenshots para anexar (na task, no PR ou nos docs), hospedar via Cloudinary com a ferramenta MCP runrunit_upload_image_cloudinary e usar a secure_url retornada. Ver também a skill upload-image-cloudinary.
Ferramenta MCP
server: user-runrunit-mcp
toolName: runrunit_upload_image_cloudinary
arguments: {
"file_path": "<caminho absoluto ou relativo da imagem no disco>",
"public_id": "task-{id}-{descricao}-{before|after}-{viewport}" // opcional
}
- Retorno:
{ "secure_url": "https://res.cloudinary.com/.../arquivo.png" } — usar apenas a secure_url (HTTPS pública).
public_id é opcional; se informado, padronizar (ex.: task-14003-vitrine-depois-mobile). Reenviar com o mesmo public_id sobrescreve a imagem.
- Pré-requisito: variáveis
CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET configuradas no MCP (mcp.json). Se o upload falhar, verificar essas credenciais e se o servidor user-runrunit-mcp está ready (não "loading").
De onde vêm os arquivos
| Origem |
Como obter o file_path |
| Print que o usuário já tem no disco |
Usar o caminho informado (ex.: C:\Users\...\print.png) |
| Captura de página web (antes/depois) |
browser_take_screenshot via browser MCP → usar o caminho retornado |
| Múltiplos viewports |
Capturar em mobile (375px) e desktop (1440px) e subir cada um |
Fluxo
- Reunir os arquivos de imagem (do usuário ou capturados via browser MCP).
- Para cada imagem, chamar
runrunit_upload_image_cloudinary e guardar a secure_url.
- (Opcional) Validar o link com um HEAD HTTP — deve retornar 200 e
Content-Type: image/*.
- Usar as URLs:
- Comentário da task (Runrun.it): texto simples, uma URL por linha (Template A "Evidências" ou Template B "Evidências (prints)" / "Print:").
- Corpo do PR (Markdown):
 / .
Exemplo
1) browser_take_screenshot → C:\...\depois-mobile.png
2) runrunit_upload_image_cloudinary { file_path: "C:\...\depois-mobile.png", public_id: "task-14003-vitrine-depois-mobile" }
→ secure_url: https://res.cloudinary.com/xxxx/image/upload/v.../task-14003-vitrine-depois-mobile.png
3) Usar essa URL no comentário da task (linha pura) e no PR ()
Partial execution
The user may request only part of the flow:
Flow A — Start triggers
| Request |
Steps to execute |
| "Iniciar tarefa" / "Começar task" / "Pega essa task" |
A1 → A6 (full start flow) |
| "Pega dados da task" |
A1 only |
| "Cria a branch" / "Checkout pra task" |
A1 → A3 |
| "Analisa a task" / "O que precisa fazer?" |
A1, A4 → A5 (analyze + plan, no branch) |
| "Inicia e já começa a codar" |
A1 → A6 (full start + execute) |
Flow B — Finish triggers
| Request |
Steps to execute |
Comment template |
| "Faz commit" |
F1 → F3 |
— |
| "Abre PR" |
F1 → F4 |
— |
| "Abre PR e comenta na task" |
F1 → F5 |
Template A or B (ask if unclear) |
| "Faz tudo" / "Finaliza" |
F1 → F6 |
Template A or B (ask if unclear) |
| "Só comenta na task" |
F1, F5 |
Template A or B (ask if unclear) |
| "Entrega a task" / "Passa pra validação" |
F1, F5 (with user-provided PR/links) |
Template B |
| "Comenta com PR e prints" |
F1, F5 |
Template B |
Combined triggers
| Request |
Steps to execute |
| "Pega a task e faz tudo" |
A1 → A6, then F1 → F6 when done |
| "Inicia, desenvolve e abre PR" |
A1 → A6, then F1 → F4 |
Always confirm with the user which steps to perform if unclear.
MCP tools reference
| Tool |
Purpose |
runrunit_get_task |
Fetch task data (title, description, tags, stage) |
runrunit_list_task_comments |
Get task comments for context |
runrunit_list_subtasks |
List subtasks of a parent task |
runrunit_update_task |
Save PR link (link_da_branch) in the task |
runrunit_create_comment |
Post comment on the task (plain text) |
runrunit_create_external_comment |
Post comment on guest/external channel |
runrunit_move_task_stage |
Move task to next board stage |
runrunit_upload_image_cloudinary |
Upload screenshot, returns secure_url |
Important rules
Permission & safety
- ALWAYS ask permission before creating files, deleting files/code, installing dependencies, or changing config files
- ALWAYS verify workspace before creating/checking out branches — never operate on the wrong repo
- ALWAYS check for uncommitted changes before switching branches
- NEVER start coding without presenting a plan and getting user approval (Flow A)
- NEVER delete files or code without explicit user confirmation
Runrun.it
- Comments are plain text only — no Markdown
- Always include
TASK-{id} reference in commits, PRs, and comments
- Prints/evidências: hospedar sempre via Cloudinary (
runrunit_upload_image_cloudinary) e usar a secure_url; nunca colar caminho local do disco no comentário/PR (ver "Upload de prints/evidências via Cloudinary")
Git
- Always include
TASK-{id} reference in commits and PR
- VTEX IO (theme / app): não subir
"version" em ajustes/homolog; só alterar a versão ao ir para produção e sempre perguntar o incremento (patch/minor/major). No commit de produção: bump no manifest.json, CHANGELOG.md se existir, e primeira linha da mensagem = Release: {vendor}.{name}@{version} (antes do [TASK-…]). Ver Step F3
- Check
git status before committing — never commit unrelated files
- Never force push or amend unless explicitly asked
- Branch naming: depende do projeto (ver Step A3) — padrão
task{id} (ex.: task14003); omie usa feat/<descricao> (ex.: feat/blog-page), nunca task{id}
- Git commit workaround: ALWAYS use
& "C:\Program Files\Git\bin\git.exe" commit -F .git/COMMIT_MSG_TEMP instead of git commit -m "..." to avoid the Cursor --trailer injection issue on git < 2.32. Write the message to .git/COMMIT_MSG_TEMP first using the Write tool, including Made-with: Cursor as the last line. deco.cx / loja VFOR: add --no-verify to that command by default (see Step F3).
PR
- PR body uses full Markdown with the project template
- The PR template from the project must be followed exactly
Skills integration
- When the task involves deco.cx or VTEX, read the appropriate skill before executing
- Plataforma VTEX + CSS/estilo/layout/CSS Handles: SEMPRE usar a skill
vtex-css (seletores permitidos, CSS Handles, padrão do time para seletores legados em vtex.login/vtex.my-account)
- Task com link do Figma: usar a skill
figma-assets para extrair design, tipografia/espaçamentos exatos e assets (SVG/imagens) antes de implementar
- Validar/debugar no workspace VTEX IO (URL
{ws}--{conta}.myvtex.com): usar a skill vtex-io-workspace-debug — ela abre o workspace privado no navegador, espera o usuário logar e então debuga/valida/captura evidências
- Prints/evidências: usar a skill
upload-image-cloudinary (ou a ferramenta runrunit_upload_image_cloudinary) para hospedar imagens antes de referenciá-las
- Projeto omie (Next.js + Strapi):
- Branch/commit/PR/comentário —
omie-commit (skill global, em ~/.cursor/skills): padrão de branch (feat/<descricao>), commit (Conventional Commits + corpo detalhado), template de PR do omie e comentário no Runrun.it com hash do merge (deploy manual pela Omie via John). Usar sempre que for branchar/commitar/abrir PR/comentar em task do repo omie.
- Skills de implementação (project-scoped, em
C:\projetos\omie\.cursor\skills\), use conforme a task:
component-creator — criar/extrair/refatorar componentes React (front Next.js, Tailwind v4, DS)
strapi-single-cpts — criar/evoluir Single Types e CPTs no Strapi (cms/) + tipagem no front
page-builder-section-mapper — mapear uma URL em seções do page builder (screenshots + campos CMS)
section-performance-optimizer — otimizar seções do page builder em lotes de 5 UIDs (TBT/PageSpeed)
frontend-performance — diagnosticar/otimizar performance Next.js (Lighthouse, bundle, Core Web Vitals)
popup-form-template-creator — criar/editar popups e templates de formulário (mapeamento HubSpot)
legacy-lp-text-sync — sincronizar textos de LPs estáticas legadas com produção
legacy-lp-css-background-sync — trazer imagens de background (CSS) de LPs legadas da produção
legacy-lp-section-precos — ligar preços globais (Strapi) em LPs estáticas legadas
- Available skills (globais,
~/.cursor/skills): deco-section, deco-loader, deco-island, deco-app, deco-vtex, vtex-io-component, vtex-css, vtex-io-node-graphql, vtex-checkout, vtex-checkout-config, vtex-io-workspace-debug, figma-assets, omie-commit, upload-image-cloudinary, registrar-evidencias
- Skills globais ficam em
C:\Users\agencian1\.cursor\skills\{skill-name}\SKILL.md; skills project-scoped (ex.: omie) ficam em {repo}\.cursor\skills\{skill-name}\SKILL.md
- Follow the skill instructions exactly — they contain project-specific conventions and patterns
1---2name: runrunit-pr-commit3description: Full task lifecycle via Runrun.it — start tasks (fetch data, create branch, plan execution), develop with deco.cx/VTEX skills, and finish (commit, PR, comment, deliver). Use when the user provides a Runrun.it task link and wants to start, develop, commit, open a PR, or document a task.4---56# Runrun.it — Task Lifecycle (Start → Develop → Finish)78Two main flows:910- **Flow A — Start Task:** fetch task data, verify workspace, create branch, analyze requirements, plan execution11- **Flow B — Finish Task:** create commits, open PR, comment on task, deliver1213## Input1415| Campo | Obrigatório | Descrição |16|-------|-------------|-----------|17| **Link da task** | Sim | URL da tarefa (ex.: `https://runrun.it/en-US/tasks/14003`) ou ID numérico |18| **URLs antes/depois** | Não | Para evidências visuais no PR e na task (Flow B, Template A) |19| **Branch destino** | Não | Padrão: `development` |20| **Link da PR** | Não | URL da Pull Request (Bitbucket ou GitHub). Se não fornecido, é criado no Step F4. |21| **Link do workspace** | Não | URL de validação (ex.: `https://task14002--lojamm.myvtex.com/lancamentos`) |22| **Links extras** | Não | GTM, Figma, documentos ou qualquer link adicional relevante |23| **Prints/evidências** | Não | URLs de screenshots (prnt.sc, Cloudinary, etc.) |24| **Descrição da entrega** | Não | O que foi entregue, em linguagem de negócio. Se não fornecido, é derivado da task. |25| **Produção — tema/app novo** | Não | URL do **Admin** da versão **em produção** (setup), ex.: `https://{conta}.myvtex.com/admin/apps/{vendor}.{app}@{versao}/setup` |26| **Produção — tema/app anterior** | Não | URL do setup da versão **anterior** (referência para comparação ou rollback) |27| **Conta VTEX (para montar URL)** | Não | Ex.: `leeloo` — use quando souber `vendor.app@ver` mas faltar o host completo |2829---3031# Flow A — Start Task (Iniciar tarefa)3233Triggered when the user says "iniciar tarefa", "começar task", "pega essa task", or provides a Runrun.it link asking to start work.3435## Step A1 — Fetch task data from Runrun.it3637Extract the numeric ID from the URL (e.g. `.../tasks/14003` → `14003`).3839Call `runrunit_get_task` via MCP:4041```42server: user-runrunit-mcp43toolName: runrunit_get_task44arguments: { "id": <task_id> }45```4647From the response, extract:48- `title` — task title49- `id` — task ID50- `project_id` / `project_name` — project context (used to identify the correct workspace)51- `responsible_name` — assigned developer52- `tags` — tags to determine change type and technology53- `description` — detailed requirements54- `board_stage_name` — current stage5556Also fetch comments and subtasks for full context:5758```59server: user-runrunit-mcp60toolName: runrunit_list_task_comments61arguments: { "task_id": <task_id> }62```6364```65server: user-runrunit-mcp66toolName: runrunit_list_subtasks67arguments: { "task_id": <task_id> }68```6970## Step A2 — Verify workspace / project folder7172Before creating a branch, confirm the user is in the correct project folder.73741. Check the current working directory (`pwd` or workspace path from Cursor context).752. Cross-reference with the `project_name` from the task to identify the expected repository.763. Look for project indicators: `manifest.json` (VTEX IO), `deno.json`/`mod.ts` (deco.cx), `package.json`, `.git` folder.7778**If the workspace looks wrong:**79- STOP and ask the user: "O workspace atual é `{cwd}`, mas a task é do projeto `{project_name}`. Deseja continuar aqui ou trocar para outro diretório?"80- Do NOT proceed until the user confirms.8182**If the workspace looks correct:**83- Inform the user: "Workspace confirmado: `{cwd}` ({project_name})"8485## Step A3 — Create or checkout branch8687### Branch naming convention (POR PROJETO)8889O padrão de branch **depende do repositório**. Detecte o projeto (pelo `project_name` da task, pelo `git remote -v` ou pela pasta) e use a convenção certa. Chame o nome final de `{branch}`:9091| Projeto / repo | Convenção | Exemplo |92|---|---|---|93| Padrão (VTEX IO, deco.cx, geral) | `task{id}` | `task14003` |94| **omie** (Next.js + Strapi — `C:\projetos\omie`) | `{tipo}/{descricao-kebab}` — **NÃO** usar `task{id}` (ver skill `omie-commit`) | `feat/blog-page`, `feat/new-home-blog`, `fix/popup-form` |9596- No padrão `{tipo}/{descricao}`: `{tipo}` segue conventional commits (`feat`, `fix`, `refactor`, `docs`, `style`, `chore`) e `{descricao}` é um resumo curto em **kebab-case** derivado do título da task.97- Ao detectar o repositório **omie**, confirmar o nome com o usuário: "Projeto omie usa `{tipo}/<descricao>`. Sugiro `feat/{descricao}` (da task '{title}'). Confirma esse nome ou prefere outro?"98- Se não tiver certeza da convenção ou da descrição, **perguntar ao usuário** antes de criar a branch.99100### Passos1011021. Run `git status` to check for uncommitted changes.103 - If there are uncommitted changes, STOP and ask: "Existem alterações não commitadas na branch atual. Deseja fazer stash, commit ou descartar antes de trocar?"104 - Wait for user confirmation before proceeding.1051062. Definir `{branch}` conforme a convenção do projeto (tabela acima) e checar se já existe:107 ```108 git branch --list {branch}109 git branch -r --list "*/{branch}"110 ```1111123. **If branch exists locally:** ask the user: "A branch `{branch}` já existe. Deseja fazer checkout para ela?"113 - On confirmation: `git checkout {branch}`1141154. **If branch exists only on remote:** ask: "A branch `{branch}` existe no remoto. Deseja fazer checkout?"116 - On confirmation: `git checkout -b {branch} origin/{branch}`1171185. **If branch does not exist:** ask: "Vou criar a branch `{branch}` a partir de `{current_branch}`. Confirma?"119 - The base branch should typically be `development` or `main` — ask if unclear.120 - On confirmation: `git checkout -b {branch} {base_branch}`1211226. Confirm to the user: "Branch `{branch}` pronta. Trabalhando a partir de `{base_branch}`."123124## Step A4 — Analyze task and identify technology / skills125126Parse the task `title`, `description`, `tags`, and `comments` to determine:127128### Technology detection129130| Signal in task data | Technology | Relevant skills |131|---|---|---|132| `vtex`, `vtex io`, `store-theme`, `site editor`, `shelf`, `checkout` | VTEX IO | `vtex-io-component`, `vtex-css`, `vtex-io-node-graphql`, `vtex-checkout`, `vtex-checkout-config` |133| `css`, `estilo`, `style`, `layout`, `handle`, `seletor`, `tema`, `cor`, `responsiv` (em projeto VTEX) | VTEX IO CSS | `vtex-css` (+ `vtex-io-component` se criar componente) |134| `deco`, `deco.cx`, `fresh`, `section`, `loader`, `island` | deco.cx | `deco-section`, `deco-loader`, `deco-island`, `deco-app`, `deco-vtex` |135| `checkout`, `orderForm`, `checkout6-custom` | VTEX Checkout | `vtex-checkout`, `vtex-checkout-config` |136| `graphql`, `node`, `resolver`, `client`, `middleware` | VTEX IO Node/GraphQL | `vtex-io-node-graphql` |137| link do **Figma** (`figma.com/design/...`), `design`, `layout no figma`, `protótipo`, `mockup` | Design/Figma | `figma-assets` (+ skill de implementação da stack) |138| **omie** (projeto `C:\projetos\omie`), `next.js`/`nextjs`, `strapi`, `cms`, `page builder`/`section`, `landing page`/`LP`, `blog`, `popup`, `component`/`componente`, `TBT`/`performance`/`pagespeed` | omie (Next.js + Strapi) | Skills **do projeto omie** (project-scoped): `component-creator`, `strapi-single-cpts`, `page-builder-section-mapper`, `section-performance-optimizer`, `frontend-performance`, `popup-form-template-creator`, `legacy-lp-text-sync`, `legacy-lp-css-background-sync`, `legacy-lp-section-precos` |139140**Regra:** em qualquer tarefa da **plataforma VTEX (VTEX IO)** que envolva CSS/estilo/layout/CSS Handles, **sempre** incluir a skill **`vtex-css`** no plano (Step A5) e lê-la antes de editar CSS.141142**Regra (Figma):** se a task tiver um **link do Figma** (na descrição, comentários ou enviado pelo usuário), incluir a skill **`figma-assets`** no plano e usá-la para extrair design, tipografia/espaçamentos exatos e assets (SVG/imagens) antes de implementar.143144**Regra (omie):** quando o repositório for o **omie** (`C:\projetos\omie`, stack Next.js + Strapi):145- **Branch, commit, PR e comentário na task:** seguir a skill **`omie-commit`** (global, em `~/.cursor/skills`) — branch `feat/<descricao>` (ver Step A3, **não** `task{id}`), commit Conventional Commits com corpo detalhado (contexto/porquê), **descrição do PR com o template oficial do omie** (em vez do Step F4) e **comentário no Runrun.it com o hash do merge na `master`** (deploy manual pela Omie, avisado via John — em vez dos Templates A/B do Step F5).146- **Implementação:** as demais skills do omie são **project-scoped** e ficam em `C:\projetos\omie\.cursor\skills\{skill}\SKILL.md` (o Cursor as carrega automaticamente ao trabalhar nesse repo). Incluir a(s) skill(s) apropriada(s) no plano (Step A5) e **ler antes de executar**.147148### Task type detection149150| Signal | Type | Approach |151|---|---|---|152| `criar`, `novo`, `adicionar`, `implementar` | New feature | Create new files/components |153| `ajustar`, `corrigir`, `fix`, `bug` | Fix/adjustment | Find and modify existing code |154| `alterar`, `mudar`, `atualizar`, `layout` | Update | Modify existing components |155| `configurar`, `config`, `setup` | Configuration | Update config files, settings |156157### Codebase exploration158159Before presenting the plan, explore the project structure to understand what already exists:1601. List key directories (`ls`, `Glob`) to map the project layout.1612. If VTEX IO: check `manifest.json` for app name/version, `store/` for blocks, `react/` for components.1623. If deco.cx: check `deno.json`, `sections/`, `loaders/`, `islands/`, `apps/`.1634. Search for files related to the task (e.g., if task mentions "shelf", search for shelf-related components).164165## Step A5 — Present plan and ask for permission166167**CRITICAL: NEVER start coding without user approval.**168169Present a structured plan to the user:170171```172Tarefa: TASK-{id} — {title}173Projeto: {project_name}174Branch: task{id}175Tecnologia: {detected technology}176177Plano de execução:1781. {Step 1 — what will be created/modified and why}1792. {Step 2 — ...}1803. {Step 3 — ...}181182Arquivos que serão criados:183- {path/to/new/file.tsx} — {brief description}184185Arquivos que serão modificados:186- {path/to/existing/file.tsx} — {what changes}187188Skills que serão utilizadas:189- {skill name} — {why}190191Posso prosseguir com esse plano?192```193194Wait for the user to confirm, adjust, or reject the plan.195196## Step A6 — Execute task with appropriate skills197198After user approval, execute the plan step by step:1992001. **Read the relevant skill** before starting (e.g., `deco-section`, `vtex-io-component`, `vtex-css` para CSS/estilo em VTEX IO, `figma-assets` quando houver link do Figma).2012. **Follow the skill instructions** to create/modify files.2023. **After each significant change**, briefly inform the user what was done.2034. **Before creating new files:** confirm with the user ("Vou criar o arquivo `{path}`. OK?").2045. **Before deleting files or code:** ALWAYS ask ("Preciso remover `{path/code}`. Posso prosseguir?").2056. **If the task is ambiguous** at any point, stop and ask for clarification.206207### Permission rules during execution208209| Action | Permission required? |210|---|---|211| Read/search files | No |212| Modify existing file (small change) | No (inform after) |213| Modify existing file (large refactor) | Yes — ask before |214| Create new file | Yes — ask before |215| Delete file | **Always** — ask before |216| Delete code block | **Always** — ask before |217| Install dependency | Yes — ask before |218| Change config files | Yes — ask before |219220## Step A7 (optional) — Move task stage on Runrun.it221222If the user asks, move the task to "In Progress" or the appropriate stage:223224```225server: user-runrunit-mcp226toolName: runrunit_move_task_stage227arguments: { "task_id": <task_id>, "board_stage_name": "In Progress" }228```229230---231232# Flow B — Finish Task (Finalizar tarefa)233234Triggered when the user says "faz commit", "abre PR", "entrega a task", "comenta na task", or any finish-related action. Steps are numbered F1–F6 to distinguish from Flow A.235236## Step F1 — Fetch task data from Runrun.it237238Extract the numeric ID from the URL (e.g. `.../tasks/13631` → `13631`).239240Call `runrunit_get_task` via MCP:241242```243server: user-runrunit-mcp244toolName: runrunit_get_task245arguments: { "id": <task_id> }246```247248From the response, extract:249- `title` — task title (used for PR title and commit message)250- `id` — task ID (used for references)251- `project_id` / `project_name` — project context252- `responsible_name` — assigned developer253- `tags` — tags to determine change type254- `description` — detailed requirements (useful for PR description)255- `board_stage_name` — current stage256257Also fetch comments for extra context:258259```260server: user-runrunit-mcp261toolName: runrunit_list_task_comments262arguments: { "task_id": <task_id> }263```264265## Step F2 — Determine change type266267Map the task info to one of the PR change types:268269| Tag / Keyword in title | Type |270|---|---|271| `bug`, `fix`, `correção` | 🐛 Correção de bug |272| `feature`, `novo`, `criar`, `adicionar` | ✨ Novo recurso |273| `refactor`, `refatoração`, `melhoria` | ♻️ Refatoração |274| `doc`, `documentação` | 📖 Documentação |275| `layout`, `css`, `estilo`, `visual`, `ajust` | 🎨 Alteração de layout |276277If ambiguous, ask the user or default to 🎨 Alteração de layout.278279## Step F3 — Create semantic commits280281### Commit message format282283Formato padrão (qualquer stack):284285```286[TASK-{id}] {type}: {short description}287288{optional body with more details}289```290291**Formato VTEX IO (theme / app publicável) — a linha `Release:` vai no INÍCIO, antes do assunto:**292293```294Release: {vendor}.{name}@{version}295296[TASK-{id}] {type}: {short description}297298{optional body with more details}299```300301Where `{type}` follows conventional commits:302- `fix:` for bug fixes303- `feat:` for new features304- `refactor:` for refactoring305- `docs:` for documentation306- `style:` for layout/visual changes307308### Example (VTEX IO — ajuste/homolog, SEM mudar versão)309310```311[TASK-13631] style: adjust mobile shelf/search with sizes312313Updated shelf and search layouts for mobile viewport314to properly display product size variations.315```316317### Example (VTEX IO — commit de PRODUÇÃO, com bump confirmado)318319```320Release: store.theme-mm@3.5.12321322[TASK-13631] style: adjust mobile shelf/search with sizes323324Updated shelf and search layouts for mobile viewport325to properly display product size variations.326```327328### Example (não-VTEX IO, ex.: deco.cx)329330```331[TASK-13631] style: adjust mobile shelf/search with sizes332333Updated shelf and search layouts for mobile viewport334to properly display product size variations.335```336337### VTEX IO — versão e release (themes / apps da loja)338339Quando o repositório for um app **VTEX IO** (raiz com `manifest.json` contendo `vendor`, `name`, `version` e `builders`), ao preparar o commit de entrega de task:3403411. **Detectar** o app: `{vendor}.{name}` e a versão atual em `"version"` (semver `x.y.z`).3422. **NÃO subir a versão em qualquer ajuste.** Durante o desenvolvimento/ajustes/homolog (commits de branch, workspace de teste), **manter a `version` do `manifest.json` como está**. Commits comuns da task **não** alteram o `manifest.json` nem levam linha `Release:`.3433. **Só alterar a versão quando for para PRODUÇÃO** (publicação do tema/app na conta principal — `vtex publish`/deploy). Só nesse momento se faz o bump no `manifest.json`.3444. **Ao ir para produção, SEMPRE perguntar ao usuário qual incremento** (não decidir sozinho): patch, minor ou major.345346 Pergunte assim (sugerindo uma opção com base na mudança, mas aguardando confirmação):347348 ```349 Vou publicar {vendor}.{name} (versão atual {x.y.z}).350 Qual incremento de versão?351 - patch → {x.y.(z+1)} (correções, ajustes de layout/CSS)352 - minor → {x.(y+1).0} (novas features/blocos compatíveis)353 - major → {(x+1).0.0} (breaking changes)354 ```355356 - **patch**: correções, ajustes de layout/CSS, pequenas correções.357 - **minor**: novas features ou blocos visíveis, mudanças compatíveis.358 - **major**: breaking changes.359360 Só aplicar o bump depois da resposta do usuário.3615. **`CHANGELOG.md`:** se existir no repo, acrescentar entrada com **TASK-{id}**, resumo da mudança e o número da nova versão **apenas no commit de release/produção** (seguir o padrão já usado no arquivo).3626. **Linha `Release:` só no commit de produção.** Quando o bump acontecer, a linha `Release:` é a **primeira linha** da mensagem (vem **antes** do `[TASK-…]`), seguida de uma linha em branco e depois o assunto/corpo:363364 ```365 Release: {vendor}.{name}@{version}366367 [TASK-{id}] {type}: {short description}368 ```369370 Exemplo: `Release: store.theme-mm@3.5.12` (use a versão **nova** confirmada e já refletida no `manifest.json`). Não usar a linha `Release:` como rodapé/trailer — neste fluxo ela é o **início** da mensagem. Em commits que **não** são de produção, **não** incluir a linha `Release:`.3717. **Staging (commit de produção):** incluir `manifest.json` (e `CHANGELOG.md` se alterado) **no mesmo commit** do release.3728. **Monorepo / vários apps:** aplicar bump e linha `Release` apenas no(s) app(s) que vão para produção; se o mesmo release tocar **dois** apps publicáveis, usar duas linhas `Release:` no topo, uma por app.373374**Resumo:** ajuste/homolog = sem mudar versão e sem `Release:`. Produção = perguntar o incremento (patch/minor/major), fazer o bump no `manifest.json` e usar a linha `Release:` no topo do commit.375376### How to commit3773781. Run `git status` and `git diff` to understand changes3792. Run `git log --oneline -5` to follow existing commit style3803. Stage relevant files: `git add <files>`3814. Write the commit message to a temp file, then commit with `-F`:382383```powershell384# Write message to temp file (use the Write tool to create .git/COMMIT_MSG_TEMP)385# Then commit using git.exe directly to bypass Cursor --trailer injection:386& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP387```388389**IMPORTANT — Cursor `--trailer` workaround:**390Cursor automatically injects `--trailer 'Made-with: Cursor'` into every `git commit` call.391Git versions older than 2.32 do NOT support `--trailer` and will fail with `error: unknown option 'trailer'`.392393To work around this:3941. Write the commit message to `.git/COMMIT_MSG_TEMP` using the Write tool3952. Append `Made-with: Cursor` as the last line of the message (as a manual trailer)3963. Call `git.exe` directly via its full path to bypass Cursor's wrapper:397 `& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP`3984. If the full path doesn't work, try: `cmd /c "git.exe commit -F .git\COMMIT_MSG_TEMP"`3995. If hooks (lint, etc.) block the commit in projetos **sem** a exceção abaixo, use `commit ... --no-verify` **only** when the failure is from hooks, not the trailer (never use `--no-verify` to hide real errors the user should fix in VTEX/Node projects unless agreed).400401**deco.cx — loja / projeto VFOR (e projetos Deco equivalentes):** nos commits deste contexto, use **quase sempre** `--no-verify` com o `git.exe` e `-F` acima, porque os *hooks* do repositório (Deno, fmt, checagens longas) costumam atrapalhar o fluxo de tarefa no agente. Comando padrão:402403```powershell404& "C:\Program Files\Git\bin\git.exe" commit -F .git\COMMIT_MSG_TEMP --no-verify405```406407- Confirme com o usuário o workspace: `deno.json` / `mod.ts` + repositório da loja Deco **VFOR** = aplicar o padrão.408- Não use `--no-verify` por padrão em repositórios **VTEX IO** (store theme, apps) ou outros se o time exigir hooks — a regra geral de hook failure acima continua.409410This applies to ALL git commit operations in this skill (commit, amend, etc.) — ajuste `--no-verify` conforme a stack do repositório aberto.411412## Step F4 — Open GitHub PR413414### PR title format415416```417[{Project Name}] {task title}418```419420Example: `[Clovis B2C] vitrine/pesquisa mobile com numerações`421422### PR body template423424> **Exceção por projeto — omie:** se o repositório for o **omie** (`C:\projetos\omie`), **NÃO** usar o template abaixo. Usar o **template oficial do omie** definido na skill `omie-commit` (seção "Pull Request"). O template abaixo é o padrão para os demais projetos.425426Use this exact template, filling in data from the task:427428```markdown429# Título do PR: [{Project Name}] {task title}430431## 🎯 Tipo de Mudança432433> Marque o tipo de mudança que este PR introduz434435- [{x or space}] 🐛 **Correção de bug** (alteração que corrige um problema)436- [{x or space}] ✨ **Novo recurso** (alteração que adiciona uma funcionalidade)437- [{x or space}] ♻️ **Refatoração** (uma alteração de código que não corrige um bug nem adiciona um recurso)438- [{x or space}] 📖 **Documentação** (atualizações na documentação)439- [{x or space}] 🎨 Alteração de layout (Mudança no layout sem alterar o comportamento de uma funcionalidade existente)440441---442443## 📝 Descrição444445> {Description derived from task title, description, and comments. Summarize what was done.}446447---448449## 📸 Evidências Visuais (Se aplicável)450451> Adicione capturas de tela, GIFs ou vídeos para demonstrar as mudanças de UI/UX.452453**Antes:**454455456**Depois:**457458459---460461## ✅ Checklist de Qualidade462463- [x] Meu código segue as diretrizes deste projeto.464- [x] Realizei uma revisão do meu próprio código.465- [ ] Testei o fluxo de navegação.466- [ ] Comentei meu código nas áreas de difícil compreensão.467- [x] Minhas alterações não geram novos warnings.468469---470471## 🔗 Referências472473> Adicione links para tarefas, épicos ou outras referências.474475- **Tarefa:** [TASK-{id}](https://runrun.it/en-US/tasks/{id})476- **Versão publicável (VTEX IO):** `{vendor}.{name}@{version}` — usar a mesma versão do `manifest.json` deste PR (se aplicável)477- **Design no Figma:** [Link para o design]({figma_url or "https://..."})478- **Documento:** [Link]({doc_url or "https://..."})479```480481### Create the PR482483```bash484git push -u origin HEAD485486gh pr create --title "[{Project}] {task title}" --body "$(cat <<'EOF'487{filled template above}488EOF489)"490```491492Return the PR URL to the user.493494## Step F5 — Update task on Runrun.it495496### Save PR link in the task497498```499server: user-runrunit-mcp500toolName: runrunit_update_task501arguments: { "id": <task_id>, "task": { "link_da_branch": "<pr_url>" } }502```503504### Post comment on the task505506```507server: user-runrunit-mcp508toolName: runrunit_create_comment509arguments: {510 "task_id": <task_id>,511 "text": "<comment text>"512}513```514515> **Exceção por projeto — omie:** se a task for do **omie** (`C:\projetos\omie`), **NÃO** usar os Templates A/B abaixo. Usar o **template de comentário do omie** na skill `omie-commit` (seção "Comentário no Runrun.it"), que **exige o hash do merge na `master`** — o deploy do omie é **manual** (time da Omie publica, avisado via John, usando esse hash).516517Choose the comment template based on context:518519#### Template A — Comentário técnico (default para evidências antes/depois)520521Use when the user provides before/after URLs and the focus is on visual evidence of changes.522523```524Resumo do que foi feito:525{Summary of changes based on commit messages and PR description}526527Link da PR: {pr_url}528529Passo a passo para testar:5301. Acesse {test_url or workspace URL}5312. {Step to reproduce/validate}5323. {What to check}533534Evidências:535Antes (Desktop): {url}536Depois (Desktop): {url}537Antes (Mobile): {url}538Depois (Mobile): {url}539```540541#### Template B — Comentário de entrega (handoff para validação)542543Use when the user finishes a task and wants to document what was delivered, provide validation links (workspace, GTM, etc.), explain how to validate, attach evidence prints, **or document theme/app versions live in production (VTEX Admin setup URLs)**. This is the preferred template when the user says "comenta na task", "entrega", "passa pra validação", "foi pra produção", or provides PR + prints + workspace links.544545```546Atualização TASK-{id} - {task title}547548O que foi entregue:549- {Bullet point describing deliverable 1 in business language, not technical jargon}550- {Bullet point describing deliverable 2}551- {Add as many bullets as needed}552553Links:554- Pull Request (revisão do código): {pr_url}555- Ambiente de validação (workspace): {workspace_url}556{Include any extra links the user provides, e.g.:}557- GTM: {gtm_url}558- Figma: {figma_url}559- Documento: {doc_url}560561{If the theme or store app was deployed to production on the main account, include the VTEX Admin setup URLs — see block below.}562563Produção (VTEX Admin):564Versão nova do tema (ou app)565https://{conta}.myvtex.com/admin/apps/{vendor}.{nome-do-app}@{versao_nova}/setup566567Versão antiga do tema (ou app)568https://{conta}.myvtex.com/admin/apps/{vendor}.{nome-do-app}@{versao_antiga}/setup569570Como validar:5711) {Step-by-step instruction with specific actions to verify deliverable 1}5722) {Step-by-step instruction to verify deliverable 2}573{Number of steps should match the deliverables; be specific about what to check and where}574575Evidências (prints):576{url_1}577{url_2}578{List each screenshot/print URL on its own line}579580Ou, quando quiser destacar um único capture de produção ou do Admin:581582Print:583https://prnt.sc/exemplo584```585586**Exemplo completo (produção + print) — texto simples, sem Markdown:**587588```589Atualização TASK-12345 - Ajuste vitrine590591O que foi entregue:592- ...593594Links:595- Pull Request (revisão do código): https://bitbucket.org/...596597Produção (VTEX Admin):598Versão nova do tema599https://leeloo.myvtex.com/admin/apps/leeloo.store-theme@1.5.7/setup600601Versão antiga do tema602https://leeloo.myvtex.com/admin/apps/leeloo.store-theme@1.5.6/setup603604Como validar:6051) ...606607Print:608https://prnt.sc/rwQq3HEvKLbr609```610611**Guidelines for Template B:**612- Write "O que foi entregue" in **business language** — explain what the user/stakeholder sees, not what code was changed.613- **Produção (theme/app):** se a entrega **foi para produção** na conta principal, inclua o bloco "Produção (VTEX Admin)" com **versão nova** e, quando fizer sentido, **versão anterior** (rollback/referência). Se o usuário não passar as URLs, monte com `https://{conta}.myvtex.com/admin/apps/{vendor}.{app}@{semver}/setup` usando conta + app + versões do `manifest`/`Release:` ou do que foi publicado. **Não** incluir o bloco se a task foi só homolog/workspace de teste.614- "Links" section is flexible: always include PR and workspace if provided; add any extra links the user passes (GTM, Figma, docs, etc.).615- "Como validar" steps should be actionable and map to the deliverables — tell the validator exactly where to go and what to check.616- **Evidências / Print:** URLs puras (Runrun.it sem Markdown). Use "Print:" com uma linha de URL quando for uma evidência única (ex.: tela do Admin).617- If the user provides the content for each section, use it as-is. If not, derive it from the task data, PR description, and commit messages.618- Ask the user for clarification if the deliverables or validation steps are unclear.619620**URL pattern (Admin):** `https://{conta}.myvtex.com/admin/apps/{vendor}.{nome}@{versao}/setup` — use o semver que aparece no VTEX Admin ou na linha `Release:` do commit / `manifest.json` publicado.621622## Step F6 (optional) — Move task stage623624If the user asks, move the task to the next stage:625626```627server: user-runrunit-mcp628toolName: runrunit_move_task_stage629arguments: { "task_id": <task_id>, "board_stage_name": "Manager Validation" }630```631632## Upload de prints/evidências via Cloudinary633634Sempre que houver **prints/screenshots** para anexar (na task, no PR ou nos docs), hospedar via **Cloudinary** com a ferramenta MCP `runrunit_upload_image_cloudinary` e usar a `secure_url` retornada. Ver também a skill `upload-image-cloudinary`.635636### Ferramenta MCP637638```639server: user-runrunit-mcp640toolName: runrunit_upload_image_cloudinary641arguments: {642 "file_path": "<caminho absoluto ou relativo da imagem no disco>",643 "public_id": "task-{id}-{descricao}-{before|after}-{viewport}" // opcional644}645```646647- **Retorno:** `{ "secure_url": "https://res.cloudinary.com/.../arquivo.png" }` — usar **apenas** a `secure_url` (HTTPS pública).648- `public_id` é opcional; se informado, padronizar (ex.: `task-14003-vitrine-depois-mobile`). Reenviar com o mesmo `public_id` sobrescreve a imagem.649- Pré-requisito: variáveis `CLOUDINARY_CLOUD_NAME`, `CLOUDINARY_API_KEY`, `CLOUDINARY_API_SECRET` configuradas no MCP (`mcp.json`). Se o upload falhar, verificar essas credenciais e se o servidor `user-runrunit-mcp` está **ready** (não "loading").650651### De onde vêm os arquivos652653| Origem | Como obter o `file_path` |654|---|---|655| Print que o usuário já tem no disco | Usar o caminho informado (ex.: `C:\Users\...\print.png`) |656| Captura de página web (antes/depois) | `browser_take_screenshot` via browser MCP → usar o caminho retornado |657| Múltiplos viewports | Capturar em mobile (~375px) e desktop (~1440px) e subir cada um |658659### Fluxo6606611. Reunir os arquivos de imagem (do usuário ou capturados via browser MCP).6622. Para **cada** imagem, chamar `runrunit_upload_image_cloudinary` e guardar a `secure_url`.6633. (Opcional) Validar o link com um HEAD HTTP — deve retornar **200** e `Content-Type: image/*`.6644. Usar as URLs:665 - **Comentário da task (Runrun.it):** texto simples, uma URL por linha (Template A "Evidências" ou Template B "Evidências (prints)" / "Print:").666 - **Corpo do PR (Markdown):** `` / ``.667668### Exemplo669670```6711) browser_take_screenshot → C:\...\depois-mobile.png6722) runrunit_upload_image_cloudinary { file_path: "C:\...\depois-mobile.png", public_id: "task-14003-vitrine-depois-mobile" }673 → secure_url: https://res.cloudinary.com/xxxx/image/upload/v.../task-14003-vitrine-depois-mobile.png6743) Usar essa URL no comentário da task (linha pura) e no PR ()675```676677## Partial execution678679The user may request only part of the flow:680681### Flow A — Start triggers682683| Request | Steps to execute |684|---|---|685| "Iniciar tarefa" / "Começar task" / "Pega essa task" | A1 → A6 (full start flow) |686| "Pega dados da task" | A1 only |687| "Cria a branch" / "Checkout pra task" | A1 → A3 |688| "Analisa a task" / "O que precisa fazer?" | A1, A4 → A5 (analyze + plan, no branch) |689| "Inicia e já começa a codar" | A1 → A6 (full start + execute) |690691### Flow B — Finish triggers692693| Request | Steps to execute | Comment template |694|---|---|---|695| "Faz commit" | F1 → F3 | — |696| "Abre PR" | F1 → F4 | — |697| "Abre PR e comenta na task" | F1 → F5 | Template A or B (ask if unclear) |698| "Faz tudo" / "Finaliza" | F1 → F6 | Template A or B (ask if unclear) |699| "Só comenta na task" | F1, F5 | Template A or B (ask if unclear) |700| "Entrega a task" / "Passa pra validação" | F1, F5 (with user-provided PR/links) | **Template B** |701| "Comenta com PR e prints" | F1, F5 | **Template B** |702703### Combined triggers704705| Request | Steps to execute |706|---|---|707| "Pega a task e faz tudo" | A1 → A6, then F1 → F6 when done |708| "Inicia, desenvolve e abre PR" | A1 → A6, then F1 → F4 |709710Always confirm with the user which steps to perform if unclear.711712## MCP tools reference713714| Tool | Purpose |715|---|---|716| `runrunit_get_task` | Fetch task data (title, description, tags, stage) |717| `runrunit_list_task_comments` | Get task comments for context |718| `runrunit_list_subtasks` | List subtasks of a parent task |719| `runrunit_update_task` | Save PR link (`link_da_branch`) in the task |720| `runrunit_create_comment` | Post comment on the task (plain text) |721| `runrunit_create_external_comment` | Post comment on guest/external channel |722| `runrunit_move_task_stage` | Move task to next board stage |723| `runrunit_upload_image_cloudinary` | Upload screenshot, returns `secure_url` |724725## Important rules726727### Permission & safety728- **ALWAYS ask permission** before creating files, deleting files/code, installing dependencies, or changing config files729- **ALWAYS verify workspace** before creating/checking out branches — never operate on the wrong repo730- **ALWAYS check for uncommitted changes** before switching branches731- **NEVER start coding without presenting a plan** and getting user approval (Flow A)732- **NEVER delete files or code** without explicit user confirmation733734### Runrun.it735- Comments are **plain text only** — no Markdown736- Always include `TASK-{id}` reference in commits, PRs, and comments737- **Prints/evidências:** hospedar sempre via Cloudinary (`runrunit_upload_image_cloudinary`) e usar a `secure_url`; nunca colar caminho local do disco no comentário/PR (ver "Upload de prints/evidências via Cloudinary")738739### Git740- Always include `TASK-{id}` reference in commits and PR741- **VTEX IO (theme / app):** **não** subir `"version"` em ajustes/homolog; só alterar a versão **ao ir para produção** e **sempre perguntar** o incremento (patch/minor/major). No commit de produção: bump no `manifest.json`, `CHANGELOG.md` se existir, e **primeira linha** da mensagem = `Release: {vendor}.{name}@{version}` (antes do `[TASK-…]`). Ver Step F3742- Check `git status` before committing — never commit unrelated files743- Never force push or amend unless explicitly asked744- Branch naming: **depende do projeto** (ver Step A3) — padrão `task{id}` (ex.: `task14003`); **omie** usa `feat/<descricao>` (ex.: `feat/blog-page`), nunca `task{id}`745- **Git commit workaround:** ALWAYS use `& "C:\Program Files\Git\bin\git.exe" commit -F .git/COMMIT_MSG_TEMP` instead of `git commit -m "..."` to avoid the Cursor `--trailer` injection issue on git < 2.32. Write the message to `.git/COMMIT_MSG_TEMP` first using the Write tool, including `Made-with: Cursor` as the last line. **deco.cx / loja VFOR:** add `--no-verify` to that command by default (see Step F3).746747### PR748- PR body uses **full Markdown** with the project template749- The PR template from the project must be followed exactly750751### Skills integration752- When the task involves deco.cx or VTEX, **read the appropriate skill** before executing753- **Plataforma VTEX + CSS/estilo/layout/CSS Handles:** SEMPRE usar a skill `vtex-css` (seletores permitidos, CSS Handles, padrão do time para seletores legados em `vtex.login`/`vtex.my-account`)754- **Task com link do Figma:** usar a skill `figma-assets` para extrair design, tipografia/espaçamentos exatos e assets (SVG/imagens) antes de implementar755- **Validar/debugar no workspace VTEX IO (URL `{ws}--{conta}.myvtex.com`):** usar a skill `vtex-io-workspace-debug` — ela abre o workspace privado no navegador, **espera o usuário logar** e então debuga/valida/captura evidências756- **Prints/evidências:** usar a skill `upload-image-cloudinary` (ou a ferramenta `runrunit_upload_image_cloudinary`) para hospedar imagens antes de referenciá-las757- **Projeto omie (Next.js + Strapi):**758 - **Branch/commit/PR/comentário — `omie-commit`** (skill **global**, em `~/.cursor/skills`): padrão de branch (`feat/<descricao>`), commit (Conventional Commits + corpo detalhado), **template de PR do omie** e **comentário no Runrun.it com hash do merge** (deploy manual pela Omie via John). Usar sempre que for branchar/commitar/abrir PR/comentar em task do repo omie.759 - Skills de **implementação** (project-scoped, em `C:\projetos\omie\.cursor\skills\`), use conforme a task:760 - `component-creator` — criar/extrair/refatorar componentes React (front Next.js, Tailwind v4, DS)761 - `strapi-single-cpts` — criar/evoluir Single Types e CPTs no Strapi (`cms/`) + tipagem no front762 - `page-builder-section-mapper` — mapear uma URL em seções do page builder (screenshots + campos CMS)763 - `section-performance-optimizer` — otimizar seções do page builder em lotes de 5 UIDs (TBT/PageSpeed)764 - `frontend-performance` — diagnosticar/otimizar performance Next.js (Lighthouse, bundle, Core Web Vitals)765 - `popup-form-template-creator` — criar/editar popups e templates de formulário (mapeamento HubSpot)766 - `legacy-lp-text-sync` — sincronizar textos de LPs estáticas legadas com produção767 - `legacy-lp-css-background-sync` — trazer imagens de background (CSS) de LPs legadas da produção768 - `legacy-lp-section-precos` — ligar preços globais (Strapi) em LPs estáticas legadas769- Available skills (globais, `~/.cursor/skills`): `deco-section`, `deco-loader`, `deco-island`, `deco-app`, `deco-vtex`, `vtex-io-component`, `vtex-css`, `vtex-io-node-graphql`, `vtex-checkout`, `vtex-checkout-config`, `vtex-io-workspace-debug`, `figma-assets`, `omie-commit`, `upload-image-cloudinary`, `registrar-evidencias`770- Skills globais ficam em `C:\Users\agencian1\.cursor\skills\{skill-name}\SKILL.md`; skills **project-scoped** (ex.: omie) ficam em `{repo}\.cursor\skills\{skill-name}\SKILL.md`771- Follow the skill instructions exactly — they contain project-specific conventions and patterns