CommunityProgramación y desarrollogithub.com

jhincapie/egm-cursor

Solo para mantenedores. Trae cambios nuevos del upstream marcus-darden/egm a este port de Cursor en una rama de revisión, reaplicando los renombres y adaptaciones de Cursor del port, y abre un PR para Juan. Ejecutar solo como /egm-sync-upstream.

¿Qué es egm-cursor?

Esta habilidad está diseñada para sincronizar el repositorio port de Cursor (jhincapie/egm-cursor) con los cambios del repositorio upstream original (marcus-darden/egm). Está dirigida exclusivamente al mantenedor (Juan) y se invoca como `/egm-sync-upstream [--dry-run] [upstream-ref]`. Su propósito es garantizar que el port de Cursor mantenga sus renombres propietarios, adaptaciones específicas de Cursor y archivos exclusivos del port, evitando que se sobrescriban durante la sincronización. El flujo de trabajo incluye nueve pasos: desde la verificación del árbol de trabajo limpio y la clonación del upstream, hasta la aplicación de fusiones (merges) con ayuda de scripts Python de mapeo de nombres, la verificación de adaptaciones de Cursor y la creación de un Pull Request en GitHub. La habilidad impone reglas estrictas, como no empujar a main, no sobrescribir archivos exclusivos del port, y no resolver conflictos de forma automática (señalizándolos en un reporte). Es compatible con el agente de Cursor y utiliza scripts propietarios para manejar fusiones a tres bandas, verificar que los renombres estén aplicados y generar el reporte de sincronización. En resumen, esta habilidad automatiza de manera segura la tarea compleja de syncronizar un fork con adaptaciones profundas, minimizando errores humanos y preservando la integridad del port.

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

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Sincronización upstream de EGM

Traer cambios de marcus-darden/egm a este port sin perder los renombres, adaptaciones de Cursor ni archivos exclusivos del port. Lea primero el AGENTS.md raíz del repositorio: es el libro de reglas que aplica esta habilidad. Esta habilidad reside en .cursor/skills/, por lo que es local al proyecto; install.sh nunca la instala.

Invocar como /egm-sync-upstream [--dry-run] [upstream-ref]. upstream-ref por defecto es upstream main. Con --dry-run, haga los Pasos 1 al 4 e imprima el plan; no cambie nada.

Reglas estrictas

  1. Nunca hacer push a main. Todo el trabajo se realiza en sync/upstream-<sha_corto>; Juan fusiona el PR.
  2. Nunca sobrescribir un archivo exclusivo del port (listado en AGENTS.md). Si upstream ha cambiado algo que esos archivos reflejan (por ejemplo, la sección de instalación del README upstream), descríbalo en el informe en su lugar.
  3. No adivinar. Nuevas habilidades o agentes upstream, archivos eliminados upstream, archivos renombrados upstream y conflictos de fusión se señalan a Juan con las rutas exactas, no se resuelven inventando un nombre o eligiendo un bando.
  4. Mantener la atribución. LICENSE mantiene ambas líneas de copyright; UPSTREAM_COMMIT se mueve solo cuando la rama realmente contiene los cambios upstream.

Ayudantes

<dir-habilidad> es la carpeta que contiene este archivo.

  • python3 <dir-habilidad>/scripts/port_names.py path <ruta-upstream>... mapea rutas upstream a rutas del port e indica cuándo una ruta es exclusiva del port, no está portada o es nueva.
  • python3 <dir-habilidad>/scripts/port_names.py merge <clon> <antiguo> <nuevo> <ruta-upstream> [--write] fusiona a tres bandas un cambio de archivo upstream en su archivo del port (la base y el suyo se reescriben primero con nombres del port, el nuestro es el archivo del port), de modo que las adaptaciones de Cursor en líneas no tocadas sobrevivan. Salida 0 limpio, 1 quedan marcadores de conflicto, 3 nada que hacer (exclusivo del port, no portado o nuevo).
  • python3 <dir-habilidad>/scripts/port_names.py rewrite <archivo> / check <archivo>... reescribe nombres en texto o lista nombres antiguos con barra restantes.
  • bash <dir-habilidad>/scripts/check_port.sh ejecuta todas las comprobaciones del port (Paso 7).

Flujo de trabajo

Progreso de sincronización EGM:
- [ ] Paso 1: árbol de trabajo limpio, en un main actualizado
- [ ] Paso 2: upstream clonado en un directorio temporal; antiguo = UPSTREAM_COMMIT, nuevo = HEAD upstream
- [ ] Paso 3: entradas del CHANGELOG desde antiguo leídas; archivos cambiados listados con estado
- [ ] Paso 4: cada archivo cambiado mapeado y clasificado (fusionar / señalar / saltar)
- [ ] Paso 5: rama sync/upstream-<sha_corto> creada; fusiones aplicadas; adaptaciones re-verificadas
- [ ] Paso 6: UPSTREAM_COMMIT actualizado
- [ ] Paso 7: check_port.sh pasa
- [ ] Paso 8: SYNC-REPORT.md escrito
- [ ] Paso 9: rama subida; PR abierto con gh; Juan informado

