Ub-mode: cómo instalar la skill de Uncle Bob en OpenCode (y Claude Code) ✅ yoDEV Tested

ub-mode, la skill de Robert C. Martin (Uncle Bob) para que tu agente programe con TDD y clean code, se instala en OpenCode copiando un solo archivo en ~/.config/opencode/skills/ub-mode/. Si ya la tienes en Claude Code, OpenCode la detecta sin ningún paso extra. La probamos en OpenCode 1.19.5 y 2.0.29, incluida una sesión real con DeepSeek V4 Pro.

:white_check_mark: yoDEV Tested · 1 de noviembre de 2026
Instalamos ub-mode de cinco formas en OpenCode 1.19.5 y la probamos en una sesión real en OpenCode 2.0.29 con DeepSeek V4 Pro, con y sin la regla en AGENTS.md. Los resultados que reportamos como nuestros salen de esa prueba.

El README del repositorio solo indica rutas de instalación para Claude Code, Cursor y Grok. La respuesta para OpenCode llegó de la comunidad: el issue #6, “Add to OpenCode”, reunió tres métodos en dos días, entre ellos una configuración completa que su autor describe como verificada. Aquí tienes qué hace esa configuración, qué confirmamos nosotros y la única parte que no pudimos ejecutar.

¿Qué es ub-mode, la skill de clean code de Uncle Bob?

ub-mode es un único archivo SKILL.md de 152 líneas que le dice a tu agente de código cómo trabajar cada vez que toca código. Martin lo publicó el 25 de octubre y explica que se basa libremente en parte de las reglas de @poteto (poteto-mode / pstack), recortadas y combinadas con herramientas deterministas. Funciona en tres fases:

  • First Make it Work: escribir el test que falla antes de cambiar el código, definir bien la forma de los datos antes de la lógica, quitar complejidad antes de agregar nada, validar los datos donde entran al sistema y confiar en ellos dentro, y hacer que las operaciones sean idempotentes.
  • Then Make it Right: reproducir un bug antes de corregirlo, probar comportamiento y no implementación, refactorizar solo con el comportamiento fijado por tests, y pasar tres controles de calidad.
  • Practice: llevar un registro de cada acción y su motivo, mantener pequeña la ventana de contexto principal y hacer commits pequeños y ordenados.

Lo que la distingue de la mayoría de las skills de “código limpio” son esos controles de calidad. ub-mode le indica al agente que ejecute tres herramientas que Martin también publicó:

Herramienta Qué mide Umbral en ub-mode
crapper CRAP score por función (complejidad ciclomática × falta de cobertura de tests) toda función por debajo de 10
dryer Duplicación estructural entre funciones eliminar pares con similitud de 0.8 o más
mutator Mutation testing: mutantes que tus tests no detectan cubrir lo no cubierto, matar sobrevivientes, borrar código muerto

Las tres soportan Clojure, Java, Go, TypeScript, Rust y Python, y necesitan Python 3.11 o superior para ejecutarse.

¿Funciona ub-mode en OpenCode?

Sí, tanto en 1.x como en 2.x. OpenCode lee skills de su propia carpeta y también de las carpetas de Claude Code y de agentes genéricos, así que el mismo SKILL.md funciona sin cambios. La instalamos de cinco formas distintas en un entorno limpio de OpenCode 1.19.5 y comprobamos cada una con opencode debug skill, que lista todas las skills que OpenCode puede cargar. ub-mode apareció en todos los casos:

