<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CommitCycle Insights, en español</title><description>Argumentos sobre ejecutar agentes de código en IA en repositorios reales: contexto compartido, least privilege y conocimiento que sigue siendo cierto.</description><link>https://commitcycle.com/es/insights/</link><language>es</language><atom:link href="https://commitcycle.com/es/insights/rss.xml" rel="self" type="application/rss+xml"/><item><title>La instrucción que escribes una vez, no en cada sesión</title><link>https://commitcycle.com/es/insights/agent-skills-guide/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/agent-skills-guide/</guid><description>Qué es una skill, por qué la description es lo único siempre cargado, qué va en una y qué en AGENTS.md, y cómo averiguar por qué la tuya no salta.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hay un momento, cada pocos días, en el que escribes la misma corrección otra vez. &lt;em&gt;Usa nuestro componente de botón.&lt;/em&gt; &lt;em&gt;No añadas una dependencia para eso.&lt;/em&gt; &lt;em&gt;Las fechas de este proyecto van siempre en ISO.&lt;/em&gt; Lo dijiste el martes, la sesión terminó y el conocimiento terminó con ella.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una skill es esa instrucción, escrita una sola vez, en un fichero que el agente recoge por su cuenta cuando pasa a ser relevante.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ése es el concepto entero, y el resto de esta página son los mecanismos, el criterio sobre qué va dentro de una y la depuración — porque el fallo habitual no es escribir una skill mala, es escribir una skill buena que nunca se carga.&lt;/p&gt;
&lt;h2 id=&quot;qué-es-una-skill-en-el-disco&quot;&gt;Qué es una skill en el disco&lt;/h2&gt;
&lt;p&gt;Una carpeta con un fichero markdown dentro:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;.claude/skills/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;cc-brand/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;SKILL.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;references/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;token-reference.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;motion-and-craft.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;cc-tokens.css&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;assets/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;AppShell.vue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt; abre con un frontmatter que lleva dos cosas que importan:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;name: cc-brand&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;description: Implements UI in the CC design system for Vue. Use this WHENEVER&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;building, styling, theming or reviewing any Vue interface, component, page,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;dashboard or form for CommitCycle — and whenever the user mentions CC UI, the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;brand blue (#693DFF), Plus Jakarta Sans, shadcn-vue, or &quot;make this on-brand&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;# CC Design System Implementor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Everything the agent should know, in ordinary markdown.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;No hace falta nada más. Ni build, ni registro, ni fichero de configuración. La carpeta existe, luego la skill existe.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-no-ponerlo-en-el-prompt&quot;&gt;¿Por qué no ponerlo en el prompt?&lt;/h2&gt;
&lt;p&gt;Porque tienes que acordarte cada vez, y no te vas a acordar. Más exactamente: las veces que se te olvida no son aleatorias. Son las veces en que ibas rápido, que son las veces en que el agente tenía menos contexto, que es justo cuando la convención más importaba.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-no-ponerlo-en-agentsmd&quot;&gt;¿Por qué no ponerlo en AGENTS.md?&lt;/h2&gt;
&lt;p&gt;Ésta es la pregunta de verdad, y la respuesta es el diseño entero de la función.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; (o &lt;code&gt;CLAUDE.md&lt;/code&gt;) se carga siempre.&lt;/strong&gt; Cada turno, cada sesión, cada task, venga o no a cuento. Eso lo hace perfecto para hechos que son siempre ciertos — el stack, los comandos, la estructura de carpetas, lo que nunca hay que hacer — y significa que cada línea que añades cuesta contexto en trabajos que no tienen nada que ver con ella. Un AGENTS.md de 900 líneas es un impuesto sobre cada petición.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una skill se carga sólo cuando encaja.&lt;/strong&gt; Lo que está siempre en contexto es su nombre y su description: un par de líneas. El cuerpo se lee sólo cuando el agente decide que el trabajo lo pide.&lt;/p&gt;
&lt;p&gt;Esto se llama progressive disclosure, y funciona en tres niveles:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel&lt;/th&gt;
&lt;th&gt;Qué se carga&lt;/th&gt;
&lt;th&gt;Cuándo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Nombre + description&lt;/td&gt;
&lt;td&gt;Siempre. No cuesta casi nada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;El cuerpo del SKILL.md&lt;/td&gt;
&lt;td&gt;Cuando la description encaja con la task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Los ficheros que acompañan a la carpeta&lt;/td&gt;
&lt;td&gt;Cuando el cuerpo apunta a ellos y la task los necesita&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Por eso una skill puede ser enorme — un sistema de diseño completo, una checklist de cumplimiento, la superficie entera de una API — sin pagarla en una petición que va de otra cosa. Llevas una biblioteca, no una nota.&lt;/p&gt;
&lt;h2 id=&quot;qué-va-dónde&quot;&gt;Qué va dónde&lt;/h2&gt;
&lt;p&gt;El criterio que hace que todo esto funcione:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ponlo en&lt;/th&gt;
&lt;th&gt;Cuándo&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;El prompt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cierto sólo para esta task&lt;/td&gt;
&lt;td&gt;“Usa azul para la cabecera de esta página”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AGENTS.md&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Siempre cierto, siempre relevante, corto&lt;/td&gt;
&lt;td&gt;“El stack es Astro + Tailwind. Nunca edites ficheros de &lt;code&gt;dist/&lt;/code&gt;”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Una skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cierto en una situación concreta, demasiado largo para AGENTS.md&lt;/td&gt;
&lt;td&gt;Tu sistema de diseño completo, tus convenciones de API, tu voz al escribir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Un servidor MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El agente necesita &lt;em&gt;alcanzar&lt;/em&gt; algo&lt;/td&gt;
&lt;td&gt;Tu base de datos, tu gestor de incidencias, tu analítica&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;El error habitual es meter contenido del tamaño de un sistema de diseño en AGENTS.md, donde se carga en cada petición, incluidas las que van de un script de build. El otro error habitual es meter el stack del proyecto en una skill, donde puede no cargarse en el momento en que hace falta.&lt;/p&gt;
&lt;h2 id=&quot;la-description-es-el-disparador-entero&quot;&gt;La description es el disparador entero&lt;/h2&gt;
&lt;p&gt;Si te llevas una sola cosa de esta página: &lt;strong&gt;la description no es documentación, es la regla de coincidencia.&lt;/strong&gt; Es la única parte de tu skill que el agente ve antes de decidir si lee el resto.&lt;/p&gt;
&lt;p&gt;Así que escríbela con las palabras que una persona teclea de verdad. No:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Directrices de implementación de marca y estándares de componentes.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Eso no coincide con nada. Quien pide “haz que esto se parezca a nuestra app” no ha usado ninguna de esas palabras. Mejor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Úsalo siempre que construyas, estilices, tematices o revises cualquier interfaz, página, dashboard, formulario o componente de [producto] — y siempre que se mencione [el color de marca], [la tipografía], [la biblioteca de componentes] o “que quede on-brand”. Recurre a ello incluso cuando la petición sea sólo “haz una página de ajustes” o “dale estilo a esta tarjeta”.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Concretamente, una description que salta de forma fiable nombra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Los verbos&lt;/strong&gt; — construir, estilizar, revisar, migrar, redactar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Los sustantivos&lt;/strong&gt; — los artefactos a los que se aplica&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Las cadenas literales&lt;/strong&gt; — nombres de producto, códigos hex, nombres de tipografía, nombres de biblioteca&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Las formulaciones informales&lt;/strong&gt; — “que quede on-brand”, “como siempre”, “como el resto de páginas”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cuándo usarlo aunque no parezca que aplica&lt;/strong&gt; — esta línea hace un trabajo sorprendente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pasarse de inclusivo cuesta un poco de contexto cuando salta sin necesidad. Quedarse corto te cuesta la skill entera, en silencio, para siempre. Inclínate por que salte.&lt;/p&gt;
&lt;h2 id=&quot;dónde-viven-las-skills&quot;&gt;Dónde viven las skills&lt;/h2&gt;
&lt;p&gt;Dos sitios, y la elección importa más de lo que parece.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.claude/skills/&lt;/code&gt; dentro del proyecto.&lt;/strong&gt; Se commitea con el repositorio, así que está en tu otro ordenador, en cada sesión futura y para cualquiera que lo clone. Todo lo que describe &lt;em&gt;este&lt;/em&gt; producto va aquí.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;~/.claude/skills/&lt;/code&gt; en tu carpeta personal.&lt;/strong&gt; Disponible en cada proyecto que toques, invisible para todos los demás. Esto es para tu propia forma de trabajar: cómo te gusta que se escriban los commits, cómo quieres estructurados los documentos.&lt;/p&gt;
&lt;p&gt;Por defecto, el proyecto. Una skill que vive sólo en tu portátil está a un ordenador de distancia de no existir, y es la razón por la que un proyecto “sólo funciona bien cuando lo ejecutas tú”.&lt;/p&gt;
&lt;h2 id=&quot;cómo-sé-que-ha-saltado&quot;&gt;¿Cómo sé que ha saltado?&lt;/h2&gt;
&lt;p&gt;Pregunta. &lt;em&gt;¿Qué skills has usado para eso?&lt;/em&gt; es una pregunta razonable y tiene una respuesta directa. &lt;em&gt;¿Qué skills tienes disponibles?&lt;/em&gt; las lista, que es la primera comprobación después de instalar una.&lt;/p&gt;
&lt;p&gt;La comprobación fuerte es de comportamiento: abre una sesión nueva, formula una petición como la formularía un usuario real — no como la formula la documentación de la propia skill — y mira si la salida cumple las normas sin que las menciones. Ése es el único test que importa, porque ésa es la condición real de uso.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-no-salta-mi-skill&quot;&gt;¿Por qué no salta mi skill?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Síntoma&lt;/th&gt;
&lt;th&gt;Casi siempre&lt;/th&gt;
&lt;th&gt;Arreglo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No se carga nunca&lt;/td&gt;
&lt;td&gt;La description no contiene las palabras que se teclean&lt;/td&gt;
&lt;td&gt;Reescribe la description con formulaciones reales y nombres literales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se carga, y luego la salida la ignora&lt;/td&gt;
&lt;td&gt;El SKILL.md es demasiado largo o las normas están enterradas en prosa&lt;/td&gt;
&lt;td&gt;Recórtalo. Empieza por las normas. Mueve el detalle a &lt;code&gt;references/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se carga con todo&lt;/td&gt;
&lt;td&gt;La description es demasiado amplia&lt;/td&gt;
&lt;td&gt;Añade el límite: para qué &lt;em&gt;no&lt;/em&gt; es&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A ti te funciona, a un compañero no&lt;/td&gt;
&lt;td&gt;Está en &lt;code&gt;~/.claude/skills/&lt;/code&gt;, no en el proyecto&lt;/td&gt;
&lt;td&gt;Muévela al repositorio y commitéala&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otras instrucciones la contradicen&lt;/td&gt;
&lt;td&gt;AGENTS.md dice otra cosa&lt;/td&gt;
&lt;td&gt;Decide cuál gana y dilo explícitamente en las dos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Fíjate en que cuatro de los cinco son problemas de description o de ubicación. El contenido casi nunca es lo que está mal.&lt;/p&gt;
&lt;h2 id=&quot;mantener-corto-el-skillmd&quot;&gt;Mantener corto el SKILL.md&lt;/h2&gt;
&lt;p&gt;Una vez cargado, el cuerpo se lee entero — así que la longitud cuesta algo, y la buena estructura es un fichero de instrucciones corto que apunta al detalle.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;SKILL.md              las normas, el orden de decisión, qué gana en un conflicto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;references/           el material largo: tablas de tokens, superficies de API, ejemplos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;assets/                cosas que copiar: componentes, hojas de estilo, plantillas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;scripts/               cosas que ejecutar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;La skill &lt;code&gt;cc-brand&lt;/code&gt; del ejemplo de arriba tiene exactamente esta forma: el SKILL.md declara la prioridad de capas y la regla de conflicto en unos cientos de palabras, y la referencia de tokens, la guía de movimiento y los componentes de shell ya hechos están en ficheros a los que apunta. El agente abre la referencia de la barra lateral cuando está construyendo una barra lateral, y nunca en otro caso.&lt;/p&gt;
&lt;p&gt;Dos cosas van en el SKILL.md y no en un fichero de referencia: &lt;strong&gt;el orden de precedencia&lt;/strong&gt; (cuando dos normas chocan, cuál gana) y &lt;strong&gt;qué no hacer&lt;/strong&gt;. Las dos son cortas y las dos son lo que el agente hace mal cuando faltan.&lt;/p&gt;
&lt;h2 id=&quot;skills-mcp-subagents-slash-commands&quot;&gt;Skills, MCP, subagents, slash commands&lt;/h2&gt;
&lt;p&gt;Cuatro cosas que se confunden, en ejes genuinamente distintos:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Qué es&lt;/th&gt;
&lt;th&gt;Quién lo dispara&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Instrucciones que se cargan por relevancia&lt;/td&gt;
&lt;td&gt;El agente, al encajar la description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Servidor MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tools que alcanzan sistemas externos&lt;/td&gt;
&lt;td&gt;El agente, cuando necesita la tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subagent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Una ventana de contexto aparte para trabajo delegado&lt;/td&gt;
&lt;td&gt;El agente, o tú&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slash command&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Un prompt guardado que invocas por su nombre&lt;/td&gt;
&lt;td&gt;Tú, explícitamente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills y MCP son complementos, no alternativas. El servidor MCP le da al agente una conexión con tu base de datos; la skill le cuenta tus convenciones de esquema y qué tablas no se escriben nunca directamente. Tools sin instrucciones es la configuración que tiene casi todo el mundo, y es la razón por la que el agente puede alcanzarlo todo y aun así hacer lo que no toca con ello.&lt;/p&gt;
&lt;h2 id=&quot;instalar-una-que-te-han-pasado&quot;&gt;Instalar una que te han pasado&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Pon la carpeta en &lt;code&gt;.claude/skills/&lt;/code&gt; (proyecto) o &lt;code&gt;~/.claude/skills/&lt;/code&gt; (personal).&lt;/li&gt;
&lt;li&gt;Abre una &lt;strong&gt;sesión nueva&lt;/strong&gt; — una ya abierta ha construido ya su lista.&lt;/li&gt;
&lt;li&gt;Pregunta &lt;em&gt;qué skills tienes disponibles&lt;/em&gt; y comprueba que la tuya aparece por su nombre.&lt;/li&gt;
&lt;li&gt;Dale una petición realista y mira si las normas se aplican sin mencionarlas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si falla el paso 3, la carpeta está en el sitio equivocado o el &lt;code&gt;SKILL.md&lt;/code&gt; está mal nombrado. Si falla el paso 4, es la description.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La que merece la pena instalar el primer día es una skill de diseño.&lt;/strong&gt; Si tienes una idea pero todavía ni marca ni opinión visual, &lt;a href=&quot;https://startpow.com/&quot;&gt;startpow.com&lt;/a&gt; te deja elegir lo que te gusta, exportar y descargar el resultado como skill. La sueltas dentro y, a partir de ahí, cada pantalla que construya el agente llega con tus colores, tu tipografía y tu espaciado sin que los describas otra vez — que es más o menos la diferencia entre un producto y una demo, por unos diez minutos de trabajo.&lt;/p&gt;
&lt;h2 id=&quot;cuántas-skills-son-demasiadas&quot;&gt;¿Cuántas skills son demasiadas?&lt;/h2&gt;
&lt;p&gt;Hay un presupuesto real, y no es el que preocupa a la gente. Los cuerpos son gratis hasta que se cargan, así que una carpeta con cuarenta skills no ralentiza nada. Lo que no es gratis son las &lt;strong&gt;descriptions&lt;/strong&gt;, que están todas en contexto, todo el rato.&lt;/p&gt;
&lt;p&gt;Cuarenta descriptions vagas son peores que cinco afiladas por una segunda razón: cuantas más se solapen, menos fiable es que gane la correcta. Dos skills que cubren “estilos” de forma igual de plausible significan un cara o cruz en cada petición de UI.&lt;/p&gt;
&lt;p&gt;La forma práctica es un puñado de skills con fronteras limpias, cada una de las cuales podrías describir en una frase sin usar la palabra “y”. Cuando no puedes, eso son dos skills.&lt;/p&gt;
&lt;h2 id=&quot;una-skill-son-instrucciones-que-aceptas-ejecutar&quot;&gt;Una skill son instrucciones que aceptas ejecutar&lt;/h2&gt;
&lt;p&gt;Merece la pena decirlo claro, porque las skills se pasan de mano en mano como si fueran plantillas de estilo, y no lo son.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una skill es un conjunto de instrucciones que un agente va a seguir, con tus permisos, en tu repositorio.&lt;/strong&gt; Una skill descargada puede decirle a un agente que instale un paquete, que mande un fichero a alguna parte, que trate una norma como más importante que las que escribiste tú. Es la misma decisión de confianza que ejecutar un script que te ha mandado alguien, y el hecho de que sea markdown y no código la hace parecer más pequeña de lo que es.&lt;/p&gt;
&lt;p&gt;Así que: lee el &lt;code&gt;SKILL.md&lt;/code&gt; antes de instalarla, mira qué más hay en la carpeta y ten más cuidado con las skills que traen scripts que con las que traen documentación. Un sistema de diseño de una herramienta que elegiste tú es algo muy distinto de una skill pegada en un hilo de un foro.&lt;/p&gt;
&lt;p&gt;Lo mismo vale al revés cuando publicas una: quien instale la tuya te está extendiendo esa confianza.&lt;/p&gt;
&lt;h2 id=&quot;llevarlas-a-un-equipo&quot;&gt;Llevarlas a un equipo&lt;/h2&gt;
&lt;p&gt;Tres vías, de menor a mayor ceremonia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commitéalas al repositorio.&lt;/strong&gt; &lt;code&gt;.claude/skills/&lt;/code&gt; está en el repo, así que clonarlo las trae. Esto cubre la mayoría de los casos y no necesita infraestructura ninguna.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribúyelas en un plugin.&lt;/strong&gt; Un plugin puede llevar skills junto con comandos y servidores MCP, se instala por su nombre y se actualiza de forma centralizada. Lo correcto cuando varios repositorios necesitan las mismas convenciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manda la carpeta.&lt;/strong&gt; Vale una vez, es inmanejable a la cuarta persona, porque ya no hay respuesta para “¿qué versión tienes tú?”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El fallo que hay que evitar es aquél en el que la skill existe sólo en la carpeta personal de alguien. El proyecto se comporta entonces de forma distinta según quién esté al mando, y nadie puede ver por qué.&lt;/p&gt;
&lt;h2 id=&quot;la-forma-más-rápida-de-escribir-tu-primera-skill&quot;&gt;La forma más rápida de escribir tu primera skill&lt;/h2&gt;
&lt;p&gt;No empieces con una página en blanco. Las páginas en blanco producen normas genéricas, y las normas genéricas son las que el modelo ya sigue.&lt;/p&gt;
&lt;p&gt;En su lugar: &lt;strong&gt;trabaja normal, y presta atención a lo que corriges.&lt;/strong&gt; La tercera vez que digas lo mismo — la tercera vez que señales el formato de fecha, o el componente, o que aquí no usamos esa biblioteca — di:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Convierte lo que acabas de aprender en una skill. Escribe la description para que salte siempre que alguien pida algo de esta área, incluidas las formulaciones informales. Mantén corto el SKILL.md y pon el detalle largo en un fichero de referencia.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tus correcciones ya son exactamente el contenido que una skill necesita. Son específicas, son reales y son las que de verdad se estaban haciendo mal — que es un punto de partida mucho mejor que cualquier cosa que se te ocurriera escribir de antemano.&lt;/p&gt;
&lt;h2 id=&quot;trucos-que-marcan-una-diferencia-real&quot;&gt;Trucos que marcan una diferencia real&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enseña, no sólo cuentes.&lt;/strong&gt; Un ejemplo trabajado de tu convención rinde más que tres párrafos describiéndola. Los modelos son extremadamente buenos reconociendo patrones a partir de un ejemplo, y meramente obedientes al seguir una norma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una skill por asunto.&lt;/strong&gt; Una única skill de “nuestros estándares” que cubra diseño, testing y despliegue salta con todo y no se aplica bien a nada. Divídela.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Di qué gana.&lt;/strong&gt; Toda skill que contenga más de una fuente de criterio necesita una frase que diga cuál tiene precedencia en un conflicto. Sin ella elige el modelo, y elige distinto cada vez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escribe las normas en negativo.&lt;/strong&gt; &lt;em&gt;No introduzcas una segunda biblioteca de componentes. No añadas dependencias para algo que ya hace la biblioteca estándar.&lt;/em&gt; Las restricciones negativas se siguen de forma más fiable que las positivas y casi siempre son lo que de verdad te importaba.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versiónala con el código que describe.&lt;/strong&gt; Una skill de diseño en el repositorio cambia en el mismo commit que los tokens que documenta. Una skill de diseño en tu portátil se desvía en quince días y luego enseña con toda confianza los colores del mes pasado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prueba con una sesión fría y una formulación perezosa.&lt;/strong&gt; “haz la página de ajustes” es como llegará la petición de verdad. Si la skill necesita la versión bien formulada para saltar, no funciona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deja morir a las skills viejas.&lt;/strong&gt; Una skill que describe una convención que abandonaste es peor que ninguna skill: es una instrucción segura de sí misma, siempre disponible, para hacer lo que no toca.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;si-no-estás-en-claude-code&quot;&gt;Si no estás en Claude Code&lt;/h2&gt;
&lt;p&gt;Las skills como carpetas son una función de Claude Code. Otras herramientas agénticas leen un único fichero de instrucciones siempre cargado, y la convención casi universal es &lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; en la raíz del repositorio&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;El contenido se traslada tal cual. Lo que no se traslada es la carga selectiva — todo lo que hay en ese fichero se paga en cada petición — así que la disciplina es otra: limítalo a lo que siempre es cierto, pon el material largo en documentación normal y apunta a ella desde el fichero en lugar de pegarla dentro.&lt;/p&gt;
&lt;p&gt;En cualquier caso, el movimiento de fondo es el mismo, y es el hábito de mayor palanca del desarrollo con agentes: &lt;strong&gt;la segunda vez que expliques algo, escríbelo donde el agente lo vaya a encontrar.&lt;/strong&gt; El resto del montaje que rodea a esto — el repositorio, el modelo, el host, el stack, las salvaguardas — son &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-setup/&quot;&gt;seis decisiones&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>GitHub para quien no escribe el código</title><link>https://commitcycle.com/es/insights/github-for-vibe-coders/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/github-for-vibe-coders/</guid><description>Git, GitHub, commits, ramas y los cuatro tipos de deshacer: el control de versiones que un vibe coder necesita, y los trucos que salvan un día.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Si nunca has usado GitHub, ignora cómo suele describirse. No es una red social para programadores, no estás ahí para leer el código de nadie, y los cuadraditos verdes no son un marcador que tengas que rellenar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es un sistema de guardado con historial, alojado en un sitio que no es tu portátil.&lt;/strong&gt; Eso es todo.&lt;/p&gt;
&lt;p&gt;Para un vibe coder se gana el sitio por una razón concreta. En algún momento — no quizá, en algún momento — una sesión reescribirá algo que ya funcionaba. Refactorizará un fichero que te gustaba, borrará una función que decidió que no se usaba, o arreglará un bug introduciendo dos en silencio. Sin commits, ese trabajo se ha ido y tu única recuperación es describirlo otra vez de memoria a un modelo que ha olvidado la conversación. Con commits, la recuperación es una frase.&lt;/p&gt;
&lt;p&gt;Esta guía es todo lo que necesitas para eso, y nada que no necesites.&lt;/p&gt;
&lt;h2 id=&quot;git-y-github-no-son-lo-mismo&quot;&gt;Git y GitHub no son lo mismo&lt;/h2&gt;
&lt;p&gt;Merece diez segundos, porque confundirlos es lo que hace confuso todo lo demás.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; es un programa en tu ordenador. Registra versiones de una carpeta. Funciona sin internet, sin cuenta y sin web, y es lo que hace todo el trabajo real.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; es una web que guarda una copia de un repositorio Git y añade lo que una web puede añadir: una página para navegarlo, un sitio para otras personas, automatización que corre cuando subes algo.&lt;/p&gt;
&lt;p&gt;Así que cuando tu agente “commitea”, eso es Git, en local, al instante. Cuando hace “push”, eso es la copia viajando a GitHub. Por eso puedes trabajar en un avión y por eso un commit no es una copia de seguridad hasta que se ha subido.&lt;/p&gt;
&lt;p&gt;Las alternativas — GitLab, Bitbucket, Codeberg — son el mismo Git por debajo con otra web encima. Nada de esta guía cambia si eliges una de ésas.&lt;/p&gt;
&lt;h2 id=&quot;las-siete-palabras-que-cubren-casi-todo&quot;&gt;Las siete palabras que cubren casi todo&lt;/h2&gt;
&lt;p&gt;Van en inglés porque así es como las verás en GitHub y en la terminal:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Palabra&lt;/th&gt;
&lt;th&gt;Qué es en realidad&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repository&lt;/strong&gt; (“repo”)&lt;/td&gt;
&lt;td&gt;Tu carpeta de proyecto, más cada versión que ha sido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Un punto de guardado con una nota pegada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Branch&lt;/strong&gt; (rama)&lt;/td&gt;
&lt;td&gt;Una copia del proyecto donde puedes romper cosas sin peligro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Push / pull&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mandar tus commits a GitHub / traerte los de los demás&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Descargar un repositorio entero, historial incluido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pull request&lt;/strong&gt; (“PR”)&lt;/td&gt;
&lt;td&gt;“Aquí hay un cambio, míralo antes de que entre”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Merge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Plegar los commits de una rama dentro de otra&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dos más que verás y que puedes ignorar casi siempre: &lt;strong&gt;origin&lt;/strong&gt; es el apodo por defecto de “la copia que está en GitHub”, y &lt;strong&gt;main&lt;/strong&gt; es el nombre por defecto de la rama principal.&lt;/p&gt;
&lt;h2 id=&quot;necesito-aprender-comandos-de-git&quot;&gt;¿Necesito aprender comandos de Git?&lt;/h2&gt;
&lt;p&gt;No, y ésta es la parte que nadie le cuenta a quien empieza. &lt;strong&gt;Necesitas tres frases que decirle a tu agente&lt;/strong&gt;, y él ejecuta los comandos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Commitea esto con un mensaje claro.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;¿Qué ha cambiado desde el último commit?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Deshaz todo desde el último commit.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ésa es la interfaz entera de tu primer mes. Lo que sí necesitas es entender &lt;em&gt;qué significan esas tres cosas&lt;/em&gt;, que es para lo que está el resto de esta página — porque el fallo habitual no es teclear el comando equivocado, es pedir el tipo de deshacer equivocado.&lt;/p&gt;
&lt;p&gt;Si prefieres botones a frases, &lt;strong&gt;GitHub Desktop&lt;/strong&gt; es gratuito, muestra los ficheros cambiados como un diff visual y convierte commit y push en dos clics. Mucha gente que publica productos reales no usa nunca la terminal para Git.&lt;/p&gt;
&lt;h2 id=&quot;dónde-vive-tu-código-mientras-trabajas&quot;&gt;Dónde vive tu código mientras trabajas&lt;/h2&gt;
&lt;p&gt;Los mensajes de Git hablan de ficheros “staged”, “tracked” y “untracked”, y nada de eso tiene sentido hasta que sabes que hay &lt;strong&gt;tres sitios donde puede estar un cambio&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sitio&lt;/th&gt;
&lt;th&gt;Qué significa&lt;/th&gt;
&lt;th&gt;Cómo sale de ahí&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Directorio de trabajo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tú (o el agente) habéis editado el fichero. No hay nada registrado&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git add&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Área de staging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marcado como parte del próximo commit, pero todavía sin guardar&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git commit&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ya en un commit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Registrado en el historial de forma permanente&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push&lt;/code&gt; lo manda a GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;El área de staging es la parte que al principio parece inútil. Su propósito es elegir: han cambiado doce ficheros, cuatro pertenecen a este commit, así que pones esos cuatro en staging. Como vibe coder commitearás casi siempre todo de golpe — pero necesitas saber que el staging existe, porque si no “changes not staged for commit” es un mensaje de error sobre nada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;git status&lt;/code&gt; es el comando de “dónde estoy”&lt;/strong&gt;, y es el que merece la pena que sepas leer tú. Te dice en qué rama estás, qué ha cambiado, qué está en staging y si vas por delante o por detrás de GitHub. Cuando algo confunde, esto es lo primero que hay que mirar, y es completamente seguro: no cambia nada.&lt;/p&gt;
&lt;h2 id=&quot;el-primer-fichero-que-importa-gitignore&quot;&gt;El primer fichero que importa: .gitignore&lt;/h2&gt;
&lt;p&gt;Antes de tu primer push, antes que nada: &lt;code&gt;.gitignore&lt;/code&gt; es una lista de ficheros que Git no debe registrar nunca.&lt;/p&gt;
&lt;p&gt;Como mínimo contiene:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;.env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;.env.local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;node_modules/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;.DS_Store&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;dist/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;.env&lt;/code&gt; es el que importa. Ahí es donde viven tus API keys, y esa única línea es lo que impide que se publiquen la primera vez que subes algo. Los repositorios públicos los escanea continuamente gente que busca exactamente esto, y una clave filtrada se encuentra en minutos, no en días.&lt;/p&gt;
&lt;p&gt;Pídelo explícitamente al montar el proyecto — &lt;em&gt;añade un .gitignore apropiado para este stack, y asegúrate de que .env está dentro&lt;/em&gt; — y luego comprueba con tus propios ojos que &lt;code&gt;.env&lt;/code&gt; aparece. Es una comprobación de treinta segundos que evita el error caro más habitual de quien empieza.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Haz el repositorio privado por defecto.&lt;/strong&gt; Público es una decisión deliberada de publicar, y es mucho más fácil hacer público después un repositorio privado que despublicar algo, incluido todo lo que hay en su historial.&lt;/p&gt;
&lt;h2 id=&quot;cómo-leo-un-diff-sin-leer-código&quot;&gt;¿Cómo leo un diff sin leer código?&lt;/h2&gt;
&lt;p&gt;Un &lt;strong&gt;diff&lt;/strong&gt; es lo que cambió, mostrado línea a línea. Las líneas verdes con &lt;code&gt;+&lt;/code&gt; se añadieron, las rojas con &lt;code&gt;-&lt;/code&gt; se quitaron, las grises son contexto sin cambios. No necesitas entender el código para sacarle valor real:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;¿Cómo de grande es?&lt;/strong&gt; Doce líneas cambiadas para una petición pequeña es normal. Cuatrocientas es una señal para parar y preguntar qué más ha hecho.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Qué ficheros?&lt;/strong&gt; Si pediste un cambio de color y en la lista hay un fichero con &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;migration&lt;/code&gt; o &lt;code&gt;schema&lt;/code&gt; en el nombre, ése es el momento de preguntar por qué.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Se ha borrado algo que no pediste borrar?&lt;/strong&gt; Los bloques largos de rojo merecen una pregunta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ésa es toda la habilidad, y es la mayor parte de lo que una revisión de código te da en un proyecto en solitario. &lt;em&gt;Enséñame el diff y explícame en lenguaje llano qué hace el cambio de cada fichero&lt;/em&gt; es una buena costumbre antes de cada commit.&lt;/p&gt;
&lt;h2 id=&quot;qué-hace-que-merezca-la-pena-escribir-un-mensaje-de-commit&quot;&gt;¿Qué hace que merezca la pena escribir un mensaje de commit?&lt;/h2&gt;
&lt;p&gt;Su único trabajo es ayudar al tú del futuro a encontrar un momento en el tiempo. “Update” y “fixes” fracasan en eso; seis seguidos son indistinguibles.&lt;/p&gt;
&lt;p&gt;Escribe cuál &lt;em&gt;es&lt;/em&gt; el estado, no lo que hiciste: &lt;code&gt;pantalla de login funciona, validación aún sin hacer&lt;/code&gt;. Seis semanas después, ese mensaje es lo que te deja decir “vuelve a cuando el login funcionaba” y que signifique algo preciso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Commitea cuando algo funciona, no al final del día.&lt;/strong&gt; El final del día es un punto de guardado para ocho horas de decisiones. Cada estado que funciona es un sitio al que puedes volver.&lt;/p&gt;
&lt;h2 id=&quot;cuándo-necesito-de-verdad-una-rama&quot;&gt;¿Cuándo necesito de verdad una rama?&lt;/h2&gt;
&lt;p&gt;Como vibe coder en solitario, menos a menudo de lo que dan a entender los tutoriales. Necesitas una cuando &lt;strong&gt;estás a punto de probar algo de lo que podrías arrepentirte&lt;/strong&gt;: una refactorización grande, un cambio arriesgado de dependencia, un experimento del que sólo estás medio convencido.&lt;/p&gt;
&lt;p&gt;La razón es que deshacer sale gratis. Estás en &lt;code&gt;experiment&lt;/code&gt;, sale mal, te vuelves a &lt;code&gt;main&lt;/code&gt; y borras la rama. Nada que desenredar, nada que revertir, ninguna discusión con el agente sobre qué cambió.&lt;/p&gt;
&lt;p&gt;En el momento en que alguien más toca el repositorio, esto deja de ser opcional y pasa a ser una rama por cada pieza de trabajo — que es &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-shared-repository/&quot;&gt;donde el vibe coding se pone genuinamente más difícil&lt;/a&gt;, y un problema distinto de éste.&lt;/p&gt;
&lt;h2 id=&quot;cómo-deshago-algo&quot;&gt;¿Cómo deshago algo?&lt;/h2&gt;
&lt;p&gt;La sección más importante de esta página. Hay &lt;strong&gt;cuatro tipos de deshacer&lt;/strong&gt; y pedir el que no es, es como la gente pierde trabajo intentando salvarlo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Tienes cambios sin commitear y los quieres fuera.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;git restore .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Todo lo posterior al último commit desaparece. Éste es el de cada día: la sesión salió mal, no había nada que valiera la pena, se empieza otra vez desde el último estado bueno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Commiteaste, pero no has subido, y quieres el commit fuera.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;git reset --soft HEAD~1   # deshace el commit, conserva los cambios&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;git reset --hard HEAD~1   # deshace el commit y los cambios&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;--soft&lt;/code&gt; es para “commit correcto, mensaje equivocado, momento equivocado”. &lt;code&gt;--hard&lt;/code&gt; es para “esa dirección entera estaba mal”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Ya subiste, y otras personas (o un despliegue) lo tienen.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;git revert &amp;lt;commit&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Esto hace un commit &lt;em&gt;nuevo&lt;/em&gt; que deshace el viejo. Es el seguro, porque añade al historial en lugar de reescribirlo, y nada de lo que ya tiene otra persona entra en conflicto con lo que tienes tú.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Crees que has perdido algo para siempre.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;git reflog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Git guarda un registro privado de cada posición en la que ha estado tu rama durante unos noventa días, incluidos commits que “borraste” y ramas que quitaste. Casi nada se pierde de verdad. Éste es al que recurrir después de un &lt;code&gt;--hard&lt;/code&gt; del que te arrepientes o de un force-push que se comió tu tarde — y merece la pena saber que existe precisamente porque el momento en que lo necesitas es el momento en que estás en pánico.&lt;/p&gt;
&lt;h2 id=&quot;qué-es-un-conflicto-de-merge-y-quién-lo-arregla&quot;&gt;¿Qué es un conflicto de merge, y quién lo arregla?&lt;/h2&gt;
&lt;p&gt;Dos ramas cambiaron las mismas líneas. Git no va a adivinar qué versión gana, así que marca la sección en disputa en el fichero con &lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt; y &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt; y se para.&lt;/p&gt;
&lt;p&gt;No hay nada roto ni nada perdido. Las dos versiones están ahí mismo; alguien tiene que elegir.&lt;/p&gt;
&lt;p&gt;Los agentes son buenos en esto, con una condición: &lt;strong&gt;cuéntales para qué era cada cambio.&lt;/strong&gt; La decisión va de intención, no de sintaxis — &lt;em&gt;este lado es la lógica nueva de precios, ése es el arreglo del bug de ayer, conserva los dos comportamientos&lt;/em&gt; obtiene una resolución correcta. “Arregla el conflicto” obtiene un cara o cruz.&lt;/p&gt;
&lt;h2 id=&quot;qué-pasa-si-commiteo-una-api-key&quot;&gt;¿Qué pasa si commiteo una API key?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rótala. Ya.&lt;/strong&gt; Ve al servicio, revoca la clave, emite una nueva.&lt;/p&gt;
&lt;p&gt;Borrar el fichero en un commit posterior no hace nada, porque la clave sigue ahí en el historial, donde cualquiera puede leerla. En un repositorio público, da por hecho que se rastreó en minutos: esto está automatizado a escala.&lt;/p&gt;
&lt;p&gt;GitHub ayuda en dos puntos, y merece la pena activar los dos. &lt;strong&gt;Secret scanning&lt;/strong&gt; detecta formatos de clave conocidos en tu repositorio y te avisa. &lt;strong&gt;Push protection&lt;/strong&gt; va más allá y bloquea el push antes de que el secreto llegue a aterrizar. Ninguno cubre todos los formatos, así que &lt;code&gt;.gitignore&lt;/code&gt; sigue siendo la defensa de verdad.&lt;/p&gt;
&lt;p&gt;Limpiar la clave del historial después es posible y engorroso. También es secundario: una vez rotada la clave, la que está en el historial es una cadena muerta.&lt;/p&gt;
&lt;h2 id=&quot;qué-más-es-github-más-allá-del-almacenamiento&quot;&gt;¿Qué más es GitHub, más allá del almacenamiento?&lt;/h2&gt;
&lt;p&gt;Cosas con las que te vas a encontrar, en una línea cada una:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt; — una lista de pendientes pegada al proyecto. Vale para notas en solitario, aunque un board de verdad es mejor en cuanto el trabajo toma forma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actions&lt;/strong&gt; — automatización que corre al hacer push. Así es como corren los tests y como se disparan los despliegues. Te lo encontrarás la primera vez que conectes un host.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Releases y tags&lt;/strong&gt; — un nombre clavado a un commit concreto. &lt;code&gt;v1-launch&lt;/code&gt; es un marcador que dice &lt;em&gt;esta versión era buena&lt;/em&gt;, y no cuesta nada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pages&lt;/strong&gt; — alojamiento estático gratuito directamente desde un repositorio. Vale para una landing, no para nada con backend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fork&lt;/strong&gt; — tu propia copia del repositorio de otra persona. Relevante cuando quieres cambiar el proyecto de código abierto de alguien.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependabot&lt;/strong&gt; — abre pull requests cuando una dependencia tiene un arreglo de seguridad. Gratis, merece la pena dejarlo activado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codespaces&lt;/strong&gt; — un entorno de desarrollo completo en el navegador. Útil cuando quieres trabajar desde una máquina que no tiene nada instalado.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cosas-que-te-confundirán-exactamente-una-vez&quot;&gt;Cosas que te confundirán exactamente una vez&lt;/h2&gt;
&lt;p&gt;Cada una de éstas produce un momento de alarma genuina, y cada una es inofensiva una vez la has visto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“You are in ‘detached HEAD’ state.”&lt;/strong&gt; Miraste un commit antiguo y ahora estás parado encima de él en lugar de sobre una rama. Los commits hechos aquí no pertenecen a nada y son fáciles de perder. &lt;code&gt;git switch main&lt;/code&gt; te devuelve. No hay nada roto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tu repositorio contiene otro repositorio.&lt;/strong&gt; Un agente ejecutó &lt;code&gt;git init&lt;/code&gt; dentro de una carpeta que ya estaba en un repo, normalmente mientras montaba algo. GitHub muestra entonces una carpeta que no puedes abrir y que no contiene nada. El arreglo es borrar la carpeta &lt;code&gt;.git&lt;/code&gt; interior — y la pista es un commit que añade un directorio pero ninguno de los ficheros que hay dentro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un fichero es demasiado grande para subirlo.&lt;/strong&gt; GitHub rechaza ficheros individuales de más de 100 MB, y un vídeo, un volcado de base de datos o un &lt;code&gt;node_modules&lt;/code&gt; que se escapó del &lt;code&gt;.gitignore&lt;/code&gt; van a chocar con eso. La trampa es que quitar el fichero no arregla el push, porque sigue en el historial: hay que deshacer el commit que lo añadió. Mucho más fácil prevenirlo: revisa el &lt;code&gt;.gitignore&lt;/code&gt; antes del primer push.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tus dos máquinas no se ponen de acuerdo.&lt;/strong&gt; Commiteaste en el portátil, subiste, y luego commiteaste en el sobremesa sin hacer pull. Git rechazará el segundo push. &lt;code&gt;git pull&lt;/code&gt; primero, resuelve lo que te pregunte, y luego push. La costumbre que lo evita del todo es hacer pull al empezar una sesión y no al terminarla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El agente ha commiteado como otra persona.&lt;/strong&gt; Los commits llevan el nombre y el email de tu configuración local de Git, que en una máquina recién estrenada puede estar vacía o mal. Merece la pena configurarlo una vez, o tu historial estará firmado por “unknown”.&lt;/p&gt;
&lt;h2 id=&quot;trucos-que-se-pagan-solos&quot;&gt;Trucos que se pagan solos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commitea antes de cada sesión con el agente, no después.&lt;/strong&gt; El commit no es un registro de lo que hiciste, es el punto de guardado que estás a punto de arriesgar. Diez segundos, y convierte cada desastre en un &lt;code&gt;git restore .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pide el diff antes de aceptar.&lt;/strong&gt; &lt;em&gt;Enséñame qué has cambiado y por qué&lt;/em&gt; pilla el extra servicial que no querías, que es el fallo más habitual que sobrevive hasta producción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una rama por experimento, y borrarla es el deshacer.&lt;/strong&gt; Más barato que cualquier revert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;git stash&lt;/code&gt; cuando el agente se queje de un árbol sucio.&lt;/strong&gt; Se guarda en el bolsillo tu trabajo sin commitear; &lt;code&gt;git stash pop&lt;/code&gt; te lo devuelve. Mejor que commitear basura para desatascarte.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--force-with-lease&lt;/code&gt;, nunca &lt;code&gt;--force&lt;/code&gt; a secas.&lt;/strong&gt; Los dos reescriben lo que hay en GitHub. El primero se niega si alguien ha subido algo mientras tanto; el segundo lo sobrescribe sin preguntar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protege &lt;code&gt;main&lt;/code&gt; en cuanto haya algo real dentro.&lt;/strong&gt; La protección de ramas de GitHub puede exigir un pull request antes de fusionar, lo que hace que “el agente subió directo a main a las 2 de la mañana” sea estructuralmente imposible en lugar de meramente desaconsejado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Etiqueta la versión que funcionaba.&lt;/strong&gt; Antes de un cambio grande, &lt;code&gt;v-works&lt;/code&gt; no cuesta nada y se encuentra sin esfuerzo, a diferencia de un hash de commit que no vas a reconocer jamás.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Haz squash al fusionar.&lt;/strong&gt; Catorce commits de “wip”, “fix”, “esta vez sí” se colapsan en una entrada con sentido, y tu historial sigue siendo legible por un humano — y por el siguiente agente que lo lea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acuérdate de que &lt;code&gt;reflog&lt;/code&gt; existe antes de necesitarlo.&lt;/strong&gt; En el momento en que lo necesites no estarás en condiciones de descubrirlo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;qué-hacer-el-primer-día&quot;&gt;Qué hacer el primer día&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Crea la cuenta. Haz el primer repositorio &lt;strong&gt;privado&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pon el &lt;code&gt;.gitignore&lt;/code&gt; en su sitio con &lt;code&gt;.env&lt;/code&gt; dentro, y compruébalo con tus propios ojos.&lt;/li&gt;
&lt;li&gt;Pídele al agente que haga el primer commit y lo suba. Mira el repositorio en GitHub y ve tus ficheros ahí.&lt;/li&gt;
&lt;li&gt;Y después, cada vez que algo funcione: &lt;em&gt;commitea esto con un mensaje claro&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ésa es la práctica entera. Todo lo demás de esta página está ahí para el día en que algo salga mal — y la razón para leerlo ahora es que el día en que algo sale mal es un mal día para estar aprendiendo qué tipo de deshacer necesitas.&lt;/p&gt;
&lt;p&gt;El resto del montaje en el que esto encaja — el modelo, el host, el stack, las salvaguardas — son &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-setup/&quot;&gt;seis decisiones&lt;/a&gt;, y el control de versiones es la que todas las demás dan por hecha que ya tienes.&lt;/p&gt;
</content:encoded></item><item><title>Seis decisiones antes de tu primer prompt, y por qué está ahí cada una</title><link>https://commitcycle.com/es/insights/vibe-coding-setup/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/vibe-coding-setup/</guid><description>GitHub, un modelo, un host, un stack, una salvaguarda y un primer prompt: el setup que se hace una vez, y qué protege de verdad cada pieza.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nadie quiere gastar una tarde en setup. La tentación es abrir un chat y empezar a describir la cosa, y para un prototipo ése es el instinto correcto — &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-first-steps/&quot;&gt;la primera semana tiene su propio post&lt;/a&gt; y casi todos los consejos de allí son &lt;em&gt;ve más rápido&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Éste es el otro post. Es para el momento en que decides que la cosa seguirá existiendo el mes que viene, y son seis decisiones. Cada una cuesta minutos. Cada una cierra una forma concreta de que la segunda semana salga mal, y la razón de tomarlas juntas es que las seis son baratas ahora y caras después.&lt;/p&gt;
&lt;p&gt;Ninguna de ellas va sobre qué modelo es el mejor.&lt;/p&gt;
&lt;h2 id=&quot;1-github-que-es-un-botón-de-deshacer-con-el-que-puedes-hablar&quot;&gt;1. GitHub, que es un botón de deshacer con el que puedes hablar&lt;/h2&gt;
&lt;p&gt;Si no lo has usado nunca, ignora cómo se suele describir. GitHub no es una red social para programadores y no estás ahí para leer el código de nadie. Es &lt;strong&gt;un sistema de guardado con historial&lt;/strong&gt;, alojado en un sitio que no es tu portátil.&lt;/p&gt;
&lt;p&gt;Cinco palabras cubren casi todo lo que necesitas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repositorio&lt;/strong&gt; — la carpeta de tu proyecto, más todas las versiones que ha tenido.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit&lt;/strong&gt; — un punto de guardado con una nota pegada. «La pantalla de login funciona» es un commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rama&lt;/strong&gt; (branch) — una copia del proyecto donde puedes romper cosas sin romper el original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push / pull&lt;/strong&gt; — sincronizar entre la copia de tu máquina y la copia en GitHub.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pull request&lt;/strong&gt; — «aquí hay un cambio, míralo antes de que entre». Estando solo no lo necesitarás; lo necesitarás el día en que otra persona toque el proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y aquí está por qué le importa específicamente a quien hace vibe coding. En algún momento — no «quizá» — una sesión reescribirá algo que ya funcionaba. Refactorizará un fichero que te gustaba, o borrará una función que decidió que no se usaba, o arreglará un bug metiendo dos. Sin commits, ese trabajo desaparece y tu única recuperación es describirlo otra vez de memoria. Con commits, la recuperación es una frase.&lt;/p&gt;
&lt;p&gt;Lo que lleva a la parte que nadie le cuenta a los principiantes: &lt;strong&gt;no tienes que aprender Git.&lt;/strong&gt; Tienes que aprender tres frases que decirle a tu agente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Haz commit de esto con un mensaje claro.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;¿Qué ha cambiado desde el último commit?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Deshaz todo desde el último commit.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ésa es toda la interfaz durante el primer mes. El agente ejecuta los comandos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Móntalo así y deja de pensar en ello:&lt;/strong&gt; crea la cuenta, haz el repositorio &lt;strong&gt;privado&lt;/strong&gt; por defecto, y antes que nada asegúrate de que &lt;code&gt;.env&lt;/code&gt; está en &lt;code&gt;.gitignore&lt;/code&gt;. Esa única línea es lo que impide que tus claves de API se publiquen la primera vez que hagas push. Las claves se filtran constantemente desde repositorios de principiantes, y se rastrean en cuestión de minutos.&lt;/p&gt;
&lt;p&gt;Luego un hábito, que es lo de mayor rendimiento de todo este post: &lt;strong&gt;cuando algo funcione, haz commit.&lt;/strong&gt; No al final del día. En el momento en que funciona.&lt;/p&gt;
&lt;p&gt;Con eso basta para empezar. El resto — leer un diff sin leer código, los cuatro tipos distintos de deshacer y cuándo aplica cada uno, qué hacer el día que hagas commit de una clave de API — está en &lt;a href=&quot;https://commitcycle.com/es/insights/github-for-vibe-coders/&quot;&gt;la guía completa&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;2-un-modelo-y-importa-menos-de-lo-que-crees&quot;&gt;2. Un modelo, y importa menos de lo que crees&lt;/h2&gt;
&lt;p&gt;Claude Code, Codex, o un modelo de pesos abiertos que ejecutes tú. Dicho con franqueza: &lt;strong&gt;ésta es la decisión que puedes revertir gratis.&lt;/strong&gt; El repositorio es portable, tus prompts son portables, y nada de lo que construyas queda atado a la herramienta que lo escribió.&lt;/p&gt;
&lt;p&gt;Lo que de verdad los separa no son las puntuaciones en benchmarks, es si la herramienta vive &lt;em&gt;dentro de tu proyecto&lt;/em&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Qué es&lt;/th&gt;
&lt;th&gt;Dónde encaja&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLI agéntica en tu terminal, lee y escribe tus ficheros, ejecuta comandos&lt;/td&gt;
&lt;td&gt;Construir funcionalidades enteras a través de muchos ficheros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Codex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El equivalente agéntico de OpenAI, terminal y nube&lt;/td&gt;
&lt;td&gt;El mismo trabajo, otro estilo de la casa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pesos abiertos&lt;/strong&gt; (vía Ollama, LM Studio, y un cliente como Aider o Cline)&lt;/td&gt;
&lt;td&gt;Modelos corriendo en tu máquina o en tu propio servidor&lt;/td&gt;
&lt;td&gt;Privacidad, control de coste, sin factura por token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La recomendación: &lt;strong&gt;elige una herramienta agéntica de pago y quédate en ella un mes.&lt;/strong&gt; No porque las otras sean peores, sino porque la habilidad que estás construyendo es saber qué pedir y cómo detectar que la respuesta está mal, y esa habilidad se transfiere despacio mientras sigues cambiando de herramienta cada semana.&lt;/p&gt;
&lt;p&gt;Sobre open source, con franqueza: es real, es más barato, es privado, y es el primer movimiento equivocado. Te gastarás la primera semana en setup en lugar de en la cosa que querías construir, y los trabajos agénticos largos — muchos ficheros, muchos pasos, sostener el plan hasta el final — son exactamente donde la brecha sigue siendo más ancha. Vuelve a ello en el mes dos, cuando sepas qué estás comparando.&lt;/p&gt;
&lt;p&gt;Y elijas la que elijas, la palanca no está en el modelo. Está en lo que el modelo puede ver de tu proyecto, que son las decisiones 4, 5 y 6.&lt;/p&gt;
&lt;h2 id=&quot;3-un-host-y-una-sola-cuenta-si-puedes&quot;&gt;3. Un host, y una sola cuenta si puedes&lt;/h2&gt;
&lt;p&gt;Vas a necesitar dónde ponerlo. Las dos respuestas obvias son &lt;strong&gt;Cloudflare&lt;/strong&gt; y &lt;strong&gt;Vercel&lt;/strong&gt;, y la pregunta que decide no es el rendimiento.&lt;/p&gt;
&lt;p&gt;Es cuántas cuentas quieres sostener.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt; es el todo-en-uno: hosting, una base de datos (D1), almacenamiento de ficheros (R2), clave-valor, el propio dominio, DNS, enrutado de correo — un login, una factura, un sitio donde están mal las cosas cuando están mal. Para alguien que empieza, esa consolidación vale más que cualquier funcionalidad concreta. El precio es un runtime que no es exactamente Node, así que un puñado de paquetes de npm no correrán ahí, y te enteras al desplegar y no al instalar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vercel&lt;/strong&gt; te da el despliegue más suave que existe si estás en Next.js. El intercambio es que las piezas de datos vienen de socios del marketplace, así que la base de datos es el panel de otro, el almacenamiento es otro más, y acabarás reconectando tres servicios un domingo por la noche intentando recordar cuál tiene la credencial que falla.&lt;/p&gt;
&lt;p&gt;Elige Cloudflare salvo que tengas un motivo concreto para estar en Next.js.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Y compra el dominio el primer día&lt;/strong&gt;, del mismo proveedor. Cuesta unos diez euros, lleva cuatro minutos, y cambia cómo tratas el proyecto. Una cosa con dominio es una cosa que existe.&lt;/p&gt;
&lt;h2 id=&quot;4-un-stack--elegido-por-ti-y-por-escrito&quot;&gt;4. Un stack — elegido por ti, y por escrito&lt;/h2&gt;
&lt;p&gt;La tentación es dejárselo al modelo. No lo hagas, y el motivo no es que su elección fuera a ser mala.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es que el modelo elige por conversación.&lt;/strong&gt; La sesión del lunes elige Next.js. La del miércoles, sin memoria del lunes, elige Vite y React Router. La del viernes añade una biblioteca de componentes que duplica la que ya tienes. Nada falla cuando esto pasa — simplemente acabas con un proyecto que son tres proyectos con una gabardina puesta, y cada sesión futura tiene que adivinar en qué convención está.&lt;/p&gt;
&lt;p&gt;Así que: &lt;strong&gt;React + Tailwind, y dile al modelo que use shadcn/ui.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por qué esa combinación concreta, cuando hay montones de otras perfectamente buenas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es la &lt;strong&gt;combinación mejor documentada en los datos de entrenamiento de cualquier modelo&lt;/strong&gt;. Estás eligiendo la región del mapa donde el modelo es más certero y menos inventivo, y eso vale más que cualquier ventaja técnica el primer día.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind mantiene el estilo en el marcado&lt;/strong&gt;, así que cuando dices «haz esta card más compacta», el agente cambia una línea en el fichero que estás mirando en vez de perseguir una hoja de estilos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Los componentes de shadcn se copian a tu repositorio&lt;/strong&gt;, no se instalan como dependencia. Ésta es la parte infravalorada. Cuando pides un cambio en un botón, el agente edita tu botón. Con una biblioteca de componentes tradicional, tiene que pelearse con la API de la biblioteca, y normalmente pierde envolviéndola en tres capas de tontería.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Una excepción, y es común.&lt;/strong&gt; Si lo que construyes es sobre todo contenido — un sitio, una landing, un blog, un conjunto de documentación, con un pequeño panel de administración pegado — usa &lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt; en su lugar. Envía casi nada de JavaScript por defecto, las páginas van rápidas sin que hagas nada, y escala hasta ser una aplicación de verdad cuando lo necesitas. Este sitio es Astro.&lt;/p&gt;
&lt;h3 id=&quot;skills-cómo-dejas-de-repetirte&quot;&gt;Skills: cómo dejas de repetirte&lt;/h3&gt;
&lt;p&gt;Una &lt;strong&gt;skill&lt;/strong&gt; es una carpeta con un fichero &lt;code&gt;SKILL.md&lt;/code&gt; dentro que tu agente lee &lt;em&gt;sólo cuando es relevante&lt;/em&gt;. Esa última parte es todo el sentido: son instrucciones disponibles sin estar estorbando.&lt;/p&gt;
&lt;p&gt;La anatomía es pequeña. Un fichero en &lt;code&gt;.claude/skills/&amp;lt;nombre&amp;gt;/SKILL.md&lt;/code&gt;, que empieza con:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;name: my-design-system&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;description: Úsala al construir o reestilizar cualquier UI de este proyecto —&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;colores, tipografía, espaciado, patrones de componentes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Todo lo que el agente debería saber, en markdown normal.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;La línea &lt;code&gt;description&lt;/code&gt; es la importante, porque es contra lo que el agente compara para decidir si carga la skill siquiera. Descripción vaga, skill que no dispara nunca.&lt;/p&gt;
&lt;p&gt;Dos sitios donde ponerlas: &lt;strong&gt;&lt;code&gt;.claude/skills/&lt;/code&gt; dentro de tu proyecto&lt;/strong&gt;, lo que significa que va commiteada a GitHub y sigue ahí mañana y en tu otra máquina, o &lt;strong&gt;&lt;code&gt;~/.claude/skills/&lt;/code&gt;&lt;/strong&gt;, para cosas que quieres en todos los proyectos que toques. Prefiere la del proyecto — una skill que describe &lt;em&gt;este&lt;/em&gt; producto pertenece a &lt;em&gt;este&lt;/em&gt; producto.&lt;/p&gt;
&lt;p&gt;Para instalar una que te hayan dado: suelta la carpeta dentro, arranca una sesión nueva, y pregunta &lt;em&gt;qué skills tienes disponibles&lt;/em&gt;. Si no la lista, la descripción es lo primero que hay que revisar.&lt;/p&gt;
&lt;p&gt;Ésa es la forma que tiene. Por qué la descripción es la única parte que siempre se carga, qué va en una skill frente a AGENTS.md, y la manera más rápida de escribir la primera — &lt;a href=&quot;https://commitcycle.com/es/insights/agent-skills-guide/&quot;&gt;la guía completa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Las skills son una funcionalidad de Claude Code. Si te fuiste con Codex, la palanca equivalente es el fichero &lt;code&gt;AGENTS.md&lt;/code&gt; descrito en la sección extra — la misma idea, con una carga menos selectiva.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La de diseño merece la pena el primer día.&lt;/strong&gt; Si tienes una idea pero ni marca, ni colores, ni opinión visual todavía, ve a &lt;a href=&quot;https://startpow.com/&quot;&gt;startpow.com&lt;/a&gt;, elige lo que te guste, exporta, y escoge la descarga de skill. Suéltala en &lt;code&gt;.claude/skills/&lt;/code&gt;. Desde ese momento cada pantalla que construya el agente llega con tus colores, tu tipografía y tu espaciado, sin que los describas otra vez — que es la diferencia entre un producto y una demo, y cuesta unos diez minutos.&lt;/p&gt;
&lt;h2 id=&quot;5-algo-que-recuerde-para-que-mañana-no-sea-reconstruir&quot;&gt;5. Algo que recuerde, para que mañana no sea reconstruir&lt;/h2&gt;
&lt;p&gt;Éste es el fallo del que va esta decisión, y merece la pena ser preciso porque la versión popular es falsa.&lt;/p&gt;
&lt;p&gt;El modelo no es malicioso. Es &lt;strong&gt;complaciente y rápido, en sitios donde equivocarse sale caro&lt;/strong&gt;. La base de datos no la tira una IA rebelde; la tira porque una migración estaba rota, tirar la tabla era el camino más corto a un test en verde, y no se le preguntó a nadie. El auth no se reescribe en un acto de sabotaje; se reescribe porque un test fallaba y la comprobación de auth era lo que lo hacía fallar.&lt;/p&gt;
&lt;p&gt;Dos capas de defensa, y la primera es gratis:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los hábitos.&lt;/strong&gt; Una base de datos de desarrollo que no es la de producción. Credenciales de producción que el agente nunca tiene. Un commit antes de empezar nada. Y la instrucción que casi nadie da — &lt;em&gt;qué no debe tocar&lt;/em&gt;. Los modelos son complacientes; harán encantados algo útil que tú no querías.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Las herramientas.&lt;/strong&gt; Esto es lo que es &lt;a href=&quot;https://commitcycle.com/es/&quot;&gt;CommitCycle&lt;/a&gt;: el trabajo empieza como una task con un alcance declarado, el agente recibe acceso atado a esa única task y a una única rama y &lt;strong&gt;caduca por sí solo&lt;/strong&gt;, los paths que de verdad harían daño llevan &lt;a href=&quot;https://commitcycle.com/es/zones/&quot;&gt;un owner que tiene que decir que sí&lt;/a&gt;, y cada task cierra con &lt;a href=&quot;https://commitcycle.com/es/audit-record/&quot;&gt;un registro de lo que se declaró frente a lo que se tocó&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ahora el límite honesto, que es también la frase más importante de aquí: &lt;strong&gt;no elimina la posibilidad.&lt;/strong&gt; La responsabilidad final siempre es de la persona que aprueba lo que el agente pide. El agente ejecuta; tú consientes. Lo que las herramientas eliminan es la clase de accidente en la que nadie pudo decir que no, porque no se preguntó a nadie — y esa clase son la mayoría.&lt;/p&gt;
&lt;p&gt;Si lo quieres: &lt;code&gt;/plugin marketplace add pow-paulinho/commitcycle-plugin&lt;/code&gt; y después &lt;code&gt;/plugin install commitcycle@commitcycle&lt;/code&gt;, en &lt;a href=&quot;https://commitcycle.com/es/claude-code/&quot;&gt;Claude Code&lt;/a&gt;, o &lt;code&gt;npm i -g commitcycle&lt;/code&gt; para &lt;a href=&quot;https://commitcycle.com/es/cli/&quot;&gt;la CLI&lt;/a&gt;. El board alojado es sólo por invitación mientras esto es pequeño.&lt;/p&gt;
&lt;h2 id=&quot;6-y-ahora-qué-empieza-por-la-forma-no-por-la-pantalla&quot;&gt;6. ¿Y ahora qué? Empieza por la forma, no por la pantalla&lt;/h2&gt;
&lt;p&gt;Ya tienes las seis piezas. El instinto es pedir &lt;em&gt;constrúyeme la home&lt;/em&gt;, y es el primer movimiento equivocado — no porque la home no importe, sino porque es consecuencia de decisiones que aún no has tomado.&lt;/p&gt;
&lt;p&gt;La primera pregunta útil es: &lt;strong&gt;¿esto necesita cuentas?&lt;/strong&gt; Casi todo se ordena en cuatro superficies a partir de ahí.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Superficie&lt;/th&gt;
&lt;th&gt;Qué es&lt;/th&gt;
&lt;th&gt;¿La necesitas?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parte pública&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Todo lo visible sin iniciar sesión&lt;/td&gt;
&lt;td&gt;Casi siempre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Registro, login, recuperar contraseña, verificar correo&lt;/td&gt;
&lt;td&gt;Sólo si existe un «tu» algo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;El producto&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lo que ve la gente después de iniciar sesión&lt;/td&gt;
&lt;td&gt;Si hay auth, entonces sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Admin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Donde &lt;em&gt;tú&lt;/em&gt; ves usuarios, pagos, problemas&lt;/td&gt;
&lt;td&gt;Sí, y todo el mundo lo olvida hasta la segunda semana&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Si la respuesta honesta es «sobre todo parte pública, admin pequeño», constrúyelo en Astro y no añadas un sistema de autenticación que vas a mantener para un solo usuario. Si es «sobre todo producto», el auth y el modelo de datos son lo primero, porque todo lo demás cuelga de ellos.&lt;/p&gt;
&lt;h3 id=&quot;los-prompts&quot;&gt;Los prompts&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Primero, el que no escribe código.&lt;/strong&gt; Éste es el prompt de más valor de todo el proceso y es el que más gente se salta:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Quiero construir: [descríbelo en tres o cuatro frases, incluyendo para&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;quién es y por qué pagan, si es que pagan algo].&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;No escribas código todavía. Entrevístame — hazme las preguntas que&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;necesites que responda para planificar esto bien, por tandas.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Cuando tengas suficiente, devuélveme:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;1. Las pantallas, agrupadas en público / auth / producto / admin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;2. El modelo de datos, como lista de entidades y cómo se relacionan&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;3. Cualquier servicio de terceros que esto necesite y por qué&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;4. Qué construirías primero, y qué dejarías deliberadamente para&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;más adelante&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Estás haciendo que el modelo produzca una &lt;em&gt;pregunta&lt;/em&gt;, y revisar una pregunta es mucho más barato que revisar trescientas líneas de una respuesta construida sobre un supuesto que nunca viste.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Segundo, los cimientos.&lt;/strong&gt; Despliega la cosa vacía el primer día — «ponerlo en producción» no debería convertirse nunca en un proyecto aparte más adelante:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Monta el esqueleto del proyecto:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;- [Astro | React + Vite], TypeScript, Tailwind, shadcn/ui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;- Destino de despliegue: Cloudflare&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;- Un repositorio Git con un primer commit, subido a GitHub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Deja una página vacía desplegada y dame la URL en vivo antes de añadir&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;ninguna funcionalidad.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Después escribe AGENTS.md en la raíz recogiendo: el stack y las&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;versiones, la estructura de carpetas, las convenciones de nombres, los&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;comandos para ejecutar y compilar, y cualquier cosa que nunca debas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;hacer en este proyecto.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;No añadas todavía autenticación, base de datos ni ninguna dependencia&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;más allá de lo anterior.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Tercero, las superficies que necesitan un sistema detrás:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Construye registro y login: alta, inicio de sesión, cierre de sesión,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;recuperación de contraseña, verificación de correo.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Usa [el proveedor de auth que elegiste] en vez de hacerlo a mano.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Las pantallas usan nuestros componentes existentes — no introduzcas una&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;segunda biblioteca de componentes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Dame también la página de admin más pequeña que liste usuarios, porque&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;necesito poder ver si esto funciona.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;NO toques: pagos, las páginas de marketing, nada bajo [path].&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Si te encuentras con una decisión que yo no he tomado — precios,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;duración de sesión, qué pasa con las cuentas sin verificar después de&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;una semana — párate y pregunta en vez de elegir.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Fíjate en las dos líneas que casi nadie escribe: &lt;strong&gt;qué no debe tocar&lt;/strong&gt;, y &lt;strong&gt;párate y pregunta en vez de elegir&lt;/strong&gt;. Esas dos líneas evitan más retrabajo que cualquier cantidad de finura en prompt engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cuarto, una vez funcione, hazlo tuyo:&lt;/strong&gt; instala la skill de diseño y pide que se reestilice una pantalla con ella. Revisa ésa. Luego déjala correr con el resto.&lt;/p&gt;
&lt;h2 id=&quot;7-historias-de-usuario-que-es-donde-esto-se-pone-real&quot;&gt;7. Historias de usuario, que es donde esto se pone real&lt;/h2&gt;
&lt;p&gt;Si puedes narrar lo que hace una persona, puedes construirlo. Coge la frase del propio usuario:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alguien ve un anuncio, aterriza en el sitio, se crea una cuenta, se suscribe a un plan, paga con tarjeta, y su suscripción se activa.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Léela otra vez despacio, porque esa única frase es una especificación. Contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una &lt;strong&gt;landing&lt;/strong&gt; a la que apunta el anuncio, que no es la home&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registro&lt;/strong&gt;, y por tanto verificación, y por tanto correo que llega de verdad&lt;/li&gt;
&lt;li&gt;Probablemente &lt;strong&gt;onboarding&lt;/strong&gt;, porque una cuenta nueva y vacía es donde la gente se va&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;proveedor de pagos&lt;/strong&gt; — Stripe, en la práctica — y un &lt;strong&gt;checkout&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;webhook&lt;/strong&gt;, porque el pago tiene éxito en los servidores de Stripe y tu aplicación tiene que enterarse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entitlement&lt;/strong&gt;: algún estado que diga que esta cuenta ya es suscriptora&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature gating&lt;/strong&gt; guiado por ese estado, en todos los sitios donde importe&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;ruta de fallo&lt;/strong&gt;: tarjeta rechazada, pago correcto pero webhook que no llegó, suscripción cancelada a mitad de mes&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;vista de admin&lt;/strong&gt;, para que cuando alguien te escriba diciendo que pagó y no se activó nada, puedas mirar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una frase, nueve elementos de trabajo, y los tres últimos son los que se descubren en producción, por un cliente, si nadie los escribió.&lt;/p&gt;
&lt;p&gt;Esto también es trabajo que el modelo hace bien — dale la historia y pregúntale qué implica, y producirá una lista muy parecida a la de arriba. Lo que no puede hacer es recordar la lista el martes que viene. Para eso está un board: cada elemento se convierte en una task con un alcance, una task se convierte en una rama, y la rama cierra con un registro de lo que cambió de verdad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Esto suena aburrido.&lt;/strong&gt; Lo es, un poco. Y por no vender de más: tres prompts de verdad pueden darte algo que corre y se ve bien, y el subidón de verlo funcionar es real y merece la pena tenerlo. Ve y tenlo.&lt;/p&gt;
&lt;p&gt;Pero la cosa que sigue en pie en el mes tres, la que puedes entregarle a otra persona, la que puedes cambiar sin contener la respiración — ésa la construyó alguien que escribió qué se suponía que tenía que hacer. La consistencia es poco glamurosa y es toda la diferencia.&lt;/p&gt;
&lt;h2 id=&quot;pista-extra&quot;&gt;Pista extra&lt;/h2&gt;
&lt;p&gt;Cosas pequeñas, en orden aproximado de cuánto arrepentimiento evitan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; en la raíz del repositorio.&lt;/strong&gt; El fichero de mayor retorno que escribirás. Stack, convenciones, comandos, y la lista de cosas que nunca hay que hacer. Toda herramienta agéntica lo lee. El nuestro &lt;a href=&quot;https://commitcycle.com/es/agents-md/&quot;&gt;guarda ahí el mapa de zones y escribe la task activa en un &lt;code&gt;CLAUDE.local.md&lt;/code&gt; ignorado por git, que se limpia al entregar&lt;/a&gt;, pero uno escrito a mano ya es la mayor parte del valor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dos bases de datos desde el primer minuto.&lt;/strong&gt; Desarrollo y producción, nunca las mismas credenciales, y el agente sólo tiene la de desarrollo. Ésta es la defensa concreta contra el desastre concreto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Los secretos nunca en el repositorio.&lt;/strong&gt; &lt;code&gt;.env&lt;/code&gt; en &lt;code&gt;.gitignore&lt;/code&gt;, los valores reales en el almacén de secretos de tu host. Rota cualquier cosa que llegara a commitearse — borrar el fichero no lo quita del historial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Despliegues de preview por rama.&lt;/strong&gt; Tanto Cloudflare como Vercel te dan una URL por rama gratis. Ver el cambio en una URL real antes de que esté en producción vale más que cualquier cantidad de pruebas locales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deja que el agente vea lo que construyó.&lt;/strong&gt; Capturas, o una herramienta de navegador que pueda manejar. Un agente construyendo UI sin mirarla nunca trabaja a ciegas, y se nota.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguimiento de errores, más exactamente un número de analítica que mires de verdad.&lt;/strong&gt; Más de uno y no mirarás ninguno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Términos y política de privacidad antes de cobrar una tarjeta.&lt;/strong&gt; Stripe pedirá un sitio funcionando con ambos antes de activar la cuenta, y enterarse de eso el día del lanzamiento es un mal día.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conoce tu restauración, no sólo tu copia de seguridad.&lt;/strong&gt; Una copia sin probar es una creencia, no una copia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un fichero de decisiones.&lt;/strong&gt; Tres líneas por decisión: qué, por qué, qué descartaste. Seis semanas después es lo único que separa que vuelvas a litigarlo todo con un modelo que no estaba allí.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Espera que el modelo cueste más que el hosting.&lt;/strong&gt; Esa proporción es correcta y no es señal de que lo estés haciendo mal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todo el setup de arriba es una tarde. Lo que compra es que la segunda semana sea una continuación en vez de un proyecto de arqueología — y si quieres los hábitos que van encima, &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-first-steps/&quot;&gt;ése es el post de la primera semana&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Vibe coding, y la primera semana que no acaba en un desastre</title><link>https://commitcycle.com/es/insights/vibe-coding-first-steps/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/vibe-coding-first-steps/</guid><description>Qué es el vibe coding, dónde funciona de verdad, dónde deja de funcionar y las respuestas a lo que la gente pregunta antes de su primer intento serio.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;El vibe coding consiste en construir describiendo lo que quieres y aceptando lo que el modelo escribe sin leerlo todo. El término es de Andrej Karpathy, y lo que lo distingue no es que la IA escribiera el código — eso ya es lo normal — sino que &lt;strong&gt;nadie lo revisó línea a línea&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Eso es un intercambio, no un error. Que sea un buen intercambio depende por completo de una pregunta: ¿cuánto tiempo tiene que vivir este código?&lt;/p&gt;
&lt;h2 id=&quot;dónde-funciona-de-verdad-el-vibe-coding&quot;&gt;¿Dónde funciona de verdad el vibe coding?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Prototipos que piensas borrar.&lt;/strong&gt; El coste de equivocarte es que lo tiras, que es lo que ibas a hacer de todos modos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scripts y herramientas de un solo uso.&lt;/strong&gt; Algo que reordena un CSV, siembra una base de datos, hace scraping de una página una vez. Si produce la salida correcta has terminado; nadie va a mantenerlo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aprender la forma de algo que no conoces.&lt;/strong&gt; Conseguir un ejemplo funcionando de una biblioteca que no has usado nunca es más rápido así que leerte antes la documentación, y puedes leer la documentación después con algo concreto delante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cualquier cosa donde el feedback sea inmediato y total.&lt;/strong&gt; Si funciona, funciona, y te enteras en diez segundos.&lt;/p&gt;
&lt;p&gt;El hilo común es que &lt;strong&gt;equivocarse es barato y evidente&lt;/strong&gt;. Ésa es la condición. No el tamaño del proyecto, ni el lenguaje, ni si es «real» — sólo si un error aparece de inmediato y cuesta poco.&lt;/p&gt;
&lt;h2 id=&quot;cuándo-deja-de-funcionar&quot;&gt;¿Cuándo deja de funcionar?&lt;/h2&gt;
&lt;p&gt;En el momento en que el código sobrevive a la sesión que lo produjo.&lt;/p&gt;
&lt;p&gt;Esto no es un juicio moral. Es aritmética: compraste velocidad saltándote la comprensión, y la factura llega cuando alguien tiene que cambiar código que nadie entendió cuando se escribió. Si nadie lo cambia nunca, la factura no llega nunca y la velocidad te salió gratis. Ése es un resultado real y ocurre mucho.&lt;/p&gt;
&lt;p&gt;Lo que hace que salga mal es no saber en cuál de los dos casos estás. Casi todas las malas experiencias empiezan como un prototipo que se volvió crítico en silencio, sin que nadie decidiera nada.&lt;/p&gt;
&lt;h2 id=&quot;cómo-sé-en-qué-caso-estoy&quot;&gt;¿Cómo sé en qué caso estoy?&lt;/h2&gt;
&lt;p&gt;Tres preguntas, y van sobre la situación más que sobre el código:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pregunta&lt;/th&gt;
&lt;th&gt;El vibe coding vale cuando&lt;/th&gt;
&lt;th&gt;Deja de valer cuando&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;¿Con qué rapidez me entero de que me equivoqué?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;En segundos. Lo ejecutas y lo ves&lt;/td&gt;
&lt;td&gt;En semanas, a través de un cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;¿Qué cuesta equivocarse?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lo borras y empiezas otra vez&lt;/td&gt;
&lt;td&gt;Dinero, datos o la confianza de alguien&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;¿Quién más depende de esto?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nadie&lt;/td&gt;
&lt;td&gt;Cualquiera que no seas tú&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Las tres apuntando en la misma dirección es el caso para el que se hizo esto. Las tres apuntando en la otra y no estás haciendo vibe coding, estás apostando con pasos extra.&lt;/p&gt;
&lt;p&gt;Lo útil es que &lt;strong&gt;esto se decide por pieza de trabajo, no por proyecto&lt;/strong&gt;. La misma tarde puede contener un script desechable que no lees nunca y un cambio de permisos que lees dos veces. Tratar un repositorio entero como un único ajuste es lo que produce los dos errores habituales: leerlo todo en un prototipo, y no leer nada en la parte que muerde.&lt;/p&gt;
&lt;h2 id=&quot;qué-no-debería-hacer-nunca-con-vibe-coding&quot;&gt;¿Qué no debería hacer nunca con vibe coding?&lt;/h2&gt;
&lt;p&gt;Una lista corta, y el motivo es el mismo en todos los puntos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autenticación y permisos.&lt;/strong&gt; Equivocarse aquí no lanza un error. Deja entrar en silencio a quien no debe, y te enteras por otra persona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dinero.&lt;/strong&gt; Precios, cargos, devoluciones, divisas. Un off-by-one en un bucle es un bug; un off-by-one en céntimos es un chargeback y un correo que no quieres escribir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cualquier cosa que borre.&lt;/strong&gt; Los borrados en cascada sobre todo. La prueba para esta categoría es si existe un deshacer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migraciones de base de datos.&lt;/strong&gt; Se ejecutan una vez, contra datos reales, y el fallo se descubre cuando los datos ya no están.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Todo lo que maneje datos personales de otros.&lt;/strong&gt; Equivocarse aquí lleva un regulador incorporado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fíjate en lo que &lt;em&gt;no&lt;/em&gt; es el criterio: la dificultad. Algunas de éstas son código fácil. La propiedad que comparten es que &lt;strong&gt;equivocarse no se anuncia solo&lt;/strong&gt; — que es exactamente el supuesto sobre el que corre el vibe coding.&lt;/p&gt;
&lt;p&gt;Esto no es «escríbelo tú». Es «lee éste». Deja que el modelo lo escriba, después lee de verdad lo que escribió, y pídele que te explique las partes que no puedas seguir. La lectura es todo el coste, y en estas cinco merece la pena pagarlo.&lt;/p&gt;
&lt;h2 id=&quot;la-primera-semana&quot;&gt;La primera semana&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Mantén las sesiones cortas, y termina cada una en algo que funcione.&lt;/strong&gt; Éste es el hábito de mayor rendimiento y no va sobre la IA en absoluto. Una sesión larga acumula decisiones que nadie escribió, y cuando por fin algo va mal no hay ningún punto al que volver. Sesiones cortas con un commit que funciona al final te dan un sitio al que regresar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lee las partes caras.&lt;/strong&gt; No todo — eso echaría a perder el propósito. Lee todo lo que toque dinero, autenticación, borrado de datos, o código en el que también trabaja otra persona. El resto, ojéalo. La habilidad que se construye aquí es el triage, y es una habilidad real: saber dónde equivocarse sale caro es la mayor parte de lo que sabe un ingeniero senior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Di lo que no debe hacer.&lt;/strong&gt; Casi todo el mundo describe lo que quiere y se para ahí. La instrucción que más tiempo ahorra es la que descarta cosas — &lt;em&gt;no toques el módulo de auth, no añadas dependencias, no cambies el schema de la base de datos&lt;/em&gt;. Los modelos son complacientes y harán encantados algo útil que tú no querías.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejecútalo antes de creértelo.&lt;/strong&gt; Código generado que parece correcto y no arranca es el fallo suelto más común, y el más barato de detectar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date cuenta de cuándo el prototipo dejó de ser un prototipo.&lt;/strong&gt; Suele haber un momento concreto: alguien más lo abre, o se pone delante de un usuario, o lo despliegas. Ése es el momento en que el intercambio cambia, y la respuesta honesta es volver atrás y leerlo bien.&lt;/p&gt;
&lt;h2 id=&quot;cómo-es-una-buena-sesión-de-principio-a-fin&quot;&gt;Cómo es una buena sesión, de principio a fin&lt;/h2&gt;
&lt;p&gt;En concreto, porque «mantén las sesiones cortas» es un consejo con el que puedes estar de acuerdo y aun así no aplicar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Empieza desde un commit.&lt;/strong&gt; No desde un repositorio ordenado: desde uno con commit. Éste es el punto de guardado, y cuesta diez segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Di el objetivo y el límite en el mismo mensaje.&lt;/strong&gt; Lo que quieres, y lo que está prohibido. La segunda mitad es la que la gente se salta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Déjalo trabajar sin interrumpir.&lt;/strong&gt; Corregir el rumbo a mitad de vuelo produce un cambio que es medio de un plan y medio de otro, y eso es más difícil de leer que cualquiera de los dos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lee el diff, no el código base.&lt;/strong&gt; Cuántos ficheros, cuáles, y si se ha borrado algo que no pediste borrar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejecútalo.&lt;/strong&gt; Antes de creerte nada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Haz commit, o tira la sesión entera.&lt;/strong&gt; Los dos son resultados aceptables. El que no lo es: arrastrar un estado a medias hasta la siguiente sesión.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alrededor de una hora es donde esto suele caer para la mayoría, y el número importa menos que la forma: &lt;strong&gt;la sesión es la unidad que puedes tirar.&lt;/strong&gt; En cuanto una sesión lleva tanto tiempo que descartarla resulta impensable, has perdido la propiedad que hacía segura toda la aproximación — y eso pasa de forma gradual, que es justo por lo que vale la pena vigilarlo.&lt;/p&gt;
&lt;h2 id=&quot;las-preguntas-que-la-gente-hace-de-verdad&quot;&gt;Las preguntas que la gente hace de verdad&lt;/h2&gt;
&lt;h3 id=&quot;sigo-siendo-un-desarrollador-de-verdad-si-hago-esto&quot;&gt;«¿Sigo siendo un desarrollador de verdad si hago esto?»&lt;/h3&gt;
&lt;p&gt;La pregunta de debajo es si estás construyendo una habilidad o esquivándola. Estás construyendo una — triage, especificación, saber dónde vive el riesgo — y no es la misma habilidad que escribir tú la sintaxis. Las dos son reales. Ninguna se basta sola.&lt;/p&gt;
&lt;h3 id=&quot;cómo-evito-que-invente-bibliotecas-que-no-existen&quot;&gt;«¿Cómo evito que invente bibliotecas que no existen?»&lt;/h3&gt;
&lt;p&gt;Ejecuta el código. Los imports alucinados fallan de inmediato, lo que convierte a éste en el tipo de error menos peligroso. Preocúpate más por los que sí arrancan.&lt;/p&gt;
&lt;h3 id=&quot;ha-reescrito-algo-que-no-le-pedí-que-tocara&quot;&gt;«Ha reescrito algo que no le pedí que tocara.»&lt;/h3&gt;
&lt;p&gt;Muy común, y el arreglo normal es decir qué está prohibido antes de empezar. En un repositorio en el que trabaja más gente, esto deja de ser una molestia y pasa a ser el problema de verdad — que tiene &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-shared-repository/&quot;&gt;su propio post&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;debería-hacer-commit-de-código-que-no-he-leído&quot;&gt;«¿Debería hacer commit de código que no he leído?»&lt;/h3&gt;
&lt;p&gt;En algo desechable, sí. En algo compartido, le estás entregando a tus compañeros un diff sobre el que no puedes responder preguntas, y eso es un problema social antes que técnico.&lt;/p&gt;
&lt;h3 id=&quot;así-es-como-trabajan-ahora-los-equipos-profesionales&quot;&gt;«¿Así es como trabajan ahora los equipos profesionales?»&lt;/h3&gt;
&lt;p&gt;En parte, y honestamente la respuesta todavía se está moviendo. Lo que sí está claro es que la restricción se ha desplazado de &lt;em&gt;con qué rapidez se puede escribir esto&lt;/em&gt; a &lt;em&gt;con cuánta confianza se puede cambiar después&lt;/em&gt;, y los equipos que van bien son los que tratan eso como el eje del diseño.&lt;/p&gt;
&lt;h2 id=&quot;hacia-dónde-va-esto-y-qué-hacemos-nosotros&quot;&gt;Hacia dónde va esto, y qué hacemos nosotros&lt;/h2&gt;
&lt;p&gt;Todo lo anterior funciona para una persona sola en su máquina. Los fallos interesantes empiezan cuando el repositorio es compartido — cuando el código generado es localmente razonable y globalmente equivocado porque el modelo no podía ver una convención que vive en la cabeza de alguien.&lt;/p&gt;
&lt;p&gt;Ése es el problema en el que trabaja CommitCycle: cada agente recibe un grant atado a una task y a una rama que caduca por sí solo, los paths que harían daño llevan un owner, y cada task cierra con un registro de lo que declaró frente a lo que tocó.&lt;/p&gt;
&lt;p&gt;Siendo claros sobre dónde está eso: el plugin instala hoy el enforcement, y el paquete &lt;code&gt;commitcycle&lt;/code&gt; de npm instala la CLI — el proceso sin el muro. El board alojado es sólo por invitación mientras esto es pequeño. Y nada de eso es lo que necesitas en tu primera semana de vibe coding — en tu primera semana necesitas sesiones cortas y el hábito de leer las partes caras.&lt;/p&gt;
&lt;p&gt;La semana siguiente, cuando ya hayas decidido que la cosa va a existir más allá del viernes, la pregunta pasa de hábitos a setup: &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-setup/&quot;&gt;qué tener montado antes del primer prompt&lt;/a&gt;, y por qué está ahí cada pieza.&lt;/p&gt;
</content:encoded></item><item><title>Qué se rompe cuando el vibe coding llega a un repositorio compartido</title><link>https://commitcycle.com/es/insights/vibe-coding-shared-repository/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/vibe-coding-shared-repository/</guid><description>El fallo rara vez es código malo. Es código localmente razonable y globalmente equivocado, porque la convención que rompió nunca se escribió.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Todo lo del vibe coding cambia cuando el repositorio tiene a más gente dentro. No porque el código empeore, sino porque la manera en que falla deja de ser visible.&lt;/p&gt;
&lt;p&gt;En tu propia máquina, un error aparece como algo que no funciona. En un repositorio compartido, el fallo característico es código que &lt;strong&gt;funciona, se lee razonable, pasa la revisión y aun así está mal&lt;/strong&gt; — porque rompió una regla que nunca se escribió en ningún sitio que el modelo pudiera leer.&lt;/p&gt;
&lt;h2 id=&quot;cómo-es-la-forma&quot;&gt;Cómo es la forma&lt;/h2&gt;
&lt;p&gt;A un agente se le pide añadir un campo a un formulario. Lo hace, con competencia. También añade una migración de base de datos, porque eso es lo que normalmente hace falta para añadir un campo.&lt;/p&gt;
&lt;p&gt;La migración está bien. El problema es que este equipo aplica las migraciones a mano, en un orden concreto, después de una revisión de la persona que es owner del schema — una convención que existe por un incidente de hace dieciocho meses, la conocen cuatro personas, y no está escrita en ninguna parte.&lt;/p&gt;
&lt;p&gt;Nada en ese diff parece mal. &lt;strong&gt;Ése es el fallo.&lt;/strong&gt; No es código malo; es código localmente razonable y globalmente equivocado, y la distancia entre esas dos cosas es exactamente la distancia entre lo que hay en el repositorio y lo que hay en la cabeza de alguien.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-no-lo-detecta-la-revisión&quot;&gt;¿Por qué no lo detecta la revisión?&lt;/h2&gt;
&lt;p&gt;La revisión lee el diff y pregunta si es bueno. Esta clase de problema es invisible para esa pregunta, porque el diff &lt;em&gt;sí&lt;/em&gt; es bueno. El defecto vive en la relación entre el cambio y una pieza de contexto que no está en pantalla.&lt;/p&gt;
&lt;p&gt;Quien revisa lo detecta sólo si da la casualidad de que lleva la convención encima y de que se acuerda de ella mientras lee. Eso funciona, a veces, cuando quien revisa es una de esas cuatro personas. Deja de funcionar en cuanto sube el volumen — y que suba el volumen es justo el sentido de usar agentes.&lt;/p&gt;
&lt;p&gt;Así que el consejo habitual, &lt;em&gt;revisa el código generado por IA con más cuidado&lt;/em&gt;, es medio cierto y no escala. Revisar línea a línea y con cuidado todo elimina la razón de generarlo para empezar.&lt;/p&gt;
&lt;h2 id=&quot;cuál-es-el-fallo-que-más-cuesta&quot;&gt;¿Cuál es el fallo que más cuesta?&lt;/h2&gt;
&lt;p&gt;Dos agentes, a la vez, en el mismo repositorio.&lt;/p&gt;
&lt;p&gt;Cada uno es correcto por separado. Cada uno pasa sus propios tests. Uno refactoriza un helper del que el otro depende; o los dos tocan la misma configuración desde direcciones opuestas; o uno mueve un fichero en el que el otro está escribiendo. Nada falla. Las dos ramas están en verde.&lt;/p&gt;
&lt;p&gt;La pérdida aparece días después como un cambio que se hizo y luego ya no estaba, y nadie sabe decir cuándo dejó de existir. Es caro precisamente porque no hay un momento de fallo al que señalar — estás reconstruyendo un negativo a partir del historial de git.&lt;/p&gt;
&lt;p&gt;Esto no es hipotético y no es raro. Es la consecuencia ordinaria de correr más de un agente en un repositorio, que hoy es un martes cualquiera.&lt;/p&gt;
&lt;h2 id=&quot;cómo-sé-si-esto-ya-está-pasando&quot;&gt;¿Cómo sé si esto ya está pasando?&lt;/h2&gt;
&lt;p&gt;No llega como un incidente, y ésa es la dificultad. Llega como un conjunto de hechos pequeños que cada uno tiene una explicación individual plausible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trabajo que se hizo y luego no estaba.&lt;/strong&gt; Alguien recuerda haberlo escrito. Git dice que existió. Nadie puede nombrar el commit que lo quitó.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El mismo bug arreglado dos veces&lt;/strong&gt;, con tres semanas de diferencia, por dos personas que cada una creía ser la primera.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una convención reexplicada en tres sesiones distintas&lt;/strong&gt;, porque cada sesión empezó sin memoria de la anterior y nadie la escribió entre medias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un pull request que toca ficheros que nadie esperaba&lt;/strong&gt;, donde los ficheros de más son todos individualmente defendibles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;«¿Quién cambió esto?»&lt;/strong&gt; respondido por un mensaje de commit que dice &lt;code&gt;refactor&lt;/code&gt; y un autor que no estaba leyendo con atención.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cualquiera de éstas por separado es una mala semana normal. Todas juntas son el fallo, y la razón por la que se queda sin nombre tanto tiempo es que &lt;strong&gt;no hay ningún error que buscar.&lt;/strong&gt; Estás buscando la ausencia de algo, y las ausencias no avisan a nadie.&lt;/p&gt;
&lt;h2 id=&quot;y-si-las-otras-personas-son-mis-propios-agentes&quot;&gt;¿Y si las otras personas son mis propios agentes?&lt;/h2&gt;
&lt;p&gt;La inversión que pilla a más gente: &lt;strong&gt;no necesitas un equipo para tener un problema de repositorio compartido. Con dos terminales basta.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un repositorio no sabe que dos sesiones pertenecen al mismo humano. Todas las propiedades que hacen esto difícil en un equipo están presentes cuando estás solo — escrituras concurrentes a los mismos ficheros, ninguna memoria compartida entre las sesiones, convenciones que existen sólo en tu cabeza — y una propiedad es estrictamente peor. En un equipo, el trabajo del segundo agente al menos lo lee una persona distinta. Cuando los dos son tuyos, apruebas los dos, rápido, la misma tarde, y &lt;strong&gt;no hay un segundo lector en ninguna parte del circuito.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por eso «soy desarrollador en solitario, esto no va conmigo» suele ser falso ya en el momento en que alguien lo dice. El umbral no es el número de personas. Es el número de cosas escribiendo en el repositorio a la vez.&lt;/p&gt;
&lt;h2 id=&quot;agentsmd-y-claudemd-arreglan-esto&quot;&gt;¿AGENTS.md y CLAUDE.md arreglan esto?&lt;/h2&gt;
&lt;p&gt;La respuesta estándar es un &lt;code&gt;CLAUDE.md&lt;/code&gt; o un &lt;code&gt;AGENTS.md&lt;/code&gt; con tus convenciones dentro. Escríbelo. Ayuda de verdad, y es lo más barato de esta lista.&lt;/p&gt;
&lt;p&gt;También se degrada, por la misma razón por la que se degrada toda la documentación: es una foto de lo que alguien recordaba el día que lo escribió, y nada obliga a revisarlo cuando cambia aquello que describe. Seis meses después es una mezcla de cierto, caducado y aspiracional, y un agente que lo lee no puede distinguir qué línea es cuál. Una persona recién incorporada tampoco.&lt;/p&gt;
&lt;p&gt;Un fichero de contexto es necesario y no es suficiente, y el hueco entre esas dos cosas es donde está el trabajo interesante.&lt;/p&gt;
&lt;h2 id=&quot;qué-ayuda-de-verdad&quot;&gt;¿Qué ayuda de verdad?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Nombra los paths donde equivocarse sale caro.&lt;/strong&gt; No todo — la mayor parte de un repositorio es genuinamente segura de cambiar, y tratarlo todo como peligroso significa que nada lo es. Una lista corta de los paths que harían daño vale más que una exhaustiva, porque una lista corta se lee.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dale a cada uno un owner.&lt;/strong&gt; No por burocracia: para que «¿esto debería cambiar?» tenga a quién preguntar. Una regla sin owner es una regla que se esquiva al primer inconveniente, tanto por humanos como por agentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Acota el trabajo antes de que empiece, no después.&lt;/strong&gt; Qué debe hacer esto, qué no debe hacer, qué áreas toca. Escrito antes de que el código exista, eso es una especificación. Escrito después, es una excusa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Haz posible ver qué tocó de verdad una pieza de trabajo&lt;/strong&gt;, frente a lo que dijo que tocaría. Esa diferencia es donde están las sorpresas, y es una pregunta que git puede responder si alguien se la hace.&lt;/p&gt;
&lt;p&gt;Nada de eso necesita un producto. Necesita que la lista exista en algún sitio que puedan leer tanto las personas como los agentes.&lt;/p&gt;
&lt;h2 id=&quot;qué-puedo-hacer-el-lunes-sin-comprar-nada&quot;&gt;¿Qué puedo hacer el lunes, sin comprar nada?&lt;/h2&gt;
&lt;p&gt;En orden, porque hacer las dos primeras es la mayor parte del valor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Escribe los cinco paths donde equivocarse sale caro.&lt;/strong&gt; Cinco, no cincuenta — el sentido es que la lista se lea. Migraciones, auth, el código de pagos, la configuración compartida, los que sean los tuyos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pon un nombre junto a cada uno.&lt;/strong&gt; Para que «¿esto debería cambiar?» tenga a dónde ir. No hace falta que sea un owner formal; hace falta que sea una persona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empieza cada pieza de trabajo diciendo qué no debe tocar.&lt;/strong&gt; Una línea, antes de que el código exista. Ésta es la frase de mayor rendimiento del desarrollo agéntico y no cuesta nada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una vez a la semana, mira qué cambió de verdad&lt;/strong&gt; frente a lo que creías que se estaba trabajando. No una revisión del código: una comparación de dos listas. El hueco es donde viven las sorpresas, y una vez a la semana basta para pillarlas mientras siguen siendo baratas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nada de eso es un producto y nada de eso necesita permiso. Si resulta que te importa, la siguiente pregunta es qué lo impone cuando todo el mundo está ocupado — que es donde el resto de esto se pone interesante.&lt;/p&gt;
&lt;h2 id=&quot;dónde-encaja-commitcycle&quot;&gt;Dónde encaja CommitCycle&lt;/h2&gt;
&lt;p&gt;Esa lista es la cosa sobre la que construimos. Las zones son los paths que harían daño, cada una con un owner y un risk level. Una task declara lo que toca antes de empezar, y mover un muro requiere una aprobación con un motivo. Cada agente recibe un grant atado a una task y a una rama que caduca por sí solo, así que dos sesiones en sus propios worktrees no pueden autorizarse mutuamente en silencio — si comparten un mismo directorio, todavía pueden, y por eso el worktree es la instrucción y no una preferencia. Cada task cierra con un registro de lo que declaró frente a lo que tocó.&lt;/p&gt;
&lt;p&gt;Dónde está de verdad, dicho llanamente: el enforcement se instala hoy como plugin de Claude Code; el paquete &lt;code&gt;commitcycle&lt;/code&gt; de npm pone &lt;code&gt;cycle&lt;/code&gt; en tu PATH y no lleva hook, así que te da el proceso sin el muro. El board alojado es sólo por invitación mientras esto es pequeño. El modelo de zones es agnóstico del agente, pero el punto de enforcement necesita un pequeño adaptador por harness, y hoy sólo el de Claude Code se ha visto denegar en una instalación real.&lt;/p&gt;
&lt;p&gt;Y el límite honesto que merece la pena repetir: &lt;strong&gt;denegar una llamada a una herramienta en vuelo no es lo que hace esto distinto.&lt;/strong&gt; Varios fabricantes lo publican y Claude Code lo incluye gratis. La parte que es nuestra es el grant atado a una única task, atribuido a un owner, y que caduca por sí solo — y el registro posterior que dice qué pasó de verdad.&lt;/p&gt;
&lt;p&gt;Si eres una persona sola con un prototipo, nada de esto es tu problema todavía, y &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-first-steps/&quot;&gt;el post de los primeros pasos&lt;/a&gt; es el más útil — o &lt;a href=&quot;https://commitcycle.com/es/insights/vibe-coding-setup/&quot;&gt;el del setup&lt;/a&gt;, si el prototipo ha empezado a parecer que sobrevivirá al mes.&lt;/p&gt;
</content:encoded></item><item><title>Qué sacar de Obsidian, y qué dejar dentro</title><link>https://commitcycle.com/es/insights/what-to-move-out-of-obsidian/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/what-to-move-out-of-obsidian/</guid><description>Una línea que aplicas nota a nota: si equivocarte en ella induciría a error a otra persona, se le ha quedado pequeño el vault. Qué se mueve y adónde.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;El &lt;a href=&quot;https://commitcycle.com/es/insights/obsidian-ai-agent-knowledge-base/&quot;&gt;post anterior&lt;/a&gt; sostenía que un vault de Obsidian no puede ser la base de conocimiento de tus agentes de IA: es privado de una máquina, sus afirmaciones no llevan procedencia y nada marca una nota como caducada.&lt;/p&gt;
&lt;p&gt;Con ese argumento se está de acuerdo y luego no se actúa, porque «mueve tu conocimiento» no es algo que nadie pueda empezar un martes. Este post es la mitad práctica. Qué se mueve de verdad, qué se queda, y qué aspecto tiene el reemplazo una vez está en marcha.&lt;/p&gt;
&lt;h2 id=&quot;la-línea-aplicada-nota-a-nota&quot;&gt;La línea, aplicada nota a nota&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Si equivocarte en esta nota induciría a error a otra persona, se le ha quedado pequeño un vault personal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nota a nota, no vault a vault. Esa distinción lo es todo, y es la razón de que sea un trabajo más pequeño de lo que suena. La mayor parte de un vault es pensamiento — conexiones a medio hacer, restos de reuniones, cosas que escribiste para averiguar qué pensabas. Nada de eso se mueve. Lo que se mueve es la minoría sobre la que otras personas, o un agente, actuarían.&lt;/p&gt;
&lt;p&gt;En la práctica ha sido menos de una quinta parte de las notas en todos los casos que he visto hacerlo. El resto se queda exactamente donde está.&lt;/p&gt;
&lt;h2 id=&quot;qué-se-mueve&quot;&gt;¿Qué se mueve?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Las convenciones.&lt;/strong&gt; «Las migraciones las hacemos en dos pasos.» «Los handlers devuelven el error, no lo registran.» Cualquier cosa formulada como &lt;em&gt;hacemos X&lt;/em&gt; es una afirmación sobre el equipo, y una afirmación sobre el equipo pertenece a donde el equipo pueda verla y corregirla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Las decisiones, con sus motivos.&lt;/strong&gt; No sólo lo que se eligió, sino lo que se descartó y por qué. Es la categoría de mayor valor y la que más se pierde, porque el razonamiento vive en la cabeza de alguien y el vault registra sólo la conclusión. Un agente al que le entregas la conclusión sin el motivo la deshará alegremente la primera vez que la conclusión resulte incómoda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cualquier cosa sobre la que un agente actuaría.&lt;/strong&gt; Si una nota cambiaría lo que se escribe cuando un agente la lee, es operativa, no personal. Es la categoría más nueva y aquella para la que los vaults nunca se diseñaron.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los límites.&lt;/strong&gt; &lt;em&gt;«Deliberadamente no hacemos X, y aquí está por qué.»&lt;/em&gt; Nadie los escribe y todo el mundo los redescubre por la vía cara.&lt;/p&gt;
&lt;h2 id=&quot;qué-se-queda&quot;&gt;¿Qué se queda?&lt;/h2&gt;
&lt;p&gt;Todo lo demás, y no es un premio de consolación.&lt;/p&gt;
&lt;p&gt;Las ideas a medio formar. Las notas a las que se les permite estar equivocadas. La conexión que aún no has hecho. Las notas de lectura, los restos de reuniones, lo que escribiste a las 2 de la mañana y a las 2 de la mañana tenía sentido. Obsidian es mejor en todo eso que cualquier cosa por la que lo cambiarías, y es mejor porque no tiene revisión, ni aprobación, ni público — exactamente las propiedades que lo descalifican para la otra categoría.&lt;/p&gt;
&lt;p&gt;Un vault que sólo contiene esto es un vault haciendo su trabajo.&lt;/p&gt;
&lt;h2 id=&quot;y-las-notas-que-son-mitad-pensamiento-mitad-convención&quot;&gt;¿Y las notas que son mitad pensamiento, mitad convención?&lt;/h2&gt;
&lt;p&gt;El caso incómodo habitual, y el que atasca a la gente, porque la línea parece limpia hasta que te encuentras con una nota real de dos mil palabras dándole vueltas a algo con una decisión de verdad enterrada al final.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Divídela, y es más fácil de lo que parece.&lt;/strong&gt; El pensamiento se queda en el vault. La afirmación se mueve, sola, como una frase. Enlaza de vuelta si quieres.&lt;/p&gt;
&lt;p&gt;Lo que no debes hacer es mover el conjunto. Una nota que es ochenta por ciento tanteo y veinte por ciento decisión, dentro del repositorio, le enseña a un agente que las convenciones de tu equipo son tentativas — y un agente que cree que una regla es tentativa negociará con ella la primera vez que la regla resulte incómoda. Dejar el conjunto en el vault tiene el fallo opuesto: el veinte por ciento que otras personas necesitan queda invisible, indistinguible de la divagación que lo rodea.&lt;/p&gt;
&lt;p&gt;La prueba de si una nota está lista: &lt;strong&gt;¿puedes extraer una frase que empiece por «hacemos» o «no hacemos»?&lt;/strong&gt; Si no, todavía no hay nada que mover, y la nota sigue haciendo su trabajo donde está.&lt;/p&gt;
&lt;h2 id=&quot;dónde-deben-vivir-las-notas-que-se-mueven&quot;&gt;¿Dónde deben vivir las notas que se mueven?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;En el repositorio que describen.&lt;/strong&gt; No en un wiki, no en una segunda herramienta: el repo, revisado en el mismo pull request que el código del que hablan.&lt;/p&gt;
&lt;p&gt;Esa ubicación es la que hace el trabajo. Una nota en el repo se lee en el momento en que alguien cambia lo que describe, porque está en el diff. Una nota en un wiki se lee cuando alguien va a buscarla, que es el modo de fallo que estás dejando atrás.&lt;/p&gt;
&lt;p&gt;También significa que la nota se revisa como código. Alguien la aprueba. Alguien responde por ella. Dos ingenieros no pueden sostener dos versiones contradictorias sin que una de ellas aparezca en un diff.&lt;/p&gt;
&lt;h2 id=&quot;qué-aspecto-tiene-una-nota-ya-movida&quot;&gt;¿Qué aspecto tiene una nota ya movida?&lt;/h2&gt;
&lt;p&gt;El formato importa menos que cuatro propiedades, y cada una responde a una forma en que fallaba la versión del vault:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Una afirmación por nota.&lt;/strong&gt; &lt;em&gt;«Las migraciones las hacemos en dos pasos»&lt;/em&gt; es una nota. &lt;em&gt;«Notas sobre nuestro backend»&lt;/em&gt; es una carpeta disfrazada de nota, y nada de lo que hay dentro se puede confirmar, contradecir ni archivar por separado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dice de dónde viene.&lt;/strong&gt; La decisión, el incidente, el pull request. Una afirmación que no puedes rastrear es una afirmación que no puedes ponderar, y mover una afirmación irrastreable al repositorio reubica el problema en lugar de arreglarlo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dice qué se descartó.&lt;/strong&gt; La conclusión sin el razonamiento se deshace la primera vez que la conclusión resulta incómoda — normalmente por un agente, alegremente, en un diff que parece una simplificación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En presente, y lo bastante concreta como para poder estar equivocada.&lt;/strong&gt; &lt;em&gt;«Cuidado con las migraciones»&lt;/em&gt; no es una nota, es un estado de ánimo. Nadie puede actuar sobre ella y nadie podrá demostrar nunca que ha caducado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y corta. La razón por la que las páginas de wiki no se leen es que tienen dos mil palabras cuando la afirmación es una línea, y &lt;strong&gt;una nota que nadie lee es una nota que no existe&lt;/strong&gt; — que es el mismo desenlace que dejarla en el vault, después de más trabajo.&lt;/p&gt;
&lt;h2 id=&quot;qué-no-arregla-esto&quot;&gt;¿Qué no arregla esto?&lt;/h2&gt;
&lt;p&gt;Mover las notas al repo arregla el descubrimiento y la revisión. &lt;strong&gt;No arregla la degradación&lt;/strong&gt;, y cualquier post que te dijera lo contrario te estaría vendiendo algo.&lt;/p&gt;
&lt;p&gt;Una nota en un repositorio caduca exactamente igual de rápido que una nota en un vault. Lo que cambia la degradación no es la ubicación, es un disparador — algo que obligue a escribir el conocimiento mientras la persona todavía recuerda por qué, y algo que permita retirar una nota equivocada por un mecanismo y no por la memoria de alguien.&lt;/p&gt;
&lt;p&gt;Esas son las dos propiedades que hay que buscar en lo que sea que uses, y son las dos sobre las que construye CommitCycle: el conocimiento se alimenta al cerrar una unidad de trabajo, una línea cada vez, cuando el motivo aún está fresco; y &lt;code&gt;archived&lt;/code&gt; es un estado real, que es lo que permite que el corpus encoja en lugar de sólo volverse más seguro de sí mismo.&lt;/p&gt;
&lt;h2 id=&quot;cómo-empiezo-sin-una-migración&quot;&gt;¿Cómo empiezo sin una migración?&lt;/h2&gt;
&lt;p&gt;No migres. Las migraciones de conocimiento fallan por la misma razón que fallan las migraciones de cualquier cosa: el esfuerzo va por delante y el beneficio queda difuso.&lt;/p&gt;
&lt;p&gt;En su lugar: &lt;strong&gt;la próxima vez que escribas una nota de la que otras personas dependerían, escríbela en el repo en lugar de en el vault.&lt;/strong&gt; Y luego la siguiente. El vault deja de crecer en la categoría que duele, y el corpus que importa empieza a acumularse en el sitio donde se revisa. No se mueve nada y no se pierde nada.&lt;/p&gt;
&lt;p&gt;Para las notas cuyos lectores son agentes y no personas, el destino tiene una forma: &lt;a href=&quot;https://commitcycle.com/es/insights/agent-skills-guide/&quot;&gt;una skill&lt;/a&gt; es una carpeta en el repositorio que se carga cuando resulta relevante y se ignora cuando no, que es lo más parecido a una nota de vault que un agente puede usar de verdad.&lt;/p&gt;
&lt;p&gt;Al cabo de unas semanas, lo que siga en el vault y siga siendo estructural es una lista corta, y para entonces sabrás exactamente qué notas están en ella.&lt;/p&gt;
&lt;h2 id=&quot;cómo-sé-que-está-funcionando&quot;&gt;¿Cómo sé que está funcionando?&lt;/h2&gt;
&lt;p&gt;Cuatro señales, más o menos en el orden en que aparecen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dejas de reexplicar lo mismo en cada sesión nueva.&lt;/strong&gt; Esta llega primero y es la más satisfactoria de inmediato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alguien corrige una nota durante una revisión de código.&lt;/strong&gt; Eso es la ubicación dando fruto: significa que la nota se leyó en el momento en que se estaba cambiando lo que describe, que es la razón entera por la que fue al repositorio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un agente te cita una de vuelta&lt;/strong&gt; — propone algo y nombra la nota de la que salió, en lugar de proponer algo plausible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alguien archiva una.&lt;/strong&gt; Esta es la señal de verdad, y es la que más tarda. Un corpus que sólo ha crecido se está acumulando, no manteniendo, y acabará exactamente donde estaba el vault: más seguro de sí mismo cada mes y menos exacto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La contraseñal es el espejo de esa última. Si las notas del repositorio crecen y nunca se ha retirado ninguna, has reconstruido el vault con ceremonia extra, y la caducidad viene de camino.&lt;/p&gt;
&lt;h2 id=&quot;dónde-está-commitcycle-de-verdad&quot;&gt;Dónde está CommitCycle de verdad&lt;/h2&gt;
&lt;p&gt;Merece decirse claramente, porque el sentido de este post es una línea que puedes aplicar con nosotros o sin nosotros: el enforcement se instala hoy como plugin, y el paquete &lt;code&gt;commitcycle&lt;/code&gt; de npm instala la CLI a su lado. El board alojado es sólo por invitación mientras esto sea pequeño.&lt;/p&gt;
&lt;p&gt;Así que coge la línea y úsala. No cuesta nada, se aplica a las herramientas que tengas, y el argumento que hay debajo está &lt;a href=&quot;https://commitcycle.com/es/insights/obsidian-ai-agent-knowledge-base/&quot;&gt;en el post anterior&lt;/a&gt; si quieres comprobar el razonamiento antes de fiarte de la conclusión.&lt;/p&gt;
</content:encoded></item><item><title>Tu vault de Obsidian no puede ser la base de conocimiento de tus agentes de IA</title><link>https://commitcycle.com/es/insights/obsidian-ai-agent-knowledge-base/</link><guid isPermaLink="true">https://commitcycle.com/es/insights/obsidian-ai-agent-knowledge-base/</guid><description>Obsidian es una herramienta para pensar, de una persona. Un agente necesita conocimiento compartido, citado y vigente — tres cosas que un vault no es.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un vault de Obsidian falla como base de conocimiento para agentes de IA por tres razones estructurales: &lt;strong&gt;es privado de una máquina, sus afirmaciones no llevan citas, y nada te dice cuándo una nota dejó de ser verdad.&lt;/strong&gt; Los agentes leen lo que se les entrega y no tienen forma de distinguir una nota vigente de otra que caducó hace tres sprints — así que la respuesta segura y equivocada y la correcta llegan con el mismo aspecto.&lt;/p&gt;
&lt;p&gt;Esto no es una crítica a Obsidian. Es muy bueno en el trabajo para el que se construyó, que es una persona pensando. El fallo es un error de categoría: una herramienta personal de pensamiento a la que se le pide ser una fuente de verdad compartida.&lt;/p&gt;
&lt;h2 id=&quot;pueden-los-agentes-leer-siquiera-un-vault-de-obsidian&quot;&gt;¿Pueden los agentes leer siquiera un vault de Obsidian?&lt;/h2&gt;
&lt;p&gt;Sí, y conviene aclararlo primero porque es donde suele empezar la conversación. Un vault es una carpeta de markdown plano. Cualquier agente con acceso a ficheros lo lee sin ceremonia, y hay servidores MCP que te lo conectan en una tarde.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El acceso nunca fue el problema.&lt;/strong&gt; Leer y confiar son operaciones distintas, y un vault no lleva ninguna señal que las separe. Una nota escrita la semana pasada y una nota que dejó de ser cierta en 2024 son el mismo tipo de objeto, en la misma carpeta, con la misma autoridad. Quien lee su propio vault descuenta automáticamente — &lt;em&gt;ah, esa es vieja&lt;/em&gt; — usando conocimiento que no está en ninguna parte del fichero. Un agente no tiene con qué descontar.&lt;/p&gt;
&lt;p&gt;Así que la mitad fácil queda resuelta, la difícil pasa desapercibida, y el montaje parece funcionar justo hasta que actúa con total seguridad sobre algo que ya había caducado.&lt;/p&gt;
&lt;h2 id=&quot;los-tres-fallos-por-orden-de-lo-que-cuestan&quot;&gt;Los tres fallos, por orden de lo que cuestan&lt;/h2&gt;
&lt;h3 id=&quot;1-es-privado-así-que-el-conocimiento-es-por-persona&quot;&gt;1. Es privado, así que el conocimiento es por persona&lt;/h3&gt;
&lt;p&gt;Un vault vive en un portátil. Sincronízalo y tendrás una carpeta compartida, no conocimiento compartido — porque el vault no tiene noción de revisión. Nadie aprueba una nota. Nadie responde por ella. Dos ingenieros mantienen dos vaults, cada uno acertado en cosas distintas, y el agente se queda con el vault de quien lo esté operando.&lt;/p&gt;
&lt;p&gt;El síntoma es fácil de reconocer: &lt;strong&gt;la misma pregunta obtiene dos respuestas según quién se la haga a su agente.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-las-afirmaciones-no-llevan-procedencia&quot;&gt;2. Las afirmaciones no llevan procedencia&lt;/h3&gt;
&lt;p&gt;Una nota dice «las migraciones las hacemos en dos pasos». ¿Es una decisión que tomó alguien, la observación de un incidente, o algo que un compañero creía en 2024? La nota no lo dice, y a los pocos meses nadie se acuerda.&lt;/p&gt;
&lt;p&gt;Para una persona esto es fricción. Para un agente es fatal, porque no puede ponderar una afirmación que no puede rastrear. Seguirá una nota caducada exactamente con la misma confianza con la que sigue una correcta.&lt;/p&gt;
&lt;h3 id=&quot;3-nada-marca-una-nota-como-caducada&quot;&gt;3. Nada marca una nota como caducada&lt;/h3&gt;
&lt;p&gt;Este es el que hace más daño en silencio. Un vault no tiene estado de muerte. Las notas se acumulan, y el único mecanismo para retirar una equivocada es que alguien recuerde que lo está — lo que falla de forma fiable, porque &lt;strong&gt;quien sabe que la nota está caducada no es quien la está leyendo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El resultado es un corpus que crece monótonamente más seguro de sí mismo y menos exacto.&lt;/p&gt;
&lt;h2 id=&quot;qué-tiene-que-ser-la-documentación-para-agentes&quot;&gt;¿Qué tiene que ser la documentación para agentes?&lt;/h2&gt;
&lt;p&gt;Cada propiedad de abajo existe por una forma concreta en que fallan los vaults:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propiedad&lt;/th&gt;
&lt;th&gt;El fallo que responde&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vive en el repositorio&lt;/td&gt;
&lt;td&gt;Se revisa como código, no se sincroniza como una carpeta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cita una decisión, una task o un fichero&lt;/td&gt;
&lt;td&gt;Una afirmación que no puedes rastrear es una que no puedes ponderar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se escribe al cerrar el trabajo&lt;/td&gt;
&lt;td&gt;No «cuando alguien se acuerde», que es nunca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiene un estado de archivada&lt;/td&gt;
&lt;td&gt;Una nota equivocada debe poder retirarse por algo que no sea la memoria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se carga según lo que declara la task&lt;/td&gt;
&lt;td&gt;Cincuenta notas no son contexto, son ruido&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Esa última fila es la que la mayoría de herramientas se salta. Entregarle a un agente una base de conocimiento entera no es ingeniería de contexto; es un prompt más grande. Lo que una task necesita es el subconjunto relevante para &lt;em&gt;esa&lt;/em&gt; task, seleccionado por algo que la propia task declaró.&lt;/p&gt;
&lt;h2 id=&quot;y-por-qué-no-darle-al-agente-el-vault-entero&quot;&gt;¿Y por qué no darle al agente el vault entero?&lt;/h2&gt;
&lt;p&gt;El movimiento obvio, y falla de tres formas concretas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El volumen no es contexto.&lt;/strong&gt; Cuatrocientas notas en un prompt significan que las tres relevantes quedan diluidas entre trescientas noventa y siete que no lo son. Eso es un prompt más grande, no un mejor anclaje, y cuesta exactitud en lugar de comprarla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nada dice qué notas aplican aquí.&lt;/strong&gt; Los enlaces de un vault codifican &lt;em&gt;asociación&lt;/em&gt; — esto me recordó a aquello — no &lt;em&gt;aplicabilidad a la task que tienes delante&lt;/em&gt;. Son relaciones distintas, y sólo una sirve para seleccionar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Las contradicciones no tienen resolución.&lt;/strong&gt; Dos notas discrepan sobre cómo se despliega. Nada en el vault registra cuál ganó, porque el ganador se decidió en una conversación. El agente lo resuelve escogiendo la que más se parece al prompt, y reporta el resultado con la misma seguridad en cualquiera de los dos casos.&lt;/p&gt;
&lt;p&gt;El desenlace es peor que un fichero corto y curado: una respuesta bien redactada, aparentemente bien fundamentada, y equivocada.&lt;/p&gt;
&lt;h2 id=&quot;lo-arregla-rag-sobre-el-vault&quot;&gt;¿Lo arregla RAG sobre el vault?&lt;/h2&gt;
&lt;p&gt;En parte, y conviene ser preciso sobre qué parte, porque es el arreglo que más se propone.&lt;/p&gt;
&lt;p&gt;La recuperación resuelve la &lt;strong&gt;selección&lt;/strong&gt;. Eso es real: convierte «el agente leyó cuatrocientas notas» en «el agente leyó las cuatro más cercanas», que es una mejora de verdad y la molestia que más se nota.&lt;/p&gt;
&lt;p&gt;No toca la &lt;strong&gt;procedencia&lt;/strong&gt; ni la &lt;strong&gt;caducidad&lt;/strong&gt;, y en la caducidad se inclina ligeramente hacia el lado malo. La recuperación saca lo que está textualmente más cerca de la pregunta, y una nota caducada escrita con seguridad — «las migraciones las hacemos en dos pasos» — suele ser lo más cercano a una pregunta sobre migraciones. La nota correcta puede ser más nueva, más matizada y estar redactada menos como la pregunta. Los embeddings no opinan sobre fechas ni sobre la verdad; ordenan por similitud.&lt;/p&gt;
&lt;p&gt;Así que RAG asciende el problema de &lt;em&gt;el agente lo leyó todo y no sabía qué estaba vigente&lt;/em&gt; a &lt;em&gt;el agente leyó las cuatro cosas más relevantes y no sabía qué estaba vigente&lt;/em&gt;. Mejor, y no el arreglo.&lt;/p&gt;
&lt;h2 id=&quot;y-notion-confluence-o-un-wiki&quot;&gt;¿Y Notion, Confluence o un wiki?&lt;/h2&gt;
&lt;p&gt;Responden limpiamente a uno de los tres fallos y dejan los otros dos más o menos donde estaban.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compartido: sí.&lt;/strong&gt; Esta es la ganancia real, y no es poco — un corpus, muchos lectores, se acabó el «la misma pregunta obtiene dos respuestas según de quién fuera el vault que leyó el agente».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Procedencia: no.&lt;/strong&gt; Una página de wiki rara vez dice de qué decisión salió o qué incidente la produjo, por la misma razón que no lo dice una nota de vault: quien la escribió lo sabía, así que anotarlo parecía redundante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caducidad: podría decirse que peor.&lt;/strong&gt; Las notas malas de un vault al menos están enterradas. Las de un wiki están indexadas, se buscan y las enlazan otras cuatro páginas, así que la escala hace una afirmación caducada &lt;em&gt;más&lt;/em&gt; localizable, no menos, y nada en la herramienta la archiva. El mecanismo para retirar una página equivocada sigue siendo que alguien se acuerde.&lt;/p&gt;
&lt;p&gt;Y un fallo que el wiki añade: &lt;strong&gt;no está donde cambia el código.&lt;/strong&gt; Una nota en el repositorio la tienes delante, en el diff, en el momento en que alteras lo que describe. Una nota en un wiki se lee cuando alguien va a buscarla — que es justo la conducta que querías arreglar.&lt;/p&gt;
&lt;h2 id=&quot;cómo-lo-hace-commitcycle&quot;&gt;Cómo lo hace CommitCycle&lt;/h2&gt;
&lt;p&gt;CommitCycle llama a esto &lt;strong&gt;playbooks&lt;/strong&gt; — ficheros de conocimiento por topic y por proyecto que viven en tu repositorio. Cuatro propiedades, cada una respondiendo a una fila de arriba:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Citan.&lt;/strong&gt; Cada afirmación apunta a una decisión, una task o un fichero. Un lint señala la afirmación que no lleva ninguna cita — avisa, no bloquea — y cuando &lt;code&gt;cycle seed&lt;/code&gt; redacta playbooks, una afirmación que cita un fichero que no está en el repositorio se descarta, y un playbook que se queda sin nada citado no se crea siquiera.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se alimentan al cerrar el trabajo&lt;/strong&gt;, de viñeta en viñeta, cuando la persona todavía recuerda por qué. Ni en una retro, ni cuando alguien se acuerde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se cargan según los topics declarados por la task&lt;/strong&gt;, así que una task sobre la base de datos no carga las convenciones del frontend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se pueden archivar.&lt;/strong&gt; &lt;code&gt;archived&lt;/code&gt; es un estado real, y eso es lo que permite que el corpus encoja.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y una pasada adversarial — &lt;code&gt;cycle challenge&lt;/code&gt; — está hecha para proponer las prácticas que al repositorio le faltan a la vista, cada una con una fuente nombrada. Como &lt;code&gt;cycle seed&lt;/code&gt;, necesita un modelo configurado en el board, y todavía no se ha ejecutado contra uno real. &lt;strong&gt;Puedes rechazarlas, y tu rechazo queda registrado con sus motivos.&lt;/strong&gt; «Nos desviamos de esto a propósito, y aquí está por qué» también es conocimiento, y es del tipo que los vaults nunca capturan porque nadie escribe lo que decidió no hacer.&lt;/p&gt;
&lt;h3 id=&quot;la-parte-honesta&quot;&gt;La parte honesta&lt;/h3&gt;
&lt;p&gt;Aquí hay una objeción real y merece una respuesta directa: «si generas un playbook a partir de mi repositorio heredado, ¿no va a codificar mi desastre?»&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sí. Por diseño, describir y nada más codifica el desastre — con recibos.&lt;/strong&gt; Por eso existe el challenger: está hecho para proponer lo que al repo le falta en lugar de sólo describir lo que tiene, y una persona acepta o rechaza cada propuesta. No hay auto-aceptación, y hay un test que mantiene esa vía cerrada.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-esto-no-sustituye&quot;&gt;Lo que esto no sustituye&lt;/h2&gt;
&lt;p&gt;Quédate con el vault. Esto no es una migración.&lt;/p&gt;
&lt;p&gt;Obsidian sigue siendo mejor que cualquier cosa de aquí para pensar — para ideas a medio formar, para conexiones que aún no has hecho, para notas que son para ti y a las que se les permite estar equivocadas. &lt;strong&gt;Lo que sale de ahí es el subconjunto del que otros lectores dependen para que sea cierto.&lt;/strong&gt; Ese subconjunto siempre fue la parte que dolía cuando caducaba, y nunca fue la parte que Obsidian se diseñó para sostener.&lt;/p&gt;
&lt;p&gt;Una línea útil que trazar: &lt;em&gt;si equivocarte en esta nota induciría a error a otra persona, no pertenece a un vault personal.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Adónde va en su lugar, para las notas que un agente debe leer, es &lt;a href=&quot;https://commitcycle.com/es/insights/agent-skills-guide/&quot;&gt;a una skill en el repositorio&lt;/a&gt; — el mismo markdown, pero versionado con el código que describe y cargado sólo cuando la task lo pide.&lt;/p&gt;
&lt;h2 id=&quot;dónde-está-commitcycle-de-verdad&quot;&gt;Dónde está CommitCycle de verdad&lt;/h2&gt;
&lt;p&gt;CommitCycle lleva su propio desarrollo — el board, el gate, los audit records y los playbooks descritos arriba están en uso hoy en su propio repositorio. &lt;strong&gt;La mitad de enforcement se instala como plugin de Claude Code; el paquete &lt;code&gt;commitcycle&lt;/code&gt; en npm pone la CLI &lt;code&gt;cycle&lt;/code&gt; en tu PATH, sin el hook.&lt;/strong&gt; El board alojado es sólo por invitación mientras esto sea pequeño. Phase 0 está medida y publicada con sus límites.&lt;/p&gt;
&lt;p&gt;Así que este post no te pide migrar nada hoy. Plantea un argumento que puedes evaluar por sus méritos, y si te convence, &lt;a href=&quot;https://commitcycle.com/es/&quot;&gt;la waitlist&lt;/a&gt; es el siguiente paso honesto. Si el argumento es erróneo, eso nos vale más que un alta.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;El resto del producto está documentado por completo: &lt;a href=&quot;https://commitcycle.com/es/agents-md/&quot;&gt;el bloque de contexto AGENTS.md&lt;/a&gt;, &lt;a href=&quot;https://commitcycle.com/es/zones/&quot;&gt;las zones&lt;/a&gt; y &lt;a href=&quot;https://commitcycle.com/es/audit-record/&quot;&gt;el audit record&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>