jhincapie/egm-cursor

Apenas mantenedor. Puxa novas alterações upstream de marcus-darden/egm para este port Cursor em um branch de revisão, reaplicando as renomeações e adaptações Cursor do port, e abre um PR para Juan. Execute apenas quando digitado como /egm-sync-upstream.

O que é egm-cursor?

Esta skill automatiza a sincronização de alterações do repositório upstream (marcus-darden/egm) para um port específico do Cursor, preservando renomeações de diretórios, adaptações para o Cursor e arquivos exclusivos do port. Ela é projetada para ser executada exclusivamente pelo mantenedor Juan, mediante o comando `/egm-sync-upstream`, e garante que o fluxo de trabalho nunca modifique o branch `main` diretamente. A skill clona o upstream, mapeia arquivos alterados, executa merge com três vias para preservar as adaptações Cursor em linhas não tocadas, atualiza o ponteiro UPSTREAM_COMMIT, executa verificações de integridade e gera um relatório detalhado (SYNC-REPORT.md) com itens aplicados, adaptados, ignorados e sinalizados para revisão manual. Por fim, cria um branch `sync/upstream-<sha>` e abre um Pull Request no GitHub para que Juan revise e mescle. Ela reside em `.cursor/skills/` e é específica do projeto, nunca sendo instalada globalmente.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jhincapie/egm-cursor/tree/HEAD/.cursor/skills/egm-sync-upstream

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Sincronização Upstream EGM

Traga alterações de marcus-darden/egm para este port sem perder as renomeações, adaptações Cursor ou arquivos exclusivos do port. Leia primeiro o AGENTS.md na raiz do repositório: ele é o livro de regras que esta skill aplica. Esta skill reside em .cursor/skills/, portanto é local ao projeto; o install.sh nunca a instala.

Invoque como /egm-sync-upstream [--dry-run] [upstream-ref]. upstream-ref padrão é upstream main. Com --dry-run, execute as Etapas 1 a 4 e imprima o plano; não altere nada.

Regras rígidas

  1. Nunca faça push para main. Todo o trabalho acontece em sync/upstream-<shortsha>; Juan mescla o PR.
  2. Nunca sobrescreva um arquivo exclusivo do port (lista em AGENTS.md). Se o upstream alterou algo que esses arquivos espelham (por exemplo, a seção de instalação do README upstream), descreva no relatório em vez disso.
  3. Não adivinhe. Novas skills ou agentes upstream, arquivos upstream deletados, arquivos upstream renomeados e conflitos de merge são sinalizados para Juan com os caminhos exatos, sem resolver inventando um nome ou escolhendo um lado.
  4. Mantenha a atribuição. LICENSE mantém ambas as linhas de copyright; UPSTREAM_COMMIT só é movido quando o branch realmente contém as alterações upstream.

Auxiliares

<skill-dir> é a pasta que contém este arquivo.

  • python3 <skill-dir>/scripts/port_names.py path <upstream-path>... mapeia caminhos upstream para caminhos do port e informa quando um caminho é exclusivo do port, não portado ou novo.
  • python3 <skill-dir>/scripts/port_names.py merge <clone> <old> <new> <upstream-path> [--write] faz merge com três vias de uma alteração de arquivo upstream em seu arquivo do port (base e theirs são reescritos em nomes do port primeiro, ours é o arquivo do port), permitindo que adaptações Cursor em linhas não tocadas sobrevivam. Saída 0 limpa, 1 marcadores de conflito deixados, 3 nada a fazer (exclusivo do port, não portado ou novo).
  • python3 <skill-dir>/scripts/port_names.py rewrite <file> / check <file>... reescreve nomes em texto ou lista nomes de barra antigos remanescentes.
  • bash <skill-dir>/scripts/check_port.sh executa todas as verificações do port (Etapa 7).

Fluxo de trabalho