Método de instalación Dónde queda el archivo Resultado
curl (issue #6) ~/.config/opencode/skills/ub-mode/SKILL.md :white_check_mark:
Instalación existente de Claude Code ~/.claude/skills/ub-mode/SKILL.md :white_check_mark:
git clone + mover (issue #6) ~/.config/opencode/skills/ub-mode/ :white_check_mark:
Solo en el proyecto .opencode/skills/ub-mode/SKILL.md :white_check_mark:
npx skills add ~/.agents/skills/ub-mode/SKILL.md :white_check_mark:

En OpenCode 2.0.29 probamos la ruta de proyecto (.opencode/skills/) con una sesión real del agente: cargó la skill, como verás más abajo.

¿Cómo instalar skills en OpenCode?

La instalación global del issue #6 son dos comandos:

mkdir -p ~/.config/opencode/skills/ub-mode
curl -fsSL https://raw.githubusercontent.com/unclebob/ub-mode/master/SKILL.md \
  -o ~/.config/opencode/skills/ub-mode/SKILL.md

Para un solo proyecto, coloca el archivo en .opencode/skills/ub-mode/SKILL.md dentro del repositorio.

Si prefieres un gestor de paquetes, el CLI de skills la instala para OpenCode de forma global y sin preguntas:

npx skills add unclebob/ub-mode@ub-mode -g -a opencode -y

Copia la skill en ~/.agents/skills/ub-mode, una carpeta que OpenCode lee. El propio CLI te recuerda que las skills se ejecutan con todos los permisos de tu agente, algo que conviene tener presente con esta en particular (más abajo te explicamos por qué).

Y si ya seguiste el README para Claude Code, no tienes que hacer nada: OpenCode carga ~/.claude/skills/ automáticamente. Las mismas claude code skills sirven en los dos agentes.

¿Cómo comprobar que OpenCode ve la skill?

En OpenCode 1.x, ejecuta:

opencode debug skill

Imprime en JSON la lista de skills que puede cargar. Deberías ver una entrada llamada ub-mode con la ruta donde la instalaste. OpenCode lee la configuración al arrancar, así que reinicia cualquier sesión abierta después de instalar.

Ese comando solo existe en OpenCode 1.x. En 2.0.29, opencode debug ofrece agents, config y paths, sin listado de skills. En v2, la comprobación práctica es pedirle al agente que cargue ub-mode en una sesión nueva.

¿Cómo hacer que OpenCode use la skill en cada cambio de código?

Por defecto no lo hará. La descripción de la propia skill dice que se use cuando el usuario ejecuta /ub-mode o pide los principios, y OpenCode decide qué skill cargar leyendo esa descripción. Así que el agente solo recurre a ub-mode cuando se lo pides.

La configuración del issue #6 lo resuelve con una regla en AGENTS.md, el archivo que OpenCode lee como instrucciones permanentes. Este es el texto que usamos, tomado del issue:

Every time you write, modify, refactor, or fix code — in any session, without waiting for a command —
first load skill `ub-mode` (skill tool, id: `ub-mode`) and follow its rules:
First Make it Work → Then Make it Right → Practice.

El mismo usuario sugiere también editar el campo description del SKILL.md para que la skill se presente como obligatoria en todo cambio de código.

Esa regla marca la diferencia. Ejecutamos dos veces la misma petición en OpenCode 2.0.29 con DeepSeek V4 Pro, en un repositorio nuevo con ub-mode instalada a nivel de proyecto: “agrega una función subtract a calc.py, sin commit ni push”.

Ejecución Configuración ¿Cargó ub-mode? Herramientas que usó
A Skill instalada, sin regla No read, edit
B Skill + regla en AGENTS.md Sí read, skill, shell, edit

Sin la regla, el agente ignoró la skill por completo. Con ella, llamó por su cuenta a la herramienta skill de OpenCode para cargar ub-mode, hizo el cambio y lo verificó ejecutando Python.

Probamos la regla en un AGENTS.md en la raíz del proyecto. Para una regla global, la documentación de OpenCode indica ~/.config/opencode/AGENTS.md como el archivo que se aplica a todas las sesiones.

¿El agente hace TDD de verdad con ub-mode?

No del todo, al menos en nuestra prueba. En la ejecución B, el agente verificó el cambio con un comando de Python en línea en lugar de escribir primero un test, que es justamente la primera regla de ub-mode. La regla en AGENTS.md consigue que la skill se cargue; qué tan estrictamente se cumple depende del modelo. Si el TDD es lo que más te importa, pídelo de forma explícita en el mismo AGENTS.md.

¿Cómo instalar crapper, dryer y mutator?

Esta es la parte donde más gente se va a equivocar. Hay dos condiciones, y las dos las verificamos en el código fuente de las herramientas:

  1. mutator necesita a crapper como carpeta hermana. Si crapper no está instalado como paquete, mutator lo busca en ../crapper, junto a su propio directorio, y se detiene con un error que te pide clonarlo ahí. Por eso conviene clonar las tres en la misma carpeta:
mkdir -p ~/.local/share/ub-tools && cd ~/.local/share/ub-tools
git clone https://github.com/unclebob/crapper
git clone https://github.com/unclebob/dryer
git clone https://github.com/unclebob/mutator
  1. Usa scripts envoltorio en tu PATH, no enlaces simbólicos. El lanzador de cada herramienta crea su entorno virtual en el directorio desde el que se ejecuta. Si lo llamas a través de un symlink, ese directorio pasa a ser tu carpeta bin y no el de la herramienta. Un envoltorio de dos líneas lo evita; crea uno por herramienta, llamados crapper, dryer y mutator:
#!/bin/sh
exec "$HOME/.local/share/ub-tools/crapper/crapper" "$@"

La primera ejecución de cada herramienta crea su .venv y la instala. El issue #6 sugiere probarlas con crapper --help, dryer y mutator --scan <archivo>. No pudimos ejecutarlas en nuestro entorno de prueba: las dos condiciones anteriores salen de leer sus lanzadores y su código.

Sin estas herramientas en el PATH, ub-mode sigue funcionando como conjunto de principios, pero el agente gastará turnos buscando comandos que no existen, como señala el issue #3.

¿Qué riesgos tiene ub-mode?

Dos reglas de la skill dejan que el agente actúe sin ti. El issue #2 las señala: la sección “Commit and Push” termina con un push a la rama principal, y “Worktree Cleanup” deja que el agente decida qué es seguro borrar para liberar disco. Si no quieres ninguna de las dos, dilo en el mismo AGENTS.md donde activas la skill: por ejemplo, que el agente haga commit pero nunca push, y que liste lo que borraría y espere tu confirmación.

Hay dos cosas más que dependen de la fecha. Al momento de publicar esta nota (1 de noviembre de 2026):

  • El repositorio no tiene licencia. El issue #5 pregunta cuál se planea y todavía no tiene respuesta. Importa si piensas usarla dentro de una empresa.
  • El archivo puede cambiar de lugar. El pull request #1, todavía abierto, mueve SKILL.md a skills/ub-mode/SKILL.md. Si se integra, la URL de curl de arriba dará error 404; en ese caso, la ruta de npx skills add es la que debes usar.

¿ub-mode o Superpowers?

Resuelven el mismo problema a distinta escala. Superpowers es un framework completo de skills y flujos de trabajo que impide que el agente programe antes de planificar. ub-mode es un solo archivo de reglas más tres herramientas de medición: menos proceso, pero con umbrales numéricos (CRAP por debajo de 10, nada de duplicación por encima de 0.8, ningún mutante sobreviviente) que el agente no puede esquivar con argumentos. Si ya usas Superpowers, los controles de ub-mode son la pieza que vale la pena sumar.


¿Y tú? ¿Qué regla le exiges siempre a tu agente antes de dejarlo tocar tu código?

¿Tu agente escribe tests antes de cambiar código?
  • Sí, se lo exijo siempre
  • Solo cuando se lo pido
  • No, los tests los escribo yo
  • Prefiero otra opción (cuéntanos cuál)
0 votantes

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: Las mejores skills para agentes de IA: 21 que hacen codear a tu IA como un senior