sem es una herramienta de línea de comandos que añade comprensión semántica sobre Git, mostrando los cambios a nivel de función en lugar de a nivel de línea. Desarrollada por Ataraxy Labs y distribuida como un único binario, es compatible con 26 lenguajes de programación y cinco formatos de datos.
La herramienta sustituye el diff línea a línea de Git por una vista consciente de las funciones. En lugar de líneas añadidas o eliminadas de forma aislada, sem agrupa los cambios por funciones añadidas, modificadas o eliminadas, y funciona automáticamente en cualquier repositorio Git sin configuración ni complementos.
Los comandos principales son:
- sem diff: muestra las funciones añadidas, modificadas y eliminadas en cada archivo.
- sem blame: atribuye los cambios a nivel de función a commits y autores concretos.
- sem impact: muestra las dependencias y los dependientes de una función, además del número de entidades afectadas de forma transitiva.
- sem log: resume el historial de commits con cambios a nivel de lógica.
- sem entities: lista funciones, clases e interfaces de un archivo con sus rangos de líneas.
- sem context: extrae un fragmento de código con un presupuesto de tokens configurable, incluyendo el objetivo, sus dependencias y dependientes, útil como contexto para agentes de IA.
Todos los comandos admiten el flag --json para salida legible por máquinas. Según un benchmark citado por el proyecto, los agentes de IA para programación son 2,3 veces más precisos cuando reciben la salida estructurada de sem que cuando se les pasan diffs de líneas en bruto.
La instalación es directa. En macOS o Linux, brew install sem-cli seguido de sem setup configura un wrapper de Git, el ajuste global diff.external y un hook de pre-commit para que cada invocación de git diff produzca automáticamente un diff semántico. En otras plataformas, la herramienta puede instalarse desde el código fuente mediante cargo install --git https://github.com/Ataraxy-Labs/sem sem-cli. Para revertir la configuración basta con ejecutar sem unsetup.
La herramienta está dirigida principalmente a desarrolladores y equipos que trabajan con flujos de programación asistida por IA, donde aportar contexto consciente del código —funciones, dependencias, impacto— mejora la precisión de las ediciones y revisiones automatizadas.