Paso 1: Inicio limpio

git status --porcelain debe estar vacío y la rama actual debe ser main, actualizada con origin/main (git fetch origin && git status -sb). Si no es así, deténgase e indique a Juan qué está sucio. No guarde su trabajo en stash.

Paso 2: Obtener upstream

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

Si antiguo == nuevo, informe "upstream no tiene nuevos commits desde " y deténgase (sin rama, sin PR). Si antiguo no es ancestro de nuevo (git -C "$tmp/upstream" merge-base --is-ancestor $antiguo $nuevo), upstream reescribió el historial: deténgase y señalícelo.

Paso 3: Leer qué cambió

  • git -C "$tmp/upstream" log --oneline $antiguo..$nuevo
  • git -C "$tmp/upstream" diff --name-status -M $antiguo $nuevo
  • Las nuevas entradas de CHANGELOG.md (etiquetas posteriores a la que contiene antiguo). El CHANGELOG explica por qué; cite las filas relevantes en el informe.

Paso 4: Mapear y clasificar cada archivo

Ejecute port_names.py path en cada ruta cambiada upstream, luego coloque cada una en un grupo:

Estado upstream y mapeoGrupo
M, mapea a un archivo existente del portfusionar
A, mapea a una carpeta de habilidad conocida (por ejemplo, un nuevo asset en skills/goldfish/)fusionar (crea el archivo)
A, nueva habilidad, agente o tutorial (nota "NUEVO")señalar: Juan elige el nombre egm- y si portarlo
D (eliminado upstream)señalar: no eliminar el archivo del port
R (renombrado upstream)señalar: mostrar rutas antigua y nueva y la ruta del port
nota exclusivo del port o no portadosaltar (describir el cambio si importa, como texto de instalación del README)
LICENSEfusionar, luego confirmar que ambas líneas de copyright permanecen

Con --dry-run, imprima esta tabla y la lista de commits, luego deténgase.

Paso 5: Aplicar en una rama

git switch -c "sync/upstream-${nuevo:0:7}"
python3 <dir-habilidad>/scripts/port_names.py merge "$tmp/upstream" $antiguo $nuevo <ruta-upstream> --write

Ejecute la fusión una vez por archivo fusionar. En caso de salida 1, deje los marcadores de conflicto fuera del commit: restaure el archivo (git checkout -- <ruta-port>), y registre el fragmento de conflicto en el informe para Juan. Después de fusionar, vuelva a leer cada archivo tocado para las adaptaciones de Cursor listadas en AGENTS.md (texto de spawn de Task-tool, readonly: true en agentes, AGENTS.md junto a CLAUDE.md, revisores ignorando AGENTS.md y .cursor/rules/, /review no /code-review, la fila de Cursor en runtimes.md). Si upstream agregó un nuevo lugar que requiera una (por ejemplo, una nueva búsqueda de CLAUDE.md, una nueva línea tools: en un agente, una nueva instrucción de spawn solo de Claude), aplique la misma adaptación y enumérela bajo "adaptado". Haga commit en grupos lógicos con mensajes que citen los commits upstream.

Paso 6: Mover el puntero

Escriba nuevo en UPSTREAM_COMMIT solo si cada archivo fusionar se fusionó limpiamente o su conflicto está registrado. Haga commit de esto al final.

Paso 7: Verificar

bash <dir-habilidad>/scripts/check_port.sh. Verifica que nombre sea igual a carpeta, evalúa JSON, check_gate.py (BLOQUEADO luego ADELANTE), nombres antiguos con barra restantes y una instalación de prueba en un directorio temporal (que no debe contener esta habilidad). Corrija fallos causados por la fusión; cualquier otra cosa va en el informe.

Paso 8: SYNC-REPORT.md

Escriba SYNC-REPORT.md en la raíz del repositorio en la rama, y use el mismo texto que el cuerpo del PR:

# Sincronización upstream: <antiguo7>..<nuevo7>

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

## Aplicado
- <ruta-port> <- <ruta-upstream>: <una línea>
## Adaptado para Cursor
- <ruta-port>: <qué adaptación y por qué>
## Omitido
- <ruta-upstream>: <exclusivo del port | no portado>, <qué cambió, si importa>
## Señalado para Juan
- <nueva habilidad/agente, eliminación, renombre, conflicto>: <rutas, el fragmento, la pregunta>
## Verificaciones
<resumen de check_port.sh>
## Preguntas abiertas
- <...>

Paso 9: Subir y abrir el PR

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

Indique a Juan la URL del PR, los recuentos (aplicados, adaptados, omitidos, señalados) y los elementos señalados. No fusione el PR. Elimine el clon temporal.

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.

Skills relacionados