Progresso da sincronização EGM:
- [ ] Etapa 1: working tree limpo, em um main atualizado
- [ ] Etapa 2: upstream clonado em um diretório temporário; old = UPSTREAM_COMMIT, new = HEAD upstream
- [ ] Etapa 3: entradas do CHANGELOG desde old lidas; arquivos alterados listados com status
- [ ] Etapa 4: cada arquivo alterado mapeado e classificado (merge / sinalizar / pular)
- [ ] Etapa 5: branch sync/upstream-<shortsha> criado; merges aplicados; adaptações re-verificadas
- [ ] Etapa 6: UPSTREAM_COMMIT atualizado
- [ ] Etapa 7: check_port.sh passa
- [ ] Etapa 8: SYNC-REPORT.md escrito
- [ ] Etapa 9: branch enviado; PR aberto com gh; Juan notificado

Etapa 1: Início limpo

git status --porcelain deve estar vazio e o branch atual main, atualizado com origin/main (git fetch origin && git status -sb). Caso contrário, pare e informe a Juan o que está sujo. Não faça stash do trabalho dele.

Etapa 2: Buscar upstream

tmp="$(mktemp -d)"
git clone --quiet https://github.com/marcus-darden/egm.git "$tmp/upstream"
old="$(cat UPSTREAM_COMMIT)"; new="$(git -C "$tmp/upstream" rev-parse ${REF:-HEAD})"

Se old == new, reporte "upstream não tem novos commits desde " e pare (sem branch, sem PR). Se old não é ancestral de new (git -C "$tmp/upstream" merge-base --is-ancestor $old $new), upstream reescreveu o histórico: pare e sinalize.

Etapa 3: Ler o que mudou

  • git -C "$tmp/upstream" log --oneline $old..$new
  • git -C "$tmp/upstream" diff --name-status -M $old $new
  • As novas entradas do CHANGELOG.md (tags após a que contém old). O CHANGELOG explica por que; cite as linhas relevantes no relatório.

Etapa 4: Mapear e classificar cada arquivo

Execute port_names.py path em cada caminho upstream alterado, em seguida coloque cada um em um balde:

Status upstream e mapeamentoBalde
M, mapeia para um arquivo existente do portmerge
A, mapeia para uma pasta de skill conhecida (por exemplo, um novo asset em skills/goldfish/)merge (cria o arquivo)
A, nova skill, agente ou walkthrough (nota "NEW")sinalizar: Juan escolhe o nome egm- e se deve portar
D (deletado upstream)sinalizar: não deletar o arquivo do port
R (renomeado upstream)sinalizar: mostrar caminhos antigo e novo e o caminho do port
nota de exclusivo do port ou não portadopular (descreva a alteração se for relevante, como texto de instalação do README)
LICENSEmerge, então confirme que ambas as linhas de copyright permanecem

Com --dry-run, imprima esta tabela e a lista de commits, então pare.

Etapa 5: Aplicar em um branch

git switch -c "sync/upstream-${new:0:7}"
python3 <skill-dir>/scripts/port_names.py merge "$tmp/upstream" $old $new <upstream-path> --write

Execute o merge uma vez por arquivo merge. Na saída 1, deixe os marcadores de conflito fora do commit: restaure o arquivo (git checkout -- <port-path>), e registre o hunk de conflito no relatório para Juan. Após mesclar, releia cada arquivo tocado para as adaptações Cursor listadas em AGENTS.md (texto de spawn da Task-tool, readonly: true em agentes, AGENTS.md junto a CLAUDE.md, revisores ignorando AGENTS.md e .cursor/rules/, /review não /code-review, a linha Cursor em runtimes.md). Se o upstream adicionou um novo local que precisa de uma (por exemplo, uma nova consulta a CLAUDE.md, uma nova linha tools: em um agente, uma nova instrução de spawn exclusiva do Claude), aplique a mesma adaptação e liste-a em "adaptado". Faça commit em grupos lógicos com mensagens que citem commits upstream.

Etapa 6: Mover o ponteiro

Escreva new em UPSTREAM_COMMIT apenas se todos os arquivos merge foram mesclados limpos ou seu conflito foi registrado. Faça commit disso por último.

Etapa 7: Verificar

bash <skill-dir>/scripts/check_port.sh. Ele verifica nome igual à pasta, avalia JSON, check_gate.py (BLOCKED então GO), nomes de barra antigos remanescentes, e uma instalação de teste em um diretório temporário (que não deve conter esta skill). Corrija falhas causadas pelo merge; qualquer outra coisa vai no relatório.

Etapa 8: SYNC-REPORT.md

Escreva SYNC-REPORT.md na raiz do repositório no branch, e use o mesmo texto que o corpo do PR:

# Sincronização upstream: <old7>..<new7>

Commits upstream: <lista>
CHANGELOG: <linhas citadas>

## Aplicados
- <caminho do port> <- <caminho upstream>: <uma linha>
## Adaptados para Cursor
- <caminho do port>: <qual adaptação e por que>
## Pulados
- <caminho upstream>: <exclusivo do port | não portado>, <o que mudou, se for relevante>
## Sinalizados para Juan
- <nova skill/agente, deleção, renomeação, conflito>: <caminhos, o hunk, a pergunta>
## Verificações
<resumo do check_port.sh>
## Perguntas em aberto
- <...>

Etapa 9: Enviar e abrir o PR

git push -u origin "sync/upstream-${new:0:7}"
gh pr create --base main --head "sync/upstream-${new:0:7}" --title "Sincronizar upstream marcus-darden/egm ${old:0:7}..${new:0:7}" --body-file SYNC-REPORT.md

Informe a Juan a URL do PR, as contagens (aplicados, adaptados, pulados, sinalizados) e os itens sinalizados. Não mescle o PR. Remova o clone temporário.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

jhincapie/egm-cursor

Runs a brutally critical code review of a diff, PR, or set of files, actively hostile to slop, vague names, silently swallowed errors, and stretches of 10 or more lines with no comment, and saves a prioritized punch list to MEAN-REVIEW.md so the next pass can check what was fixed. Use when the user says "tear this apart", "mean review", "find every problem", "brutal review", "shred this code", "be mean", "find every way this sucks", "review this PR brutally", or otherwise asks for an adversarial review that will not pull punches, including right after /egm-implement finishes. Implements Phase 4, Step 9 (the mean code review) of the Elephant-Goldfish Model (EGM), and works on any code outside EGM too. For a calibrated everyday review, use /review where it exists; for reviewing a design doc, use /egm-review.

jhincapie/egm-cursor

Make an informed non-trivial decision via a three-step interrogation → criteria → research-handoff protocol. Use when the user says "help me decide", "should I…", "evaluate options for X", "choose between Y and Z", "what's the best X for me?", "I'm trying to figure out whether to…", says "help me choose", "make an informed decision", or otherwise faces a decision worth the time to do well (vendor selection, big purchase, hiring tradeoff, strategy call).

jhincapie/egm-cursor

Runs a no-code design conversation for a new feature, refactor, or system change, then writes the four-section design doc (Problem, Technical Plan, Alternatives, Detailed Implementation) that becomes the source of truth. Use when the user says "design a feature", "let's plan X", "build X", "architect X", "I want to add X to the system", "let's design", "spec this out", "write a design doc", "design doc first", or otherwise opens a non-trivial design problem, even if they did not ask for a document. Implements Phases 1 and 2 of the Elephant-Goldfish Model (EGM). Hand the finished doc to /egm-review. Not for one-line fixes or questions about how existing code works.

jhincapie/egm-cursor

Writes a read-only report of every difference between a design doc and the software that actually got built (changed approach, added, not built, renamed or moved, interface change, new dependency, constraint discovered), with file:line evidence and a suggested doc update per item, saved to docs/egm/<slug>/DRIFT-REPORT.md. Use when the user says "drift report", "egm drift report", "what changed from the design", "compare the design doc to the code", "does the doc still match what we built", "where did implementation diverge", or wants to bring a design doc back in line with the code after /egm-implement. Never edits the doc or the code. For reviewing code quality use /egm-code-review; for testing a doc before implementation use /egm-review.

Habilidades Relacionadas