<?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, em português</title><description>Argumentos sobre rodar agentes de código em IA em repositórios reais: contexto compartilhado, least privilege e conhecimento que continua verdadeiro.</description><link>https://commitcycle.com/pt-br/insights/</link><language>pt-BR</language><atom:link href="https://commitcycle.com/pt-br/insights/rss.xml" rel="self" type="application/rss+xml"/><item><title>A instrução que você escreve uma vez, não a cada sessão</title><link>https://commitcycle.com/pt-br/insights/agent-skills-guide/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/agent-skills-guide/</guid><description>O que é uma skill, por que a description é a única parte sempre carregada, o que vai nela e o que vai no AGENTS.md, e por que a sua não dispara.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Existe um momento, a cada poucos dias, em que você digita a mesma correção de novo. &lt;em&gt;Use o nosso componente de botão.&lt;/em&gt; &lt;em&gt;Não adicione uma dependência para isso.&lt;/em&gt; &lt;em&gt;As datas neste projeto são sempre ISO.&lt;/em&gt; Você disse isso na terça, a sessão terminou e o conhecimento terminou com ela.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uma skill é aquela instrução, escrita uma vez só, num arquivo que o agente pega sozinho quando ela passa a ser relevante.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esse é o conceito inteiro, e o resto desta página é a mecânica, o julgamento sobre o que cabe dentro de uma e a depuração — porque a falha típica não é escrever uma skill ruim, é escrever uma skill boa que nunca carrega.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-uma-skill-no-disco&quot;&gt;O que é uma skill no disco&lt;/h2&gt;
&lt;p&gt;Uma pasta com um arquivo 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;O &lt;code&gt;SKILL.md&lt;/code&gt; abre com um frontmatter que carrega duas coisas que importam:&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;Nada além disso é necessário. Sem etapa de build, sem registro, sem arquivo de configuração. A pasta existe, logo a skill existe.&lt;/p&gt;
&lt;h2 id=&quot;por-que-não-colocar-isso-no-prompt&quot;&gt;Por que não colocar isso no prompt?&lt;/h2&gt;
&lt;p&gt;Porque você precisa lembrar, toda vez, e você não vai. Mais precisamente: as vezes em que você esquece não são aleatórias. São as vezes em que você estava indo rápido, que são as vezes em que o agente tinha menos contexto, que é exatamente quando a convenção mais importava.&lt;/p&gt;
&lt;h2 id=&quot;por-que-não-colocar-isso-no-agentsmd&quot;&gt;Por que não colocar isso no AGENTS.md?&lt;/h2&gt;
&lt;p&gt;Esta é a pergunta de verdade, e a resposta é o projeto inteiro do recurso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O &lt;code&gt;AGENTS.md&lt;/code&gt; (ou &lt;code&gt;CLAUDE.md&lt;/code&gt;) é sempre carregado.&lt;/strong&gt; Todo turno, toda sessão, toda task, seja relevante ou não. Isso o torna perfeito para fatos que são sempre verdadeiros — a stack, os comandos, o layout de pastas, as coisas que nunca se deve fazer — e significa que cada linha que você acrescenta custa contexto em trabalhos que não têm nada a ver com ela. Um AGENTS.md de 900 linhas é um imposto sobre cada pedido.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uma skill é carregada só quando casa.&lt;/strong&gt; O que está sempre em contexto é o nome e a description dela: umas duas linhas. O corpo é lido só quando o agente decide que o trabalho pede aquilo.&lt;/p&gt;
&lt;p&gt;Isso se chama progressive disclosure, e funciona em três níveis:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nível&lt;/th&gt;
&lt;th&gt;O que carrega&lt;/th&gt;
&lt;th&gt;Quando&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;Nome + description&lt;/td&gt;
&lt;td&gt;Sempre. Custa quase nada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;O corpo do SKILL.md&lt;/td&gt;
&lt;td&gt;Quando a description casa com a task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Os arquivos que acompanham a pasta&lt;/td&gt;
&lt;td&gt;Quando o corpo aponta para eles e a task precisa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;É por isso que uma skill pode ser enorme — um design system completo, um checklist de conformidade, a superfície inteira de uma API — sem deixar mais lento um pedido sobre outra coisa. Você está carregando uma biblioteca, não um bilhete.&lt;/p&gt;
&lt;h2 id=&quot;o-que-vai-onde&quot;&gt;O que vai onde&lt;/h2&gt;
&lt;p&gt;O julgamento que faz tudo isso funcionar:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Coloque em&lt;/th&gt;
&lt;th&gt;Quando&lt;/th&gt;
&lt;th&gt;Exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;O prompt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verdadeiro só para esta task&lt;/td&gt;
&lt;td&gt;“Use azul no cabeçalho desta 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;Sempre verdadeiro, sempre relevante, curto&lt;/td&gt;
&lt;td&gt;“A stack é Astro + Tailwind. Nunca edite arquivos em &lt;code&gt;dist/&lt;/code&gt;”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Uma skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verdadeiro numa situação específica, longo demais para o AGENTS.md&lt;/td&gt;
&lt;td&gt;Seu design system completo, suas convenções de API, sua voz ao escrever&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Um servidor MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O agente precisa &lt;em&gt;alcançar&lt;/em&gt; algo&lt;/td&gt;
&lt;td&gt;Seu banco de dados, seu rastreador de issues, sua analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;O erro comum é colocar conteúdo do tamanho de um design system no AGENTS.md, onde ele é carregado a cada pedido, inclusive nos que são sobre um script de build. O outro erro comum é colocar a stack do projeto numa skill, onde ela pode não carregar no momento em que é necessária.&lt;/p&gt;
&lt;h2 id=&quot;a-description-é-o-gatilho-inteiro&quot;&gt;A description é o gatilho inteiro&lt;/h2&gt;
&lt;p&gt;Se você levar uma coisa só desta página: &lt;strong&gt;a description não é documentação, é a regra de casamento.&lt;/strong&gt; Ela é a única parte da sua skill que o agente vê antes de decidir se lê o resto.&lt;/p&gt;
&lt;p&gt;Então escreva com as palavras que uma pessoa digita de verdade. Não:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Diretrizes de implementação de marca e padrões de componentes.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Isso não casa com nada. Quem pede “faz isso parecer o nosso app” não usou nenhuma dessas palavras. Em vez disso:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Use isto sempre que estiver construindo, estilizando, tematizando ou revisando qualquer interface, página, dashboard, formulário ou componente de [produto] — e sempre que o usuário mencionar [a cor da marca], [a fonte], [a biblioteca de componentes] ou “deixa on-brand”. Recorra a isto mesmo quando o pedido for só “faz uma página de configurações” ou “estiliza este card”.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Concretamente, uma description que dispara de forma confiável nomeia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Os verbos&lt;/strong&gt; — construir, estilizar, revisar, migrar, redigir&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Os substantivos&lt;/strong&gt; — os artefatos aos quais ela se aplica&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As strings literais&lt;/strong&gt; — nomes de produto, códigos hex, nomes de fonte, nomes de biblioteca&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As formulações informais&lt;/strong&gt; — “deixa on-brand”, “do jeito de sempre”, “igual às outras páginas”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quando usar mesmo quando não parece que se aplica&lt;/strong&gt; — esta linha faz um trabalho surpreendente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ser inclusivo demais custa um pouco de contexto quando dispara sem necessidade. Ser inclusivo de menos custa a skill inteira, em silêncio, para sempre. Incline-se para disparar.&lt;/p&gt;
&lt;h2 id=&quot;onde-as-skills-ficam&quot;&gt;Onde as skills ficam&lt;/h2&gt;
&lt;p&gt;Dois lugares, e a escolha importa mais do que parece.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.claude/skills/&lt;/code&gt; dentro do projeto.&lt;/strong&gt; É commitado junto com o repositório, então está na sua outra máquina, em toda sessão futura e para qualquer pessoa que clone. Tudo que descreve &lt;em&gt;este&lt;/em&gt; produto pertence aqui.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;~/.claude/skills/&lt;/code&gt; na sua pasta pessoal.&lt;/strong&gt; Disponível em todo projeto que você toca, invisível para todo mundo. Isso é para o seu jeito de trabalhar: como você gosta que os commits sejam escritos, como você quer os documentos estruturados.&lt;/p&gt;
&lt;p&gt;O padrão deve ser o projeto. Uma skill que vive só no seu notebook está a uma máquina de distância de não existir, e é a razão pela qual um projeto “só funciona direito quando é você que roda”.&lt;/p&gt;
&lt;h2 id=&quot;como-sei-que-ela-disparou&quot;&gt;Como sei que ela disparou?&lt;/h2&gt;
&lt;p&gt;Pergunte. &lt;em&gt;Quais skills você usou para isso?&lt;/em&gt; é uma pergunta razoável e recebe uma resposta direta. &lt;em&gt;Quais skills você tem disponíveis?&lt;/em&gt; lista todas, que é a primeira verificação depois de instalar uma.&lt;/p&gt;
&lt;p&gt;A verificação forte é comportamental: abra uma sessão nova, formule um pedido do jeito que um usuário real formularia — não do jeito que a documentação da própria skill formula — e veja se a saída segue as regras sem você mencioná-las. Esse é o único teste que importa, porque essa é a condição real de uso.&lt;/p&gt;
&lt;h2 id=&quot;por-que-minha-skill-não-dispara&quot;&gt;Por que minha skill não dispara?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sintoma&lt;/th&gt;
&lt;th&gt;Quase sempre&lt;/th&gt;
&lt;th&gt;Correção&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nunca carrega&lt;/td&gt;
&lt;td&gt;A description não contém as palavras que estão sendo digitadas&lt;/td&gt;
&lt;td&gt;Reescreva a description com formulações reais e nomes literais&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carrega, e aí a saída ignora&lt;/td&gt;
&lt;td&gt;O SKILL.md é longo demais ou as regras estão enterradas em prosa&lt;/td&gt;
&lt;td&gt;Corte. Comece pelas regras. Mova o detalhe para &lt;code&gt;references/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carrega em tudo&lt;/td&gt;
&lt;td&gt;A description é ampla demais&lt;/td&gt;
&lt;td&gt;Adicione o limite: para que ela &lt;em&gt;não&lt;/em&gt; serve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funciona para você, não para um colega&lt;/td&gt;
&lt;td&gt;Está em &lt;code&gt;~/.claude/skills/&lt;/code&gt;, não no projeto&lt;/td&gt;
&lt;td&gt;Mova para o repositório e faça o commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contradita por outras instruções&lt;/td&gt;
&lt;td&gt;O AGENTS.md diz outra coisa&lt;/td&gt;
&lt;td&gt;Decida qual vence e diga isso explicitamente nos dois&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Repare que quatro dos cinco são problemas de description ou de localização. O conteúdo raramente é o que está errado.&lt;/p&gt;
&lt;h2 id=&quot;mantendo-o-skillmd-curto&quot;&gt;Mantendo o SKILL.md curto&lt;/h2&gt;
&lt;p&gt;Uma vez carregado, o corpo é lido inteiro — então o tamanho custa alguma coisa, e a boa estrutura é um arquivo de instruções curto que aponta para o detalhe.&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               as regras, a ordem de decisão, o que vence num conflito&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/             o material longo: tabelas de tokens, superfícies de API, exemplos&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/                 coisas para copiar: componentes, folhas de estilo, modelos&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/                coisas para rodar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A skill &lt;code&gt;cc-brand&lt;/code&gt; do exemplo acima tem exatamente esse formato: o SKILL.md declara a prioridade de camadas e a regra de conflito em algumas centenas de palavras, e a referência de tokens, a orientação de movimento e os componentes de shell prontos ficam em arquivos para os quais ele aponta. O agente abre a referência da barra lateral quando está construindo uma barra lateral, e nunca em outra hora.&lt;/p&gt;
&lt;p&gt;Duas coisas pertencem ao SKILL.md e não a um arquivo de referência: &lt;strong&gt;a ordem de precedência&lt;/strong&gt; (quando duas regras colidem, qual vence) e &lt;strong&gt;o que não fazer&lt;/strong&gt;. As duas são curtas e as duas são o que o agente erra quando elas faltam.&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;Quatro coisas que se confundem, em eixos genuinamente diferentes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;O que é&lt;/th&gt;
&lt;th&gt;Quem 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;Instruções carregadas por relevância&lt;/td&gt;
&lt;td&gt;O agente, ao casar a 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 alcançam sistemas externos&lt;/td&gt;
&lt;td&gt;O agente, quando precisa da 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;Uma janela de contexto separada para trabalho delegado&lt;/td&gt;
&lt;td&gt;O agente, ou você&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;Um prompt salvo que você invoca pelo nome&lt;/td&gt;
&lt;td&gt;Você, explicitamente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills e MCP são complementos, não alternativas. O servidor MCP dá ao agente uma conexão com o seu banco de dados; a skill conta a ele as suas convenções de schema e quais tabelas nunca são escritas diretamente. Ferramentas sem instruções é a configuração que a maior parte das pessoas tem, e é por isso que o agente consegue alcançar tudo e ainda assim fazer a coisa errada com aquilo.&lt;/p&gt;
&lt;h2 id=&quot;instalando-uma-que-alguém-te-deu&quot;&gt;Instalando uma que alguém te deu&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Coloque a pasta em &lt;code&gt;.claude/skills/&lt;/code&gt; (projeto) ou &lt;code&gt;~/.claude/skills/&lt;/code&gt; (pessoal).&lt;/li&gt;
&lt;li&gt;Abra uma &lt;strong&gt;sessão nova&lt;/strong&gt; — uma já aberta já montou a lista dela.&lt;/li&gt;
&lt;li&gt;Pergunte &lt;em&gt;quais skills você tem disponíveis&lt;/em&gt; e confira se a sua aparece pelo nome.&lt;/li&gt;
&lt;li&gt;Dê a ela um pedido realista e veja se as regras se aplicam sem serem mencionadas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se o passo 3 falhar, a pasta está no lugar errado ou o &lt;code&gt;SKILL.md&lt;/code&gt; está com o nome errado. Se o passo 4 falhar, é a description.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A que vale instalar no primeiro dia é uma skill de design.&lt;/strong&gt; Se você tem uma ideia mas ainda nenhuma marca e nenhuma opinião visual, o &lt;a href=&quot;https://startpow.com/&quot;&gt;startpow.com&lt;/a&gt; deixa você escolher o que gosta, exportar e baixar o resultado como skill. Você solta a pasta lá dentro e, daí em diante, cada tela que o agente construir chega nas suas cores, na sua tipografia e no seu espaçamento sem você descrever tudo de novo — que é, mais ou menos, a diferença entre um produto e uma demo, por uns dez minutos de trabalho.&lt;/p&gt;
&lt;h2 id=&quot;quantas-skills-são-demais&quot;&gt;Quantas skills são demais?&lt;/h2&gt;
&lt;p&gt;Existe um orçamento real, e não é o que as pessoas temem. Os corpos são de graça até carregarem, então uma pasta com quarenta skills não deixa nada mais lento. O que não é de graça são as &lt;strong&gt;descriptions&lt;/strong&gt;, que estão todas em contexto, o tempo todo.&lt;/p&gt;
&lt;p&gt;Quarenta descriptions vagas são piores que cinco afiadas por uma segunda razão também: quanto mais elas se sobrepõem, menos confiável é que a certa vença. Duas skills que cobrem “estilo” de forma igualmente plausível significam um cara ou coroa a cada pedido de UI.&lt;/p&gt;
&lt;p&gt;O formato prático é um punhado de skills com fronteiras limpas, cada uma das quais você conseguiria descrever numa frase sem usar a palavra “e”. Quando você não consegue, aquilo são duas skills.&lt;/p&gt;
&lt;h2 id=&quot;uma-skill-é-instrução-que-você-concorda-em-executar&quot;&gt;Uma skill é instrução que você concorda em executar&lt;/h2&gt;
&lt;p&gt;Vale dizer com todas as letras, porque skills circulam como se fossem modelos de estilo, e não são.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uma skill é um conjunto de instruções que um agente vai seguir, com as suas permissões, no seu repositório.&lt;/strong&gt; Uma skill baixada pode dizer a um agente para instalar um pacote, para mandar um arquivo para algum lugar, para tratar uma regra como mais importante que as que você escreveu. É a mesma decisão de confiança de rodar um script que alguém te mandou, e o fato de ser markdown em vez de código faz aquilo parecer menor do que é.&lt;/p&gt;
&lt;p&gt;Então: leia o &lt;code&gt;SKILL.md&lt;/code&gt; antes de instalar, olhe o que mais tem na pasta e tenha mais cuidado com skills que trazem scripts do que com skills que trazem documentação. Um design system de uma ferramenta que você escolheu é uma proposta muito diferente de uma skill colada num fio de fórum.&lt;/p&gt;
&lt;p&gt;O mesmo vale ao contrário quando você publica uma: quem instala a sua está te estendendo essa confiança.&lt;/p&gt;
&lt;h2 id=&quot;levando-isso-para-um-time&quot;&gt;Levando isso para um time&lt;/h2&gt;
&lt;p&gt;Três caminhos, em ordem crescente de cerimônia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faça o commit delas no repositório.&lt;/strong&gt; &lt;code&gt;.claude/skills/&lt;/code&gt; está no repo, então clonar traz tudo. Isso cobre a maior parte dos casos e não precisa de infraestrutura nenhuma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribua num plugin.&lt;/strong&gt; Um plugin pode carregar skills junto com comandos e servidores MCP, instalado pelo nome e atualizado de forma central. É o certo quando vários repositórios precisam das mesmas convenções.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mande a pasta.&lt;/strong&gt; Serve uma vez, é ingerenciável na quarta pessoa, porque agora não há resposta para “qual versão você tem?”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A falha a evitar é aquela em que a skill existe só na pasta pessoal de uma pessoa. O projeto passa a se comportar de forma diferente dependendo de quem está no volante, e ninguém consegue ver por quê.&lt;/p&gt;
&lt;h2 id=&quot;o-jeito-mais-rápido-de-escrever-sua-primeira-skill&quot;&gt;O jeito mais rápido de escrever sua primeira skill&lt;/h2&gt;
&lt;p&gt;Não comece de uma página em branco. Páginas em branco produzem regras genéricas, e regras genéricas são as que o modelo já segue.&lt;/p&gt;
&lt;p&gt;Em vez disso: &lt;strong&gt;trabalhe normalmente e preste atenção no que você corrige.&lt;/strong&gt; Na terceira vez que você disser a mesma coisa — a terceira vez que apontar o formato de data, ou o componente, ou que aqui a gente não usa aquela biblioteca — diga:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Transforme o que você acabou de aprender numa skill. Escreva a description para que ela dispare sempre que alguém pedir qualquer coisa nesta área, inclusive nas formulações informais. Mantenha o SKILL.md curto e coloque o detalhe longo num arquivo de referência.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Suas correções já são exatamente o conteúdo de que uma skill precisa. São específicas, são reais e são as que de fato estavam sendo erradas — o que é um ponto de partida muito melhor do que qualquer coisa que você pensaria em escrever de antemão.&lt;/p&gt;
&lt;h2 id=&quot;truques-que-fazem-diferença-de-verdade&quot;&gt;Truques que fazem diferença de verdade&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mostre, não só conte.&lt;/strong&gt; Um exemplo trabalhado da sua convenção rende mais que três parágrafos descrevendo-a. Modelos são extremamente bons em reconhecer padrões a partir de um exemplo, e meramente obedientes ao seguir uma regra.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uma skill por assunto.&lt;/strong&gt; Uma única skill de “nossos padrões” cobrindo design, testes e deploy dispara em tudo e não se aplica bem a nada. Divida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diga qual vence.&lt;/strong&gt; Toda skill que contém mais de uma fonte de orientação precisa de uma frase dizendo qual tem precedência num conflito. Sem ela, o modelo escolhe, e escolhe diferente a cada vez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escreva as regras negativas.&lt;/strong&gt; &lt;em&gt;Não introduza uma segunda biblioteca de componentes. Não adicione dependências para algo que a biblioteca padrão já faz.&lt;/em&gt; Restrições negativas são seguidas de forma mais confiável que as positivas e quase sempre são o que você de fato queria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versione junto com o código que ela descreve.&lt;/strong&gt; Uma skill de design no repositório muda no mesmo commit que os tokens que ela documenta. Uma skill de design no seu notebook desvia em quinze dias e depois ensina, com toda a confiança, as cores do mês passado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teste com uma sessão fria e uma formulação preguiçosa.&lt;/strong&gt; “faz a página de configurações” é como o pedido vai chegar de verdade. Se a skill precisa da versão bem formulada para disparar, ela não funciona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deixe as skills velhas morrerem.&lt;/strong&gt; Uma skill que descreve uma convenção que você abandonou é pior que nenhuma skill: é uma instrução confiante e sempre disponível para fazer a coisa errada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;se-você-não-está-no-claude-code&quot;&gt;Se você não está no Claude Code&lt;/h2&gt;
&lt;p&gt;Skills como pastas são um recurso do Claude Code. Outras ferramentas agênticas leem um único arquivo de instruções sempre carregado, e a convenção quase universal é &lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; na raiz do repositório&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O conteúdo se transfere direto. O que não se transfere é o carregamento seletivo — tudo naquele arquivo é pago a cada pedido — então a disciplina é outra: limite ao que é sempre verdadeiro, coloque o material longo em documentação comum e aponte para ela a partir do arquivo em vez de colar tudo dentro.&lt;/p&gt;
&lt;p&gt;De um jeito ou de outro, o movimento de fundo é o mesmo, e é o hábito de maior alavancagem no desenvolvimento com agentes: &lt;strong&gt;na segunda vez que você explicar alguma coisa, escreva isso onde o agente vai encontrar.&lt;/strong&gt; O resto da configuração em volta disso — o repositório, o modelo, o host, a stack, as salvaguardas — são &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-setup/&quot;&gt;seis decisões&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>GitHub para quem não escreve o código</title><link>https://commitcycle.com/pt-br/insights/github-for-vibe-coders/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/github-for-vibe-coders/</guid><description>Git, GitHub, commits, branches e os quatro tipos de desfazer: o controle de versão que um vibe coder precisa, e os truques que salvam um dia.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Se você nunca usou o GitHub, ignore como ele costuma ser descrito. Não é uma rede social para programadores, você não está ali para ler o código de ninguém, e os quadradinhos verdes não são um placar que você precisa preencher.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;É um sistema de salvamento com histórico, hospedado em algum lugar que não é o seu notebook.&lt;/strong&gt; É isso.&lt;/p&gt;
&lt;p&gt;Para um vibe coder, ele ganha o lugar dele por um motivo específico. Em algum momento — não talvez, em algum momento — uma sessão vai reescrever algo que já funcionava. Vai refatorar um arquivo de que você gostava, apagar uma função que decidiu que não era usada, ou corrigir um bug introduzindo dois em silêncio. Sem commits, aquele trabalho se foi e sua única recuperação é descrever tudo de novo, de memória, para um modelo que esqueceu a conversa. Com commits, a recuperação é uma frase.&lt;/p&gt;
&lt;p&gt;Este guia é tudo de que você precisa para isso, e nada de que você não precisa.&lt;/p&gt;
&lt;h2 id=&quot;git-e-github-não-são-a-mesma-coisa&quot;&gt;Git e GitHub não são a mesma coisa&lt;/h2&gt;
&lt;p&gt;Vale dez segundos, porque misturar os dois é o que deixa todo o resto confuso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; é um programa no seu computador. Ele registra versões de uma pasta. Funciona sem internet, sem conta e sem site, e é o que faz todo o trabalho de fato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; é um site que guarda uma cópia de um repositório Git e acrescenta o que um site pode acrescentar: uma página para navegar nele, um lugar para outras pessoas, automação que roda quando você envia.&lt;/p&gt;
&lt;p&gt;Então quando o seu agente “commita”, isso é o Git, local, instantâneo. Quando ele faz “push”, isso é a cópia viajando para o GitHub. É por isso que você consegue trabalhar num avião e por isso que um commit não é um backup até ter sido enviado.&lt;/p&gt;
&lt;p&gt;As alternativas — GitLab, Bitbucket, Codeberg — são o mesmo Git por baixo com outro site por cima. Nada neste guia muda se você escolher uma delas.&lt;/p&gt;
&lt;h2 id=&quot;as-sete-palavras-que-cobrem-quase-tudo&quot;&gt;As sete palavras que cobrem quase tudo&lt;/h2&gt;
&lt;p&gt;Elas ficam em inglês porque é assim que você vai vê-las no GitHub e no terminal:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Palavra&lt;/th&gt;
&lt;th&gt;O que de fato é&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;A pasta do seu projeto, mais toda versão que ela já foi&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;Um ponto de salvamento com um bilhete anexado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Branch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Uma cópia do projeto onde você pode quebrar coisas com segurança&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 seus commits para o GitHub / trazer os dos outros&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;Baixar um repositório inteiro, histórico incluído&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;“Aqui está uma mudança, dê uma olhada antes que ela 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;Dobrar os commits de um branch dentro de outro&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Mais duas que você vai ver e pode quase sempre ignorar: &lt;strong&gt;origin&lt;/strong&gt; é o apelido padrão para “a cópia que está no GitHub”, e &lt;strong&gt;main&lt;/strong&gt; é o nome padrão do branch principal.&lt;/p&gt;
&lt;h2 id=&quot;preciso-aprender-comandos-de-git&quot;&gt;Preciso aprender comandos de Git?&lt;/h2&gt;
&lt;p&gt;Não, e esta é a parte que ninguém conta para quem está começando. &lt;strong&gt;Você precisa de três frases para dizer ao seu agente&lt;/strong&gt;, e ele roda os comandos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Faz o commit disso com uma mensagem clara.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;O que mudou desde o último commit?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Desfaz tudo desde o último commit.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa é a interface inteira do seu primeiro mês. O que você precisa mesmo é entender &lt;em&gt;o que essas três coisas significam&lt;/em&gt;, que é para isso que serve o resto desta página — porque a falha típica não é digitar o comando errado, é pedir o tipo errado de desfazer.&lt;/p&gt;
&lt;p&gt;Se você prefere botões a frases, o &lt;strong&gt;GitHub Desktop&lt;/strong&gt; é gratuito, mostra os arquivos alterados como um diff visual e transforma commit e push em dois cliques. Muita gente que publica produtos reais nunca usa o terminal para o Git.&lt;/p&gt;
&lt;h2 id=&quot;onde-seu-código-fica-enquanto-você-trabalha&quot;&gt;Onde seu código fica enquanto você trabalha&lt;/h2&gt;
&lt;p&gt;As mensagens do Git falam de arquivos “staged”, “tracked” e “untracked”, e nada disso faz sentido até você saber que existem &lt;strong&gt;três lugares onde uma mudança pode estar&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lugar&lt;/th&gt;
&lt;th&gt;O que significa&lt;/th&gt;
&lt;th&gt;Como ela sai dali&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Diretório de trabalho&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Você (ou o agente) editou o arquivo. Nada foi 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 do próximo commit, mas ainda não salvo&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;Já em um commit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Registrado no histórico de forma permanente&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push&lt;/code&gt; manda para o GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A área de staging é a parte que parece inútil no começo. O propósito dela é escolher: doze arquivos mudaram, quatro pertencem a este commit, então você marca esses quatro. Como vibe coder você vai commitar quase sempre tudo de uma vez — mas precisa saber que o staging existe, senão “changes not staged for commit” é uma mensagem de erro sobre nada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;git status&lt;/code&gt; é o comando de “onde eu estou”&lt;/strong&gt;, e é o que vale a pena você mesmo saber ler. Ele diz em qual branch você está, o que mudou, o que está em staging e se você está à frente ou atrás do GitHub. Quando algo está confuso, é a primeira coisa a olhar, e é completamente seguro: não muda nada.&lt;/p&gt;
&lt;h2 id=&quot;o-primeiro-arquivo-que-importa-gitignore&quot;&gt;O primeiro arquivo que importa: .gitignore&lt;/h2&gt;
&lt;p&gt;Antes do seu primeiro push, antes de qualquer outra coisa: o &lt;code&gt;.gitignore&lt;/code&gt; é uma lista de arquivos que o Git nunca deve registrar.&lt;/p&gt;
&lt;p&gt;No mínimo, ele contém:&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;O &lt;code&gt;.env&lt;/code&gt; é o que importa. É ali que ficam suas API keys, e aquela única linha é o que impede que elas sejam publicadas na primeira vez que você enviar. Repositórios públicos são varridos continuamente por gente procurando exatamente isso, e uma chave vazada é encontrada em minutos, não em dias.&lt;/p&gt;
&lt;p&gt;Peça isso explicitamente na configuração inicial — &lt;em&gt;adicione um .gitignore apropriado para esta stack e garanta que o .env está nele&lt;/em&gt; — e depois confira com seus próprios olhos que o &lt;code&gt;.env&lt;/code&gt; está listado. É uma verificação de trinta segundos que evita o erro caro mais comum de quem começa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deixe o repositório privado por padrão.&lt;/strong&gt; Público é uma decisão deliberada de publicar, e é muito mais fácil tornar público depois um repositório privado do que despublicar alguma coisa, inclusive tudo que está no histórico dela.&lt;/p&gt;
&lt;h2 id=&quot;como-leio-um-diff-sem-ler-código&quot;&gt;Como leio um diff sem ler código?&lt;/h2&gt;
&lt;p&gt;Um &lt;strong&gt;diff&lt;/strong&gt; é o que mudou, mostrado linha por linha. Linhas verdes com &lt;code&gt;+&lt;/code&gt; foram adicionadas, linhas vermelhas com &lt;code&gt;-&lt;/code&gt; foram removidas, linhas cinzas são contexto sem alteração. Você não precisa entender o código para tirar valor real dali:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qual é o tamanho?&lt;/strong&gt; Doze linhas alteradas para um pedido pequeno é normal. Quatrocentas é um sinal para parar e perguntar o que mais ele fez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quais arquivos?&lt;/strong&gt; Se você pediu uma mudança de cor e um arquivo com &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;migration&lt;/code&gt; ou &lt;code&gt;schema&lt;/code&gt; no nome está na lista, esse é o momento de perguntar por quê.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alguma coisa apagada que você não pediu para apagar?&lt;/strong&gt; Blocos longos de vermelho merecem uma pergunta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa é a habilidade inteira, e é a maior parte do que uma revisão de código entrega num projeto solo. &lt;em&gt;Me mostra o diff e explica em português claro o que a mudança de cada arquivo faz&lt;/em&gt; é um bom hábito antes de cada commit.&lt;/p&gt;
&lt;h2 id=&quot;o-que-faz-uma-mensagem-de-commit-valer-a-pena&quot;&gt;O que faz uma mensagem de commit valer a pena?&lt;/h2&gt;
&lt;p&gt;O único trabalho dela é ajudar o você do futuro a achar um momento no tempo. “Update” e “fixes” falham nisso; seis delas em sequência são indistinguíveis.&lt;/p&gt;
&lt;p&gt;Escreva qual &lt;em&gt;é&lt;/em&gt; o estado, não o que você fez: &lt;code&gt;tela de login funciona, validação ainda não feita&lt;/code&gt;. Seis semanas depois, essa mensagem é o que permite dizer “volta para quando o login funcionava” e significar algo preciso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Faça o commit quando algo funciona, não no fim do dia.&lt;/strong&gt; O fim do dia é um ponto de salvamento para oito horas de decisões. Todo estado que funciona é um lugar ao qual você pode voltar.&lt;/p&gt;
&lt;h2 id=&quot;quando-eu-de-fato-preciso-de-um-branch&quot;&gt;Quando eu de fato preciso de um branch?&lt;/h2&gt;
&lt;p&gt;Como vibe coder solo, menos vezes do que os tutoriais dão a entender. Você precisa de um quando &lt;strong&gt;está prestes a tentar algo de que pode se arrepender&lt;/strong&gt;: uma refatoração grande, uma troca arriscada de dependência, um experimento do qual você só está meio convencido.&lt;/p&gt;
&lt;p&gt;O motivo é que o desfazer fica de graça. Você está no &lt;code&gt;experiment&lt;/code&gt;, dá errado, você volta para o &lt;code&gt;main&lt;/code&gt; e apaga o branch. Nada para desatar, nada para reverter, nenhuma discussão com o agente sobre o que ele mudou.&lt;/p&gt;
&lt;p&gt;No momento em que mais alguém toca no repositório, isso deixa de ser opcional e passa a ser um branch por pedaço de trabalho — que é &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-shared-repository/&quot;&gt;onde o vibe coding fica genuinamente mais difícil&lt;/a&gt;, e um problema diferente deste.&lt;/p&gt;
&lt;h2 id=&quot;como-eu-desfaço-alguma-coisa&quot;&gt;Como eu desfaço alguma coisa?&lt;/h2&gt;
&lt;p&gt;A seção mais importante desta página. Existem &lt;strong&gt;quatro tipos de desfazer&lt;/strong&gt;, e pedir o errado é como as pessoas perdem trabalho tentando salvá-lo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Você tem mudanças sem commit e quer elas fora.&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;Tudo desde o último commit desaparece. Este é o do dia a dia: a sessão deu errado, nada valia a pena guardar, recomeça do último estado bom.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Você commitou, mas não enviou, e quer o commit fora.&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   # desfaz o commit, mantém as mudanças&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   # desfaz o commit e as mudanças&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; é para “commit certo, mensagem errada, momento errado”. &lt;code&gt;--hard&lt;/code&gt; é para “aquela direção inteira estava errada”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Você já enviou, e outras pessoas (ou um deploy) têm aquilo.&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;Isso faz um commit &lt;em&gt;novo&lt;/em&gt; que desfaz o antigo. É o seguro, porque acrescenta ao histórico em vez de reescrevê-lo, e nada do que outra pessoa já tem discorda do que você tem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Você acha que perdeu algo para sempre.&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;O Git mantém um registro privado de cada posição em que o seu branch esteve por cerca de noventa dias, incluindo commits que você “apagou” e branches que removeu. Quase nada some de verdade. Este é o que se busca depois de um &lt;code&gt;--hard&lt;/code&gt; do qual você se arrependeu ou de um force-push que comeu a sua tarde — e vale saber que ele existe justamente porque o momento em que você precisa dele é o momento em que você está em pânico.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-um-conflito-de-merge-e-quem-resolve&quot;&gt;O que é um conflito de merge, e quem resolve?&lt;/h2&gt;
&lt;p&gt;Dois branches mudaram as mesmas linhas. O Git não vai adivinhar qual versão vence, então marca o trecho em disputa no arquivo com &lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt; e &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt; e para.&lt;/p&gt;
&lt;p&gt;Nada está quebrado e nada foi perdido. As duas versões estão ali; alguém tem que escolher.&lt;/p&gt;
&lt;p&gt;Agentes são bons nisso, com uma condição: &lt;strong&gt;conte para eles para que cada mudança servia.&lt;/strong&gt; A decisão é sobre intenção, não sintaxe — &lt;em&gt;este lado é a lógica nova de preços, aquele lado é a correção do bug de ontem, mantenha os dois comportamentos&lt;/em&gt; recebe uma resolução correta. “Resolve o conflito” recebe um cara ou coroa.&lt;/p&gt;
&lt;h2 id=&quot;o-que-acontece-se-eu-commitar-uma-api-key&quot;&gt;O que acontece se eu commitar uma API key?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rotacione. Agora.&lt;/strong&gt; Vá até o serviço, revogue a chave, emita uma nova.&lt;/p&gt;
&lt;p&gt;Apagar o arquivo num commit posterior não faz nada, porque a chave continua ali no histórico, onde qualquer um consegue ler. Num repositório público, presuma que ela foi varrida em minutos: isso é automatizado em escala.&lt;/p&gt;
&lt;p&gt;O GitHub ajuda em dois pontos, e vale ligar os dois. O &lt;strong&gt;secret scanning&lt;/strong&gt; percebe formatos de chave conhecidos no seu repositório e avisa você. A &lt;strong&gt;push protection&lt;/strong&gt; vai além e bloqueia o envio antes de o segredo chegar a aterrissar. Nenhum dos dois cobre todo formato, então o &lt;code&gt;.gitignore&lt;/code&gt; continua sendo a defesa de verdade.&lt;/p&gt;
&lt;p&gt;Limpar a chave do histórico depois é possível e chato. Também é secundário: uma vez rotacionada a chave, a que está no histórico é uma string morta.&lt;/p&gt;
&lt;h2 id=&quot;o-que-mais-é-o-github-além-de-armazenamento&quot;&gt;O que mais é o GitHub, além de armazenamento?&lt;/h2&gt;
&lt;p&gt;Coisas que você vai encontrar, em uma linha cada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt; — uma lista de pendências anexada ao projeto. Serve para anotações solo, embora um board de verdade seja melhor assim que o trabalho ganha forma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actions&lt;/strong&gt; — automação que roda no push. É assim que os testes rodam e que os deploys disparam. Você vai encontrar na primeira vez que conectar um host.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Releases e tags&lt;/strong&gt; — um nome fixado a um commit específico. &lt;code&gt;v1-launch&lt;/code&gt; é um marcador dizendo &lt;em&gt;esta versão estava boa&lt;/em&gt;, e não custa nada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pages&lt;/strong&gt; — hospedagem estática gratuita direto de um repositório. Serve para uma landing, não para nada com backend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fork&lt;/strong&gt; — sua própria cópia do repositório de outra pessoa. Relevante quando você quer mudar o projeto open source de alguém.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependabot&lt;/strong&gt; — abre pull requests quando uma dependência tem uma correção de segurança. Gratuito, vale deixar ligado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codespaces&lt;/strong&gt; — um ambiente de desenvolvimento completo no navegador. Útil quando você quer trabalhar de uma máquina que não tem nada instalado.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;coisas-que-vão-te-confundir-exatamente-uma-vez&quot;&gt;Coisas que vão te confundir exatamente uma vez&lt;/h2&gt;
&lt;p&gt;Cada uma delas produz um momento de alarme genuíno, e cada uma é inofensiva depois que você viu uma vez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“You are in ‘detached HEAD’ state.”&lt;/strong&gt; Você olhou um commit antigo e agora está em cima dele em vez de em um branch. Commits feitos aqui não pertencem a nada e são fáceis de perder. &lt;code&gt;git switch main&lt;/code&gt; traz você de volta. Nada está quebrado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Seu repositório contém outro repositório.&lt;/strong&gt; Um agente rodou &lt;code&gt;git init&lt;/code&gt; dentro de uma pasta que já estava em um repo, normalmente enquanto montava alguma coisa. O GitHub então mostra uma pasta que você não consegue abrir e que não contém nada. A correção é apagar a pasta &lt;code&gt;.git&lt;/code&gt; interna — e a pista é um commit que adiciona um diretório mas nenhum dos arquivos dentro dele.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Um arquivo é grande demais para enviar.&lt;/strong&gt; O GitHub rejeita arquivos individuais acima de 100 MB, e um vídeo, um dump de banco de dados ou um &lt;code&gt;node_modules&lt;/code&gt; que escapou do &lt;code&gt;.gitignore&lt;/code&gt; vão bater nisso. A armadilha é que remover o arquivo não conserta o envio, porque ele continua no histórico — o commit que o adicionou precisa ser desfeito. É bem mais fácil prevenir: confira o &lt;code&gt;.gitignore&lt;/code&gt; antes do primeiro push.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suas duas máquinas discordam.&lt;/strong&gt; Você commitou no notebook, enviou, e depois commitou no desktop sem dar pull. O Git vai recusar o segundo envio. &lt;code&gt;git pull&lt;/code&gt; primeiro, resolva o que ele perguntar, e então envie. O hábito que evita isso por completo é dar pull no começo de uma sessão, não no fim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O agente commitou como outra pessoa.&lt;/strong&gt; Commits carregam o nome e o e-mail da sua configuração local do Git, que numa máquina nova pode estar em branco ou errada. Vale configurar uma vez, ou o seu histórico fica assinado por “unknown”.&lt;/p&gt;
&lt;h2 id=&quot;truques-que-se-pagam-sozinhos&quot;&gt;Truques que se pagam sozinhos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faça o commit antes de cada sessão com o agente, não depois.&lt;/strong&gt; O commit não é um registro do que você fez, é o ponto de salvamento que você está prestes a arriscar. Dez segundos, e ele converte todo desastre em &lt;code&gt;git restore .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Peça o diff antes de aceitar.&lt;/strong&gt; &lt;em&gt;Me mostra o que você mudou e por quê&lt;/em&gt; pega o extra prestativo que você não queria, que é a falha mais comum a sobreviver até produção.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um branch por experimento, e apagar é o desfazer.&lt;/strong&gt; Mais barato que qualquer revert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;git stash&lt;/code&gt; quando o agente reclamar de árvore suja.&lt;/strong&gt; Ele guarda no bolso o seu trabalho sem commit; &lt;code&gt;git stash pop&lt;/code&gt; devolve. Melhor que commitar lixo para se destravar.&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; puro.&lt;/strong&gt; Os dois reescrevem o que está no GitHub. O primeiro recusa se outra pessoa enviou nesse meio-tempo; o segundo sobrescreve sem perguntar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proteja a &lt;code&gt;main&lt;/code&gt; assim que algo real estiver nela.&lt;/strong&gt; A proteção de branch do GitHub pode exigir um pull request antes do merge, o que torna “o agente enviou direto para a main às 2 da manhã” estruturalmente impossível em vez de meramente desencorajado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marque com tag a versão que funcionou.&lt;/strong&gt; Antes de uma mudança grande, &lt;code&gt;v-works&lt;/code&gt; não custa nada e é trivialmente encontrável, ao contrário de um hash de commit que você nunca vai reconhecer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faça squash no merge.&lt;/strong&gt; Catorze commits de “wip”, “fix”, “agora vai” viram uma entrada com significado, e o seu histórico continua legível por um humano — e pelo próximo agente que o ler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lembre que o &lt;code&gt;reflog&lt;/code&gt; existe antes de precisar dele.&lt;/strong&gt; No momento em que você precisar, não vai estar em estado de descobri-lo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;o-que-fazer-no-primeiro-dia&quot;&gt;O que fazer no primeiro dia&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Crie a conta. Deixe o primeiro repositório &lt;strong&gt;privado&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Coloque o &lt;code&gt;.gitignore&lt;/code&gt; no lugar com o &lt;code&gt;.env&lt;/code&gt; nele, e confira com seus próprios olhos.&lt;/li&gt;
&lt;li&gt;Peça ao agente para fazer o primeiro commit e enviar. Olhe o repositório no GitHub e veja seus arquivos ali.&lt;/li&gt;
&lt;li&gt;E então, toda vez que algo funcionar: &lt;em&gt;faz o commit disso com uma mensagem clara&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Essa é a prática inteira. Todo o resto desta página está aqui para o dia em que algo der errado — e o motivo para ler agora é que o dia em que algo dá errado é um péssimo dia para estar aprendendo de qual tipo de desfazer você precisa.&lt;/p&gt;
&lt;p&gt;O resto da configuração em que isto se encaixa — o modelo, o host, a stack, as salvaguardas — são &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-setup/&quot;&gt;seis decisões&lt;/a&gt;, e o controle de versão é a que todas as outras presumem que você já tem.&lt;/p&gt;
</content:encoded></item><item><title>Seis decisões antes do seu primeiro prompt, e por que cada uma está ali</title><link>https://commitcycle.com/pt-br/insights/vibe-coding-setup/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/vibe-coding-setup/</guid><description>GitHub, um modelo, um host, uma stack, uma salvaguarda e um primeiro prompt: o setup que se faz uma vez, e o que cada peça protege de verdade.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ninguém quer gastar uma tarde com setup. O impulso é abrir um chat e começar a descrever a coisa, e para um protótipo esse é o instinto certo — &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-first-steps/&quot;&gt;a primeira semana tem um post próprio&lt;/a&gt; e quase todo conselho de lá é &lt;em&gt;vá mais rápido&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Este é o outro post. Ele é para o momento em que você decide que a coisa ainda vai existir mês que vem, e são seis decisões. Cada uma leva minutos. Cada uma fecha um jeito específico de a segunda semana dar errado, e a razão para tomá-las juntas é que as seis são baratas agora e caras depois.&lt;/p&gt;
&lt;p&gt;Nenhuma delas é sobre qual modelo é o melhor.&lt;/p&gt;
&lt;h2 id=&quot;1-github-que-é-um-botão-de-desfazer-com-quem-você-conversa&quot;&gt;1. GitHub, que é um botão de desfazer com quem você conversa&lt;/h2&gt;
&lt;p&gt;Se você nunca usou, ignore como costumam descrever. GitHub não é uma rede social para programadores e você não está lá para ler o código de ninguém. É &lt;strong&gt;um sistema de save com histórico&lt;/strong&gt;, hospedado em algum lugar que não é o seu notebook.&lt;/p&gt;
&lt;p&gt;Cinco palavras cobrem quase tudo que você precisa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repositório&lt;/strong&gt; — a pasta do seu projeto, mais todas as versões que ela já teve.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit&lt;/strong&gt; — um ponto de save com um bilhete junto. “Tela de login funciona” é um commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt; — uma cópia do projeto onde você pode quebrar coisas sem quebrar o original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push / pull&lt;/strong&gt; — sincronizar entre a cópia da sua máquina e a cópia no GitHub.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pull request&lt;/strong&gt; — “aqui está uma mudança, olhe antes de ela entrar”. Sozinho você não vai precisar disso; vai precisar no dia em que outra pessoa tocar no projeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E aqui está por que quem faz vibe coding se importa especificamente. Em algum momento — não “talvez” — uma sessão vai reescrever algo que já funcionava. Vai refatorar um arquivo de que você gostava, ou apagar uma função que ela decidiu que não era usada, ou consertar um bug introduzindo dois. Sem commits, esse trabalho se foi e a sua única recuperação é descrever tudo de novo de memória. Com commits, a recuperação é uma frase.&lt;/p&gt;
&lt;p&gt;O que traz a parte que ninguém conta para iniciantes: &lt;strong&gt;você não precisa aprender Git.&lt;/strong&gt; Você precisa aprender três frases para dizer ao seu agente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Faça commit disso com uma mensagem clara.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;O que mudou desde o último commit?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Desfaça tudo desde o último commit.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa é a interface inteira no primeiro mês. O agente roda os comandos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configure assim e pare de pensar nisso:&lt;/strong&gt; crie a conta, deixe o repositório &lt;strong&gt;privado&lt;/strong&gt; por padrão, e antes de qualquer coisa garanta que &lt;code&gt;.env&lt;/code&gt; está no &lt;code&gt;.gitignore&lt;/code&gt;. Aquela única linha é o que impede as suas chaves de API de serem publicadas na primeira vez que você fizer push. Chaves vazam de repositórios de iniciantes o tempo todo, e são varridas em minutos.&lt;/p&gt;
&lt;p&gt;Depois um hábito, que é a coisa de maior retorno deste post inteiro: &lt;strong&gt;quando algo funcionar, faça commit.&lt;/strong&gt; Não no fim do dia. No momento em que funciona.&lt;/p&gt;
&lt;p&gt;Isso basta para começar. O resto — ler um diff sem ler código, os quatro tipos diferentes de desfazer e quando cada um se aplica, o que fazer no dia em que você commitar uma chave de API — está &lt;a href=&quot;https://commitcycle.com/pt-br/insights/github-for-vibe-coders/&quot;&gt;no guia completo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;2-um-modelo-e-isso-importa-menos-do-que-você-pensa&quot;&gt;2. Um modelo, e isso importa menos do que você pensa&lt;/h2&gt;
&lt;p&gt;Claude Code, Codex, ou um modelo de pesos abertos que você mesmo roda. O enquadramento honesto: &lt;strong&gt;essa é a decisão que você pode reverter de graça.&lt;/strong&gt; O repositório é portátil, os seus prompts são portáteis, e nada do que você constrói fica preso à ferramenta que escreveu.&lt;/p&gt;
&lt;p&gt;O que de fato separa essas opções não são notas de benchmark, é se a ferramenta mora &lt;em&gt;dentro do seu projeto&lt;/em&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;O que é&lt;/th&gt;
&lt;th&gt;Onde encaixa&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 no seu terminal, lê e escreve seus arquivos, roda comandos&lt;/td&gt;
&lt;td&gt;Construir funcionalidades inteiras através de muitos arquivos&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;O equivalente agêntico da OpenAI, terminal e nuvem&lt;/td&gt;
&lt;td&gt;O mesmo trabalho, outro estilo da casa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pesos abertos&lt;/strong&gt; (via Ollama, LM Studio, e um cliente como Aider ou Cline)&lt;/td&gt;
&lt;td&gt;Modelos rodando na sua máquina ou no seu próprio servidor&lt;/td&gt;
&lt;td&gt;Privacidade, controle de custo, sem fatura por token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A recomendação: &lt;strong&gt;escolha uma ferramenta agêntica paga e fique nela por um mês.&lt;/strong&gt; Não porque as outras sejam piores, mas porque a habilidade que você está construindo é saber o que pedir e como perceber que a resposta está errada, e essa habilidade transfere devagar enquanto você ainda troca de ferramenta toda semana.&lt;/p&gt;
&lt;p&gt;Sobre open source, sendo direto: é real, é mais barato, é privado, e é o primeiro passo errado. Você vai gastar a primeira semana com setup em vez de com a coisa que queria construir, e trabalhos agênticos longos — muitos arquivos, muitos passos, segurar o plano o caminho todo — são exatamente onde a distância ainda é maior. Volte a isso no mês dois, quando você souber o que está comparando.&lt;/p&gt;
&lt;p&gt;E seja qual for a escolha, a alavanca não está no modelo. Está no que o modelo consegue ver sobre o seu projeto, que são as decisões 4, 5 e 6.&lt;/p&gt;
&lt;h2 id=&quot;3-um-host-e-uma-conta-só-se-você-conseguir&quot;&gt;3. Um host, e uma conta só se você conseguir&lt;/h2&gt;
&lt;p&gt;Você vai precisar de algum lugar para colocar. As duas respostas óbvias são &lt;strong&gt;Cloudflare&lt;/strong&gt; e &lt;strong&gt;Vercel&lt;/strong&gt;, e a pergunta que decide não é desempenho.&lt;/p&gt;
&lt;p&gt;É quantas contas você quer segurar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt; é o tudo-em-um: hospedagem, um banco de dados (D1), armazenamento de arquivos (R2), chave-valor, o próprio domínio, DNS, roteamento de e-mail — um login, uma fatura, um lugar onde as coisas estão erradas quando estão erradas. Para quem está começando, essa consolidação vale mais do que qualquer recurso individual. O preço é um runtime que não é exatamente Node, então um punhado de pacotes do npm não vai rodar lá, e você descobre no deploy e não na instalação.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vercel&lt;/strong&gt; te dá o deploy mais suave que existe se você está em Next.js. A troca é que as peças de dados vêm de parceiros do marketplace, então o banco de dados é o painel de outra pessoa, o armazenamento é mais outro, e você vai acabar reconectando três serviços num domingo à noite tentando lembrar qual deles tem a credencial que falhou.&lt;/p&gt;
&lt;p&gt;Escolha Cloudflare a menos que você tenha um motivo específico para estar em Next.js.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E compre o domínio no primeiro dia&lt;/strong&gt;, do mesmo provedor. Custa uns dez euros, leva quatro minutos, e muda como você trata o projeto. Uma coisa com domínio é uma coisa que existe.&lt;/p&gt;
&lt;h2 id=&quot;4-uma-stack--escolhida-por-você-e-por-escrito&quot;&gt;4. Uma stack — escolhida por você, e por escrito&lt;/h2&gt;
&lt;p&gt;A tentação é deixar isso para o modelo. Não deixe, e o motivo não é que a escolha dele seria ruim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;É que o modelo escolhe por conversa.&lt;/strong&gt; A sessão de segunda escolhe Next.js. A de quarta, sem memória da segunda, escolhe Vite e React Router. A de sexta adiciona uma biblioteca de componentes que duplica a que você já tem. Nada dá erro quando isso acontece — você simplesmente termina com um projeto que são três projetos usando um sobretudo, e cada sessão futura precisa adivinhar em qual convenção está.&lt;/p&gt;
&lt;p&gt;Então: &lt;strong&gt;React + Tailwind, e diga ao modelo para usar shadcn/ui.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por que essa combinação específica, se existem várias outras perfeitamente boas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;É a &lt;strong&gt;combinação mais bem documentada nos dados de treino de qualquer modelo&lt;/strong&gt;. Você está escolhendo a região do mapa onde o modelo é mais preciso e menos inventivo, e isso vale mais do que qualquer vantagem técnica no primeiro dia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O Tailwind mantém o estilo na marcação&lt;/strong&gt;, então quando você diz “deixe esse card mais compacto”, o agente muda uma linha no arquivo que você está olhando em vez de caçar uma folha de estilo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Os componentes do shadcn são copiados para o seu repositório&lt;/strong&gt;, não instalados como dependência. Essa é a parte subestimada. Quando você pede uma mudança num botão, o agente edita o seu botão. Com uma biblioteca de componentes tradicional, ele tem que brigar com a API da biblioteca, e normalmente perde envolvendo tudo em três camadas de bobagem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Uma exceção, e é comum.&lt;/strong&gt; Se o que você constrói é quase todo conteúdo — um site, uma landing page, um blog, um conjunto de documentação, com uma pequena área administrativa junto — use &lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt; no lugar. Ele envia quase nenhum JavaScript por padrão, as páginas ficam rápidas sem você fazer nada, e escala até virar uma aplicação de verdade quando você precisar. Este site é Astro.&lt;/p&gt;
&lt;h3 id=&quot;skills-como-você-para-de-se-repetir&quot;&gt;Skills: como você para de se repetir&lt;/h3&gt;
&lt;p&gt;Uma &lt;strong&gt;skill&lt;/strong&gt; é uma pasta com um arquivo &lt;code&gt;SKILL.md&lt;/code&gt; dentro que o seu agente lê &lt;em&gt;só quando é relevante&lt;/em&gt;. Essa última parte é o ponto inteiro: são instruções disponíveis sem estar no caminho.&lt;/p&gt;
&lt;p&gt;A anatomia é pequena. Um arquivo em &lt;code&gt;.claude/skills/&amp;lt;nome&amp;gt;/SKILL.md&lt;/code&gt;, começando com:&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: Use ao construir ou reestilizar qualquer UI deste projeto —&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;cores, tipografia, espaçamento, padrões 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;Tudo o que o agente deveria saber, em markdown comum.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A linha &lt;code&gt;description&lt;/code&gt; é a importante, porque é contra ela que o agente compara para decidir se carrega a skill. Descrição vaga, skill que nunca dispara.&lt;/p&gt;
&lt;p&gt;Dois lugares para colocá-las: &lt;strong&gt;&lt;code&gt;.claude/skills/&lt;/code&gt; dentro do seu projeto&lt;/strong&gt;, o que significa que vai commitada no GitHub e continua lá amanhã e na sua outra máquina, ou &lt;strong&gt;&lt;code&gt;~/.claude/skills/&lt;/code&gt;&lt;/strong&gt;, para coisas que você quer em todo projeto que tocar. Prefira a do projeto — uma skill que descreve &lt;em&gt;este&lt;/em&gt; produto pertence a &lt;em&gt;este&lt;/em&gt; produto.&lt;/p&gt;
&lt;p&gt;Para instalar uma que alguém te deu: solte a pasta lá, abra uma sessão nova, e pergunte &lt;em&gt;quais skills você tem disponíveis&lt;/em&gt;. Se não listar, a descrição é a primeira coisa a checar.&lt;/p&gt;
&lt;p&gt;Esse é o formato. Por que a descrição é a única parte que sempre carrega, o que vai numa skill contra o que vai no AGENTS.md, e o jeito mais rápido de escrever a sua primeira — &lt;a href=&quot;https://commitcycle.com/pt-br/insights/agent-skills-guide/&quot;&gt;o guia completo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Skills são um recurso do Claude Code. Se você foi de Codex, a alavanca equivalente é o arquivo &lt;code&gt;AGENTS.md&lt;/code&gt; descrito na seção extra — mesma ideia, com carregamento menos seletivo.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A de design vale a pena no primeiro dia.&lt;/strong&gt; Se você tem uma ideia mas nenhuma marca, nenhuma cor e nenhuma opinião visual ainda, vá em &lt;a href=&quot;https://startpow.com/&quot;&gt;startpow.com&lt;/a&gt;, escolha o que você gostar, exporte, e escolha o download de skill. Solte em &lt;code&gt;.claude/skills/&lt;/code&gt;. A partir desse momento toda tela que o agente construir chega nas suas cores, com a sua tipografia e o seu espaçamento, sem você descrever de novo — o que é a diferença entre um produto e uma demo, e custa uns dez minutos.&lt;/p&gt;
&lt;h2 id=&quot;5-algo-que-lembre-para-amanhã-não-ser-uma-reconstrução&quot;&gt;5. Algo que lembre, para amanhã não ser uma reconstrução&lt;/h2&gt;
&lt;p&gt;Esta é a falha de que essa decisão trata, e vale a pena ser preciso porque a versão popular está errada.&lt;/p&gt;
&lt;p&gt;O modelo não é malicioso. Ele é &lt;strong&gt;prestativo e rápido, em lugares onde errar sai caro&lt;/strong&gt;. O banco de dados não é derrubado por uma IA rebelde; ele é derrubado porque uma migração estava quebrada, derrubar a tabela era o caminho mais curto para um teste passando, e ninguém foi consultado. O auth não é reescrito num ato de sabotagem; ele é reescrito porque um teste estava falhando e a checagem de auth era o que fazia falhar.&lt;/p&gt;
&lt;p&gt;Duas camadas de defesa, e a primeira é de graça:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Os hábitos.&lt;/strong&gt; Um banco de desenvolvimento que não é o banco de produção. Credenciais de produção que o agente nunca segura. Um commit antes de começar qualquer coisa. E a instrução que quase ninguém dá — &lt;em&gt;o que ele não pode tocar&lt;/em&gt;. Modelos são prestativos; vão fazer com prazer uma coisa útil que você não queria.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As ferramentas.&lt;/strong&gt; É isso que o &lt;a href=&quot;https://commitcycle.com/pt-br/&quot;&gt;CommitCycle&lt;/a&gt; é: o trabalho começa como uma task com um escopo declarado, o agente ganha acesso preso àquela única task e a um único branch e isso &lt;strong&gt;expira sozinho&lt;/strong&gt;, os paths que de fato doeriam carregam &lt;a href=&quot;https://commitcycle.com/pt-br/zones/&quot;&gt;um owner que precisa dizer sim&lt;/a&gt;, e cada task fecha com &lt;a href=&quot;https://commitcycle.com/pt-br/audit-record/&quot;&gt;um registro do que foi declarado contra o que foi tocado&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Agora o limite honesto, que é também a frase mais importante daqui: &lt;strong&gt;isso não remove a possibilidade.&lt;/strong&gt; A responsabilidade final é sempre da pessoa que aprova o que o agente pede. O agente executa; você consente. O que a ferramenta remove é a classe de acidente em que ninguém podia dizer não, porque ninguém foi consultado — e essa classe é a maioria deles.&lt;/p&gt;
&lt;p&gt;Se você quiser: &lt;code&gt;/plugin marketplace add pow-paulinho/commitcycle-plugin&lt;/code&gt; e depois &lt;code&gt;/plugin install commitcycle@commitcycle&lt;/code&gt;, no &lt;a href=&quot;https://commitcycle.com/pt-br/claude-code/&quot;&gt;Claude Code&lt;/a&gt;, ou &lt;code&gt;npm i -g commitcycle&lt;/code&gt; para &lt;a href=&quot;https://commitcycle.com/pt-br/cli/&quot;&gt;a CLI&lt;/a&gt;. O board hospedado é só por convite enquanto isso é pequeno.&lt;/p&gt;
&lt;h2 id=&quot;6-e-agora-comece-pelo-formato-não-pela-tela&quot;&gt;6. E agora? Comece pelo formato, não pela tela&lt;/h2&gt;
&lt;p&gt;Você tem as seis peças. O instinto é mandar &lt;em&gt;construa a home para mim&lt;/em&gt;, e é o primeiro passo errado — não porque a home não importe, mas porque ela é consequência de decisões que você ainda não tomou.&lt;/p&gt;
&lt;p&gt;A primeira pergunta útil é: &lt;strong&gt;isso precisa de contas?&lt;/strong&gt; Quase tudo se organiza em quatro superfícies a partir daí.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Superfície&lt;/th&gt;
&lt;th&gt;O que é&lt;/th&gt;
&lt;th&gt;Você precisa?&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;Tudo que é visível sem fazer login&lt;/td&gt;
&lt;td&gt;Quase sempre&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;Cadastro, login, recuperar senha, verificar e-mail&lt;/td&gt;
&lt;td&gt;Só se existir um “seu” alguma coisa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;O produto&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O que as pessoas veem depois de fazer login&lt;/td&gt;
&lt;td&gt;Se tem auth, então sim&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;Onde &lt;em&gt;você&lt;/em&gt; vê usuários, pagamentos, problemas&lt;/td&gt;
&lt;td&gt;Sim, e todo mundo esquece até a segunda semana&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Se a resposta honesta for “quase toda parte pública, admin pequeno”, construa em Astro e não adicione um sistema de autenticação que você vai manter para um usuário só. Se for “quase todo produto”, o auth e o modelo de dados são a primeira coisa, porque todo o resto pendura neles.&lt;/p&gt;
&lt;h3 id=&quot;os-prompts&quot;&gt;Os prompts&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Primeiro, o que não escreve código.&lt;/strong&gt; Esse é o prompt de maior valor do processo inteiro e é o que a maioria pula:&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;Quero construir: [descreva em três ou quatro frases, incluindo 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;quem é e pelo que pagam, se pagam 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;Não escreva código ainda. Me entreviste — me faça as perguntas 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;você precisa que eu responda para planejar isso direito, em lotes.&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;Quando tiver o suficiente, me devolva:&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. As telas, agrupadas em público / auth / produto / 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. O modelo de dados, como lista de entidades e como se relacionam&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. Qualquer serviço de terceiros que isso precise e 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. O que você construiria primeiro, e o que deixaria&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;deliberadamente para depois&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Você está fazendo o modelo produzir uma &lt;em&gt;pergunta&lt;/em&gt;, e revisar uma pergunta é muito mais barato do que revisar trezentas linhas de uma resposta construída sobre uma suposição que você nunca viu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Segundo, a fundação.&lt;/strong&gt; Faça o deploy da coisa vazia no primeiro dia — “colocar no ar” nunca deveria virar um projeto próprio mais tarde:&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;Monte o esqueleto do projeto:&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 deploy: 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;- Um repositório Git com um primeiro commit, enviado ao 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;Deixe uma página vazia com deploy feito e me dê a URL no ar antes 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;adicionar qualquer funcionalidade.&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;Depois escreva AGENTS.md na raiz registrando: a stack e as versões, a&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;estrutura de pastas, as convenções de nomes, os comandos para rodar e&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;buildar, e qualquer coisa que você nunca deve fazer neste projeto.&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;Não adicione autenticação, banco de dados nem nenhuma dependência&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;além do acima ainda.&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;Terceiro, as superfícies que precisam de um sistema atrá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;Construa cadastro e login: criar conta, entrar, sair, recuperação 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;senha, verificação de e-mail.&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;Use [o provedor de auth que você escolheu] em vez de fazer na mão.&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;As telas usam nossos componentes existentes — não introduza uma&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;Me dê também a menor página de admin que liste usuários, porque eu&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;preciso conseguir ver se isso 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;NÃO toque: pagamentos, as páginas de marketing, nada abaixo de [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;Se você esbarrar numa decisão que eu não tomei — preços, duração da&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;sessão, o que acontece com contas não verificadas depois de uma&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;semana — pare e pergunte em vez de escolher.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Repare nas duas linhas que quase ninguém escreve: &lt;strong&gt;o que ele não pode tocar&lt;/strong&gt;, e &lt;strong&gt;pare e pergunte em vez de escolher&lt;/strong&gt;. Essas duas linhas evitam mais retrabalho do que qualquer quantidade de refinamento em prompt engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quarto, quando funcionar, deixe com a sua cara:&lt;/strong&gt; instale a skill de design e peça para reestilizar uma tela com ela. Confira essa. Depois deixe rodar no resto.&lt;/p&gt;
&lt;h2 id=&quot;7-histórias-de-usuário-que-é-onde-isso-fica-real&quot;&gt;7. Histórias de usuário, que é onde isso fica real&lt;/h2&gt;
&lt;p&gt;Se você consegue narrar o que uma pessoa faz, você consegue construir. Pegue a frase do próprio usuário:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alguém vê um anúncio, cai no site, cria uma conta, assina um plano, paga com cartão, e a assinatura dele libera o acesso.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Leia de novo devagar, porque essa frase única é uma especificação. Ela contém:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uma &lt;strong&gt;landing page&lt;/strong&gt; para onde o anúncio aponta, que não é a home&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cadastro&lt;/strong&gt;, e portanto verificação, e portanto e-mail que chega de verdade&lt;/li&gt;
&lt;li&gt;Provavelmente &lt;strong&gt;onboarding&lt;/strong&gt;, porque uma conta nova e vazia é onde as pessoas vão embora&lt;/li&gt;
&lt;li&gt;Um &lt;strong&gt;provedor de pagamento&lt;/strong&gt; — Stripe, na prática — e um &lt;strong&gt;checkout&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Um &lt;strong&gt;webhook&lt;/strong&gt;, porque o pagamento dá certo nos servidores da Stripe e o seu app tem que descobrir&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entitlement&lt;/strong&gt;: algum estado que diga que essa conta agora é assinante&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature gating&lt;/strong&gt; guiado por esse estado, em todo lugar onde importa&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;caminho de falha&lt;/strong&gt;: cartão recusado, pagamento que deu certo mas webhook que não chegou, assinatura cancelada no meio do mês&lt;/li&gt;
&lt;li&gt;Uma &lt;strong&gt;visão de admin&lt;/strong&gt;, para que quando alguém te escrever dizendo que pagou e nada liberou, você consiga olhar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Uma frase, nove itens de trabalho, e os três últimos são os que são descobertos em produção, por um cliente, se ninguém escreveu.&lt;/p&gt;
&lt;p&gt;Isso também é trabalho que o modelo faz bem — entregue a história e pergunte o que ela implica, e ele vai produzir uma lista muito parecida com a de cima. O que ele não consegue é lembrar da lista na terça que vem. É para isso que serve um board: cada item vira uma task com um escopo, uma task vira um branch, e o branch fecha com um registro do que realmente mudou.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Isso soa chato.&lt;/strong&gt; É, um pouco. E no interesse de não vender demais: três prompts realmente conseguem te dar algo que roda e parece bom, e a emoção de ver funcionando é real e vale a pena ter. Vá lá e tenha.&lt;/p&gt;
&lt;p&gt;Mas a coisa que ainda está de pé no mês três, que você consegue entregar para outra pessoa, que você consegue mudar sem prender a respiração — essa foi construída por alguém que escreveu o que ela deveria fazer. Consistência é sem glamour e é a diferença inteira.&lt;/p&gt;
&lt;h2 id=&quot;faixa-bônus&quot;&gt;Faixa bônus&lt;/h2&gt;
&lt;p&gt;Coisas pequenas, na ordem aproximada de quanto arrependimento elas evitam:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; na raiz do repositório.&lt;/strong&gt; O arquivo de maior retorno que você vai escrever. Stack, convenções, comandos, e a lista de coisas para nunca fazer. Toda ferramenta agêntica lê. O nosso &lt;a href=&quot;https://commitcycle.com/pt-br/agents-md/&quot;&gt;guarda ali o mapa de zones e escreve a task ativa num &lt;code&gt;CLAUDE.local.md&lt;/code&gt; ignorado pelo git, que é limpo na entrega&lt;/a&gt;, mas um escrito à mão já é a maior parte do valor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dois bancos de dados desde o primeiro minuto.&lt;/strong&gt; Desenvolvimento e produção, nunca as mesmas credenciais, e o agente só segura o de desenvolvimento. Essa é a defesa específica contra o desastre específico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segredos nunca no repositório.&lt;/strong&gt; &lt;code&gt;.env&lt;/code&gt; no &lt;code&gt;.gitignore&lt;/code&gt;, valores reais no cofre de segredos do seu host. Rotacione qualquer coisa que chegou a ser commitada — apagar o arquivo não remove do histórico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploys de preview por branch.&lt;/strong&gt; Tanto Cloudflare quanto Vercel te dão uma URL por branch de graça. Ver a mudança numa URL real antes de ir ao ar vale mais do que qualquer quantidade de teste local.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deixe o agente ver o que ele construiu.&lt;/strong&gt; Capturas de tela, ou uma ferramenta de navegador que ele possa dirigir. Um agente construindo UI sem nunca olhar está trabalhando às cegas, e dá para perceber.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rastreamento de erros, mais exatamente um número de analytics que você olha de verdade.&lt;/strong&gt; Mais do que um e você não vai olhar nenhum.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Termos e política de privacidade antes de cobrar um cartão.&lt;/strong&gt; A Stripe vai pedir um site funcionando com os dois antes de ativar a conta, e descobrir isso no dia do lançamento é um dia ruim.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conheça a sua restauração, não só o seu backup.&lt;/strong&gt; Um backup não testado é uma crença, não um backup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um arquivo de decisões.&lt;/strong&gt; Três linhas por decisão: o quê, por quê, o que você rejeitou. Seis semanas depois é a única coisa entre você e relitigar tudo com um modelo que não estava lá.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Espere o modelo custar mais do que a hospedagem.&lt;/strong&gt; Essa proporção está certa e não é sinal de que você está fazendo errado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O setup inteiro acima é uma tarde. O que ele compra é que a segunda semana seja uma continuação em vez de um projeto de arqueologia — e se você quer os hábitos que vão em cima disso, &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-first-steps/&quot;&gt;esse é o post da primeira semana&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Vibe coding, e a primeira semana que não termina em bagunça</title><link>https://commitcycle.com/pt-br/insights/vibe-coding-first-steps/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/vibe-coding-first-steps/</guid><description>O que é vibe coding, onde ele funciona de verdade, onde para de funcionar e as respostas ao que as pessoas perguntam antes da primeira tentativa séria.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Vibe coding é construir descrevendo o que você quer e aceitando o que o modelo escreve sem ler tudo. O termo é do Andrej Karpathy, e o que distingue não é a IA ter escrito o código — isso hoje é comum — mas que &lt;strong&gt;ninguém revisou linha por linha&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Isso é uma troca, não um erro. Se é uma boa troca depende inteiramente de uma pergunta: por quanto tempo esse código precisa viver?&lt;/p&gt;
&lt;h2 id=&quot;onde-o-vibe-coding-funciona-de-verdade&quot;&gt;Onde o vibe coding funciona de verdade?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Protótipos que você pretende apagar.&lt;/strong&gt; O custo de errar é jogar fora, que era o que você ia fazer de qualquer jeito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scripts e ferramentas de uso único.&lt;/strong&gt; Uma coisa que reformata um CSV, popula um banco de dados, faz scraping de uma página uma vez só. Se produz a saída certa, acabou; ninguém vai manter aquilo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aprender o formato de algo desconhecido.&lt;/strong&gt; Conseguir um exemplo funcionando de uma biblioteca que você nunca usou é mais rápido assim do que ler a documentação antes, e você pode ler a documentação depois com uma coisa concreta na frente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qualquer coisa em que o feedback seja imediato e total.&lt;/strong&gt; Se funciona, funciona, e você descobre em dez segundos.&lt;/p&gt;
&lt;p&gt;O fio comum é que &lt;strong&gt;errar é barato e óbvio&lt;/strong&gt;. Essa é a condição. Não o tamanho do projeto, nem a linguagem, nem se é “de verdade” — só se um erro aparece na hora e custa pouco.&lt;/p&gt;
&lt;h2 id=&quot;quando-ele-para-de-funcionar&quot;&gt;Quando ele para de funcionar?&lt;/h2&gt;
&lt;p&gt;No momento em que o código sobrevive à sessão que o produziu.&lt;/p&gt;
&lt;p&gt;Isso não é um julgamento moral. É aritmética: você comprou velocidade pulando o entendimento, e a conta chega quando alguém precisa mudar código que ninguém entendeu quando foi escrito. Se ninguém nunca mudar, a conta nunca chega e a velocidade saiu de graça. Esse é um desfecho real e acontece muito.&lt;/p&gt;
&lt;p&gt;O que faz dar errado é não saber em qual dos dois casos você está. Quase toda experiência ruim começa como um protótipo que virou crítico em silêncio, sem ninguém decidir nada.&lt;/p&gt;
&lt;h2 id=&quot;como-sei-em-qual-caso-estou&quot;&gt;Como sei em qual caso estou?&lt;/h2&gt;
&lt;p&gt;Três perguntas, e elas são sobre a situação mais do que sobre o código:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pergunta&lt;/th&gt;
&lt;th&gt;Vibe coding vale quando&lt;/th&gt;
&lt;th&gt;Deixa de valer quando&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Com que rapidez descubro que errei?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Em segundos. Você roda e vê&lt;/td&gt;
&lt;td&gt;Em semanas, por um cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quanto custa errar?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Você apaga e começa de novo&lt;/td&gt;
&lt;td&gt;Dinheiro, dados ou a confiança de alguém&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quem mais depende disso?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ninguém&lt;/td&gt;
&lt;td&gt;Qualquer pessoa que não seja você&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As três apontando para o mesmo lado é o caso para o qual isso foi feito. As três apontando para o outro lado e você não está fazendo vibe coding, está apostando com passos a mais.&lt;/p&gt;
&lt;p&gt;O útil é que &lt;strong&gt;isso se decide por peça de trabalho, não por projeto&lt;/strong&gt;. A mesma tarde comporta um script descartável que você nunca lê e uma mudança de permissões que você lê duas vezes. Tratar um repositório inteiro como um ajuste único é o que produz os dois erros comuns: ler tudo num protótipo, e não ler nada na parte que morde.&lt;/p&gt;
&lt;h2 id=&quot;o-que-eu-nunca-deveria-fazer-com-vibe-coding&quot;&gt;O que eu nunca deveria fazer com vibe coding?&lt;/h2&gt;
&lt;p&gt;Uma lista curta, e o motivo é o mesmo em todos os itens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autenticação e permissões.&lt;/strong&gt; Errar aqui não lança erro. Deixa a pessoa errada entrar em silêncio, e você descobre por outra pessoa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dinheiro.&lt;/strong&gt; Preços, cobranças, estornos, moeda. Um off-by-one num laço é um bug; um off-by-one em centavos é um chargeback e um e-mail que você não quer escrever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qualquer coisa que apague.&lt;/strong&gt; Exclusões em cascata principalmente. O teste dessa categoria é se existe um desfazer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migrações de banco de dados.&lt;/strong&gt; Rodam uma vez, contra dados reais, e a falha é descoberta depois que os dados já se foram.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tudo que lida com dados pessoais dos outros.&lt;/strong&gt; Errar aqui vem com um regulador junto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Repare no que &lt;em&gt;não&lt;/em&gt; é o critério: dificuldade. Alguns desses são código fácil. A propriedade que compartilham é que &lt;strong&gt;errar não se anuncia sozinho&lt;/strong&gt; — que é exatamente a suposição sobre a qual o vibe coding roda.&lt;/p&gt;
&lt;p&gt;Isso não é “escreva você mesmo”. É “leia esse aqui”. Deixe o modelo escrever, depois leia de verdade o que ele escreveu, e peça que explique as partes que você não conseguir acompanhar. A leitura é todo o custo, e nessas cinco vale a pena pagar.&lt;/p&gt;
&lt;h2 id=&quot;a-primeira-semana&quot;&gt;A primeira semana&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Mantenha as sessões curtas, e termine cada uma em algo que funciona.&lt;/strong&gt; Esse é o hábito de maior retorno e não tem nada a ver com a IA. Uma sessão longa acumula decisões que ninguém escreveu, e quando enfim algo está errado não existe ponto para voltar. Sessões curtas com um commit que funciona no fim te dão um lugar para onde voltar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leia as partes caras.&lt;/strong&gt; Não tudo — isso derrubaria o propósito. Leia qualquer coisa que toque dinheiro, autenticação, exclusão de dados, ou código em que outra pessoa também trabalha. O resto, passe o olho. A habilidade construída aqui é triage, e é uma habilidade real: saber onde errar sai caro é a maior parte do que engenheiros seniores sabem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diga o que ele não pode fazer.&lt;/strong&gt; Quase todo mundo descreve o que quer e para por aí. A instrução que mais economiza tempo é a que exclui coisas — &lt;em&gt;não toque no módulo de auth, não adicione dependências, não mude o schema do banco&lt;/em&gt;. Modelos são prestativos e vão fazer com prazer uma coisa útil que você não queria.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rode antes de acreditar.&lt;/strong&gt; Código gerado que parece certo e não roda é a falha isolada mais comum, e a mais barata de pegar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perceba quando o protótipo deixou de ser protótipo.&lt;/strong&gt; Costuma existir um momento específico: outra pessoa abre, ou vai para a frente de um usuário, ou você faz deploy. Esse é o momento em que a troca muda, e a resposta honesta é voltar e ler direito.&lt;/p&gt;
&lt;h2 id=&quot;como-é-uma-boa-sessão-do-começo-ao-fim&quot;&gt;Como é uma boa sessão, do começo ao fim&lt;/h2&gt;
&lt;p&gt;Concretamente, porque “mantenha as sessões curtas” é um conselho com o qual você concorda e mesmo assim não aplica:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Comece de um commit.&lt;/strong&gt; Não de um repositório arrumado — de um com commit. Esse é o ponto de save, e leva dez segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diga o objetivo e o limite na mesma mensagem.&lt;/strong&gt; O que você quer, e o que está fora de alcance. A segunda metade é a que as pessoas pulam.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deixe trabalhar sem interromper.&lt;/strong&gt; Corrigir o rumo no meio do voo produz uma mudança que é metade de um plano e metade de outro, o que é mais difícil de ler do que qualquer um dos dois.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leia o diff, não a base de código.&lt;/strong&gt; Quantos arquivos, quais arquivos, e se apagou algo que você não pediu para apagar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rode.&lt;/strong&gt; Antes de acreditar em qualquer parte.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faça commit, ou jogue a sessão inteira fora.&lt;/strong&gt; Os dois são desfechos aceitáveis. O que não é aceitável é carregar um estado meio pronto para a próxima sessão.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cerca de uma hora é onde isso costuma cair para a maioria, e o número importa menos que o formato: &lt;strong&gt;a sessão é a unidade que você pode jogar fora.&lt;/strong&gt; Assim que uma sessão está longa a ponto de descartá-la ser impensável, você perdeu a propriedade que tornava toda a abordagem segura — e isso acontece de forma gradual, que é justamente por que vale a pena ficar de olho.&lt;/p&gt;
&lt;h2 id=&quot;as-perguntas-que-as-pessoas-realmente-fazem&quot;&gt;As perguntas que as pessoas realmente fazem&lt;/h2&gt;
&lt;h3 id=&quot;eu-ainda-sou-um-desenvolvedor-de-verdade-fazendo-isso&quot;&gt;“Eu ainda sou um desenvolvedor de verdade fazendo isso?”&lt;/h3&gt;
&lt;p&gt;A pergunta por baixo é se você está construindo uma habilidade ou fugindo de uma. Está construindo uma — triage, especificação, saber onde o risco mora — e não é a mesma habilidade de escrever a sintaxe você mesmo. As duas são reais. Nenhuma se basta sozinha.&lt;/p&gt;
&lt;h3 id=&quot;como-impeço-que-ele-invente-bibliotecas-que-não-existem&quot;&gt;“Como impeço que ele invente bibliotecas que não existem?”&lt;/h3&gt;
&lt;p&gt;Rode o código. Imports alucinados falham na hora, o que faz dessa a classe de erro menos perigosa. Preocupe-se mais com os que rodam.&lt;/p&gt;
&lt;h3 id=&quot;ele-reescreveu-algo-que-eu-não-pedi-para-tocar&quot;&gt;“Ele reescreveu algo que eu não pedi para tocar.”&lt;/h3&gt;
&lt;p&gt;Muito comum, e a correção normal é dizer o que está fora de alcance antes de começar. Num repositório em que outras pessoas trabalham, isso deixa de ser um incômodo e vira o problema de verdade — o que tem &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-shared-repository/&quot;&gt;um post próprio&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;devo-fazer-commit-de-código-que-não-li&quot;&gt;“Devo fazer commit de código que não li?”&lt;/h3&gt;
&lt;p&gt;Em algo descartável, sim. Em algo compartilhado, você está entregando aos seus colegas um diff sobre o qual não consegue responder perguntas, e isso é um problema social antes de ser técnico.&lt;/p&gt;
&lt;h3 id=&quot;é-assim-que-times-profissionais-trabalham-agora&quot;&gt;“É assim que times profissionais trabalham agora?”&lt;/h3&gt;
&lt;p&gt;Em parte, e honestamente a resposta ainda está se movendo. O que está claro é que a restrição saiu de &lt;em&gt;com que rapidez isso pode ser escrito&lt;/em&gt; para &lt;em&gt;com quanta confiança isso pode ser mudado depois&lt;/em&gt;, e os times que vão bem são os que tratam isso como o eixo do desenho.&lt;/p&gt;
&lt;h2 id=&quot;para-onde-isso-está-indo-e-o-que-a-gente-faz-a-respeito&quot;&gt;Para onde isso está indo, e o que a gente faz a respeito&lt;/h2&gt;
&lt;p&gt;Tudo acima funciona para uma pessoa sozinha na própria máquina. As falhas interessantes começam quando o repositório é compartilhado — quando o código gerado é localmente razoável e globalmente errado porque o modelo não conseguia ver uma convenção que mora na cabeça de alguém.&lt;/p&gt;
&lt;p&gt;Esse é o problema em que o CommitCycle trabalha: cada agente ganha um grant preso a uma task e a um branch que expira sozinho, os paths que doeriam carregam um owner, e cada task fecha com um registro do que declarou contra o que tocou.&lt;/p&gt;
&lt;p&gt;Sendo direto sobre onde isso está: o plugin instala hoje o enforcement, e o pacote &lt;code&gt;commitcycle&lt;/code&gt; no npm instala a CLI — o processo sem o muro. O board hospedado é só por convite enquanto isso é pequeno. E nada disso é o que você precisa na sua primeira semana de vibe coding — na primeira semana você precisa de sessões curtas e do hábito de ler as partes caras.&lt;/p&gt;
&lt;p&gt;Na semana seguinte, quando você já tiver decidido que a coisa vai existir além da sexta, a pergunta sai de hábitos e vai para setup: &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-setup/&quot;&gt;o que ter no lugar antes do primeiro prompt&lt;/a&gt;, e por que cada peça está ali.&lt;/p&gt;
</content:encoded></item><item><title>O que quebra quando o vibe coding chega num repositório compartilhado</title><link>https://commitcycle.com/pt-br/insights/vibe-coding-shared-repository/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/vibe-coding-shared-repository/</guid><description>A falha raramente é código ruim. É código localmente razoável e globalmente errado, porque a convenção que ele quebrou nunca foi escrita.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tudo sobre vibe coding muda quando o repositório tem outras pessoas dentro. Não porque o código fique pior, mas porque o jeito como ele falha deixa de ser visível.&lt;/p&gt;
&lt;p&gt;Na sua própria máquina, um erro aparece como algo que não funciona. Num repositório compartilhado, a falha característica é código que &lt;strong&gt;funciona, se lê como razoável, passa na revisão e mesmo assim está errado&lt;/strong&gt; — porque quebrou uma regra que nunca foi escrita em nenhum lugar que o modelo pudesse ler.&lt;/p&gt;
&lt;h2 id=&quot;o-formato-disso&quot;&gt;O formato disso&lt;/h2&gt;
&lt;p&gt;Pede-se a um agente que adicione um campo a um formulário. Ele adiciona, com competência. Ele também adiciona uma migração de banco de dados, porque é isso que adicionar um campo geralmente exige.&lt;/p&gt;
&lt;p&gt;A migração está boa. O problema é que este time aplica migrações à mão, numa ordem específica, depois de uma revisão da pessoa que é owner do schema — uma convenção que existe por causa de um incidente de dezoito meses atrás, é conhecida por quatro pessoas, e não está escrita em lugar nenhum.&lt;/p&gt;
&lt;p&gt;Nada naquele diff parece errado. &lt;strong&gt;Essa é a falha.&lt;/strong&gt; Não é código ruim; é código localmente razoável e globalmente errado, e a distância entre essas duas coisas é exatamente a distância entre o que está no repositório e o que está na cabeça de alguém.&lt;/p&gt;
&lt;h2 id=&quot;por-que-a-revisão-não-pega-isso&quot;&gt;Por que a revisão não pega isso?&lt;/h2&gt;
&lt;p&gt;A revisão lê o diff e pergunta se ele é bom. Essa classe de problema é invisível para essa pergunta, porque o diff &lt;em&gt;é&lt;/em&gt; bom. O defeito mora na relação entre a mudança e um pedaço de contexto que não está na tela.&lt;/p&gt;
&lt;p&gt;Quem revisa só pega se por acaso carregar a convenção e por acaso lembrar dela enquanto lê. Isso funciona, às vezes, quando quem revisa é uma das quatro pessoas. Para de funcionar no momento em que o volume sobe — e o volume subir é o ponto inteiro de usar agentes.&lt;/p&gt;
&lt;p&gt;Então o conselho de sempre, &lt;em&gt;revise código gerado por IA com mais cuidado&lt;/em&gt;, está meio certo e não escala. Revisão cuidadosa linha por linha de tudo remove o motivo de gerar em primeiro lugar.&lt;/p&gt;
&lt;h2 id=&quot;qual-é-a-falha-que-custa-mais&quot;&gt;Qual é a falha que custa mais?&lt;/h2&gt;
&lt;p&gt;Dois agentes, ao mesmo tempo, no mesmo repositório.&lt;/p&gt;
&lt;p&gt;Cada um está correto isoladamente. Cada um passa nos próprios testes. Um refatora um helper de que o outro depende; ou os dois tocam a mesma configuração de direções opostas; ou um move um arquivo em que o outro está escrevendo. Nada dá erro. Os dois branches estão verdes.&lt;/p&gt;
&lt;p&gt;A perda aparece dias depois como uma mudança que foi feita e depois não estava mais lá, e ninguém consegue dizer quando ela parou de existir. É cara justamente porque não existe um momento de falha para apontar — você está reconstruindo um negativo a partir do histórico do git.&lt;/p&gt;
&lt;p&gt;Isso não é hipotético e não é raro. É a consequência comum de rodar mais de um agente num repositório, o que hoje é uma terça-feira normal.&lt;/p&gt;
&lt;h2 id=&quot;como-sei-que-isso-já-está-acontecendo&quot;&gt;Como sei que isso já está acontecendo?&lt;/h2&gt;
&lt;p&gt;Não chega como um incidente, e essa é a dificuldade. Chega como um conjunto de fatos pequenos que cada um tem uma explicação individual plausível:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trabalho que foi feito e depois não estava lá.&lt;/strong&gt; Alguém lembra de ter escrito. O git diz que existiu. Ninguém consegue nomear o commit que removeu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O mesmo bug corrigido duas vezes&lt;/strong&gt;, com três semanas de diferença, por duas pessoas que cada uma achou que era a primeira.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uma convenção reexplicada em três sessões separadas&lt;/strong&gt;, porque cada sessão começou sem memória da anterior e ninguém escreveu no meio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um pull request que toca arquivos que ninguém esperava&lt;/strong&gt;, onde os arquivos a mais são todos individualmente defensáveis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“Quem mudou isso?”&lt;/strong&gt; respondido por uma mensagem de commit que diz &lt;code&gt;refactor&lt;/code&gt; e um autor que não estava lendo com atenção.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Qualquer uma dessas sozinha é uma semana ruim comum. Todas juntas são a falha, e o motivo de ela ficar sem nome por tanto tempo é que &lt;strong&gt;não existe erro para procurar.&lt;/strong&gt; Você está procurando a ausência de uma coisa, e ausências não acionam ninguém.&lt;/p&gt;
&lt;h2 id=&quot;e-se-as-outras-pessoas-forem-os-meus-próprios-agentes&quot;&gt;E se as outras pessoas forem os meus próprios agentes?&lt;/h2&gt;
&lt;p&gt;A inversão que pega mais gente de surpresa: &lt;strong&gt;você não precisa de um time para ter um problema de repositório compartilhado. Dois terminais bastam.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Um repositório não sabe que duas sessões pertencem ao mesmo humano. Toda propriedade que torna isso difícil num time está presente quando você está sozinho — escritas concorrentes nos mesmos arquivos, nenhuma memória compartilhada entre as sessões, convenções que existem só na sua cabeça — e uma propriedade é estritamente pior. Num time, o trabalho do segundo agente é pelo menos lido por uma pessoa diferente. Quando os dois são seus, você aprova os dois, rápido, na mesma tarde, e &lt;strong&gt;não existe um segundo leitor em lugar nenhum do circuito.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;É por isso que “sou desenvolvedor solo, isso não se aplica a mim” normalmente já está errado no momento em que alguém diz. O limiar não é o número de pessoas. É o número de coisas escrevendo no repositório ao mesmo tempo.&lt;/p&gt;
&lt;h2 id=&quot;agentsmd-e-claudemd-resolvem-isso&quot;&gt;AGENTS.md e CLAUDE.md resolvem isso?&lt;/h2&gt;
&lt;p&gt;A resposta padrão é um &lt;code&gt;CLAUDE.md&lt;/code&gt; ou um &lt;code&gt;AGENTS.md&lt;/code&gt; com as suas convenções dentro. Escreva um. Ajuda de verdade, e é a coisa mais barata desta lista.&lt;/p&gt;
&lt;p&gt;Ele também apodrece, pela mesma razão que toda documentação apodrece: é uma foto do que alguém lembrava no dia em que escreveu, e nada força a revisitá-lo quando a coisa que ele descreve muda. Seis meses depois é uma mistura de verdadeiro, vencido e aspiracional, e um agente lendo não consegue dizer qual linha é qual. Uma pessoa recém-contratada também não.&lt;/p&gt;
&lt;p&gt;Um arquivo de contexto é necessário e não é suficiente, e o vão entre essas duas coisas é onde está o trabalho interessante.&lt;/p&gt;
&lt;h2 id=&quot;o-que-ajuda-de-verdade&quot;&gt;O que ajuda de verdade?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Nomeie os paths onde errar sai caro.&lt;/strong&gt; Não tudo — a maior parte de um repositório é genuinamente segura para mudar, e tratar tudo como perigoso significa que nada é. Uma lista curta dos paths que doeriam vale mais do que uma exaustiva, porque uma lista curta é lida.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dê a cada um deles um owner.&lt;/strong&gt; Não por burocracia: para que “isso deveria mudar?” tenha a quem perguntar. Uma regra sem owner é uma regra contornada no primeiro inconveniente, por humanos tanto quanto por agentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Defina o escopo do trabalho antes de ele começar, não depois.&lt;/strong&gt; O que isso deve fazer, o que não pode tocar, quais áreas toca. Escrito antes de o código existir, isso é uma especificação. Escrito depois, é uma desculpa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Torne possível ver o que uma peça de trabalho de fato tocou&lt;/strong&gt;, contra o que ela disse que tocaria. Essa diferença é onde estão as surpresas, e é uma pergunta que o git consegue responder se alguém fizer.&lt;/p&gt;
&lt;p&gt;Nada disso precisa de um produto. Precisa que a lista exista em algum lugar que tanto as pessoas quanto os agentes consigam ler.&lt;/p&gt;
&lt;h2 id=&quot;o-que-eu-posso-fazer-na-segunda-feira-sem-comprar-nada&quot;&gt;O que eu posso fazer na segunda-feira, sem comprar nada?&lt;/h2&gt;
&lt;p&gt;Em ordem, porque fazer as duas primeiras é a maior parte do valor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Escreva os cinco paths onde errar sai caro.&lt;/strong&gt; Cinco, não cinquenta — o ponto é que a lista seja lida. Migrações, auth, o código de pagamentos, a configuração compartilhada, os que forem os seus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coloque um nome ao lado de cada um.&lt;/strong&gt; Para que “isso deveria mudar?” tenha para onde ir. Não precisa ser um owner formal; precisa ser uma pessoa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comece toda peça de trabalho dizendo o que ela não pode tocar.&lt;/strong&gt; Uma linha, antes de o código existir. Essa é a frase de maior rendimento do desenvolvimento agêntico e não custa nada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uma vez por semana, olhe o que de fato mudou&lt;/strong&gt; contra o que você achava que estava sendo trabalhado. Não uma revisão do código: uma comparação de duas listas. O vão é onde as surpresas moram, e uma vez por semana basta para pegá-las enquanto ainda estão baratas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nada disso é um produto e nada disso precisa de permissão. Se acabar importando para você, a próxima pergunta é o que impõe isso quando todo mundo está ocupado — que é onde o resto disso fica interessante.&lt;/p&gt;
&lt;h2 id=&quot;onde-o-commitcycle-entra&quot;&gt;Onde o CommitCycle entra&lt;/h2&gt;
&lt;p&gt;Essa lista é a coisa sobre a qual a gente constrói. As zones são os paths que doeriam, cada uma com um owner e um risk level. Uma task declara o que toca antes de começar, e mover um muro exige uma aprovação com um motivo. Cada agente ganha um grant preso a uma task e a um branch que expira sozinho, então duas sessões em worktrees próprios não conseguem se autorizar mutuamente em silêncio — dividindo um mesmo diretório elas ainda conseguem, e é por isso que o worktree é a instrução, não uma preferência. Cada task fecha com um registro do que declarou contra o que tocou.&lt;/p&gt;
&lt;p&gt;Onde isso de fato está, em bom português: o enforcement se instala hoje como plugin do Claude Code; o pacote &lt;code&gt;commitcycle&lt;/code&gt; no npm coloca &lt;code&gt;cycle&lt;/code&gt; no seu PATH e não carrega hook, então ele te dá o processo sem o muro. O board hospedado é só por convite enquanto isso é pequeno. O modelo de zones é agnóstico de agente, mas o ponto de enforcement precisa de um pequeno adaptador por harness, e hoje só o do Claude Code foi visto negando numa instalação real.&lt;/p&gt;
&lt;p&gt;E o limite honesto que vale repetir: &lt;strong&gt;negar uma chamada de ferramenta em voo não é o que torna isso diferente.&lt;/strong&gt; Vários fornecedores entregam isso e o Claude Code inclui de graça. A parte que é nossa é o grant preso a uma única task, atribuído a um owner, e que expira sozinho — e o registro depois que diz o que realmente aconteceu.&lt;/p&gt;
&lt;p&gt;Se você é uma pessoa só num protótipo, nada disso é problema seu ainda, e &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-first-steps/&quot;&gt;o post dos primeiros passos&lt;/a&gt; é o mais útil — ou &lt;a href=&quot;https://commitcycle.com/pt-br/insights/vibe-coding-setup/&quot;&gt;o do setup&lt;/a&gt;, se o protótipo começou a parecer que vai sobreviver ao mês.&lt;/p&gt;
</content:encoded></item><item><title>O que tirar do Obsidian, e o que deixar nele</title><link>https://commitcycle.com/pt-br/insights/what-to-move-out-of-obsidian/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/what-to-move-out-of-obsidian/</guid><description>Uma linha que você aplica nota a nota: se errar nela levaria outra pessoa a errar junto, ela passou do ponto de um vault pessoal. O que sai, e para onde.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;O &lt;a href=&quot;https://commitcycle.com/pt-br/insights/obsidian-ai-agent-knowledge-base/&quot;&gt;post anterior&lt;/a&gt; argumentou que um vault do Obsidian não pode ser a base de conhecimento dos seus agentes de IA: ele é privado de uma máquina, suas afirmações não têm procedência e nada marca uma nota como vencida.&lt;/p&gt;
&lt;p&gt;Concordam com esse argumento e depois não agem, porque “mova o seu conhecimento” não é uma coisa que alguém consiga começar numa terça-feira. Este post é a metade prática. O que sai de fato, o que fica, e como o substituto se parece depois de estar rodando.&lt;/p&gt;
&lt;h2 id=&quot;a-linha-aplicada-por-nota&quot;&gt;A linha, aplicada por nota&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Se errar sobre esta nota levaria outra pessoa a errar junto, ela passou do ponto de um vault pessoal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por nota, não por vault. Essa distinção é o ponto inteiro, e é por isso que o trabalho é menor do que parece. A maior parte de um vault é pensamento — conexões pela metade, restos de reunião, coisas que você escreveu para descobrir o que pensava. Nada disso sai. O que sai é a minoria sobre a qual outras pessoas, ou um agente, agiriam.&lt;/p&gt;
&lt;p&gt;Na prática isso tem sido menos de um quinto das notas em todos os casos que acompanhei. O resto fica exatamente onde está.&lt;/p&gt;
&lt;h2 id=&quot;o-que-sai&quot;&gt;O que sai?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Convenções.&lt;/strong&gt; “A gente faz migrations em duas etapas.” “Os handlers devolvem o erro, não fazem log dele.” Qualquer coisa formulada como &lt;em&gt;a gente faz X&lt;/em&gt; é uma afirmação sobre o time, e uma afirmação sobre o time pertence a onde o time consegue ver e corrigir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decisões, com os motivos.&lt;/strong&gt; Não só o que foi escolhido, mas o que foi descartado e por quê. Esta é a categoria de maior valor e a que mais se perde, porque o raciocínio mora na cabeça de alguém e o vault registra só a conclusão. Um agente que recebe a conclusão sem o motivo vai desfazê-la alegremente na primeira vez em que a conclusão for inconveniente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qualquer coisa sobre a qual um agente agiria.&lt;/strong&gt; Se uma nota mudaria o que é escrito quando um agente a lê, ela é operacional, não pessoal. É a categoria mais nova e aquela para a qual os vaults nunca foram projetados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Os limites.&lt;/strong&gt; &lt;em&gt;“A gente deliberadamente não faz X, e eis o porquê.”&lt;/em&gt; Ninguém escreve isso e todo mundo redescobre pelo caminho caro.&lt;/p&gt;
&lt;h2 id=&quot;o-que-fica&quot;&gt;O que fica?&lt;/h2&gt;
&lt;p&gt;Todo o resto, e isso não é prêmio de consolação.&lt;/p&gt;
&lt;p&gt;Ideias pela metade. Notas que têm permissão de estar erradas. A conexão que você ainda não fez. Notas de leitura, restos de reunião, aquilo que você escreveu às 2 da manhã e que fazia sentido às 2 da manhã. O Obsidian é melhor em tudo isso do que qualquer coisa pela qual você o trocaria, e é melhor porque não tem revisão, nem aprovação, nem plateia — exatamente as propriedades que o desqualificam para a outra categoria.&lt;/p&gt;
&lt;p&gt;Um vault que guarda só isso é um vault fazendo o seu trabalho.&lt;/p&gt;
&lt;h2 id=&quot;e-as-notas-que-são-metade-pensamento-metade-convenção&quot;&gt;E as notas que são metade pensamento, metade convenção?&lt;/h2&gt;
&lt;p&gt;O caso desconfortável de sempre, e o que trava as pessoas, porque a linha parece limpa até você encontrar uma nota real de duas mil palavras remoendo um assunto com uma decisão de verdade enterrada no fim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Divida, e é mais fácil do que parece.&lt;/strong&gt; O pensamento fica no vault. A afirmação sai, sozinha, como uma frase. Linke de volta, se quiser.&lt;/p&gt;
&lt;p&gt;O que você não pode fazer é mover a coisa inteira. Uma nota que é oitenta por cento tateio e vinte por cento decisão, sentada no repositório, ensina a um agente que as convenções do seu time são provisórias — e um agente que acha que uma regra é provisória vai negociar com ela na primeira vez em que a regra for inconveniente. Deixar a coisa inteira no vault tem a falha oposta: os vinte por cento de que as outras pessoas precisam ficam invisíveis, indistinguíveis da divagação ao redor.&lt;/p&gt;
&lt;p&gt;O teste para saber se uma nota está pronta: &lt;strong&gt;você consegue extrair uma frase que comece com “a gente faz” ou “a gente não faz”?&lt;/strong&gt; Se não, ainda não há nada para mover, e a nota continua fazendo o seu trabalho onde está.&lt;/p&gt;
&lt;h2 id=&quot;onde-as-notas-que-saem-devem-morar&quot;&gt;Onde as notas que saem devem morar?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;No repositório que elas descrevem.&lt;/strong&gt; Não num wiki, não numa segunda ferramenta: no repo, revisadas no mesmo pull request que o código de que falam.&lt;/p&gt;
&lt;p&gt;Essa colocação é o que faz o trabalho. Uma nota no repo é lida no momento em que alguém muda a coisa que ela descreve, porque ela está no diff. Uma nota num wiki é lida quando alguém vai procurar, que é o modo de falha que você está deixando para trás.&lt;/p&gt;
&lt;p&gt;Isso também significa que a nota é revisada como código. Alguém aprova. Alguém responde por ela. Dois engenheiros não conseguem manter duas versões contraditórias sem que uma delas apareça num diff.&lt;/p&gt;
&lt;h2 id=&quot;como-é-uma-nota-depois-de-sair&quot;&gt;Como é uma nota depois de sair?&lt;/h2&gt;
&lt;p&gt;O formato importa menos do que quatro propriedades, e cada uma responde a um jeito pelo qual a versão do vault falhava:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uma afirmação por nota.&lt;/strong&gt; &lt;em&gt;“A gente faz migrations em duas etapas”&lt;/em&gt; é uma nota. &lt;em&gt;“Notas sobre o nosso backend”&lt;/em&gt; é uma pasta usando o nome de uma nota, e nada lá dentro pode ser confirmado, contradito ou arquivado de forma independente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ela diz de onde veio.&lt;/strong&gt; A decisão, o incidente, o pull request. Uma afirmação que você não consegue rastrear é uma afirmação que você não consegue pesar, e mover uma afirmação irrastreável para o repositório realoca o problema em vez de resolvê-lo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ela diz o que foi descartado.&lt;/strong&gt; A conclusão sem o raciocínio é desfeita na primeira vez em que a conclusão for inconveniente — normalmente por um agente, alegremente, num diff que parece uma simplificação.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No presente, e específica o bastante para poder estar errada.&lt;/strong&gt; &lt;em&gt;“Cuidado com migrations”&lt;/em&gt; não é uma nota, é um estado de espírito. Ninguém consegue agir sobre ela e ninguém jamais conseguirá provar que ela venceu.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E curta. A razão pela qual páginas de wiki não são lidas é que elas têm duas mil palavras quando a afirmação é uma linha, e &lt;strong&gt;uma nota que ninguém lê é uma nota que não existe&lt;/strong&gt; — que é o mesmo desfecho de deixá-la no vault, depois de mais trabalho.&lt;/p&gt;
&lt;h2 id=&quot;o-que-isto-não-resolve&quot;&gt;O que isto não resolve?&lt;/h2&gt;
&lt;p&gt;Mover notas para o repo resolve descoberta e revisão. &lt;strong&gt;Não resolve o apodrecimento&lt;/strong&gt;, e qualquer post que dissesse o contrário estaria vendendo alguma coisa para você.&lt;/p&gt;
&lt;p&gt;Uma nota num repositório vence exatamente na mesma velocidade que uma nota num vault. O que muda o apodrecimento não é o lugar, é um gatilho — algo que force o conhecimento a ser escrito enquanto a pessoa ainda lembra o porquê, e algo que permita tirar uma nota errada por um mecanismo, e não pela memória de alguém.&lt;/p&gt;
&lt;p&gt;Essas são as duas propriedades a procurar no que quer que você use, e são as duas sobre as quais o CommitCycle constrói: o conhecimento é alimentado no fechamento de uma unidade de trabalho, uma linha por vez, enquanto o motivo ainda está fresco; e &lt;code&gt;archived&lt;/code&gt; é um estado real, que é o que permite ao conjunto encolher em vez de só ficar mais confiante.&lt;/p&gt;
&lt;h2 id=&quot;como-eu-começo-sem-uma-migração&quot;&gt;Como eu começo sem uma migração?&lt;/h2&gt;
&lt;p&gt;Não migre. Migrações de conhecimento falham pela mesma razão que migrações de qualquer coisa falham — o esforço vem na frente e o retorno fica difuso.&lt;/p&gt;
&lt;p&gt;Em vez disso: &lt;strong&gt;na próxima vez que você escrever uma nota da qual outras pessoas dependeriam, escreva no repo em vez de no vault.&lt;/strong&gt; Depois a seguinte. O vault para de crescer na categoria que dói, e o conjunto que importa começa a se acumular no lugar onde é revisado. Nada é movido e nada é perdido.&lt;/p&gt;
&lt;p&gt;Para as notas cujos leitores são agentes e não pessoas, o destino tem um formato: &lt;a href=&quot;https://commitcycle.com/pt-br/insights/agent-skills-guide/&quot;&gt;uma skill&lt;/a&gt; é uma pasta no repositório que é carregada quando fica relevante e ignorada quando não fica, que é a coisa mais próxima de uma nota de vault que um agente consegue de fato usar.&lt;/p&gt;
&lt;p&gt;Depois de algumas semanas, o que continuar no vault e continuar sustentando peso é uma lista curta, e a essa altura você vai saber exatamente quais notas estão nela.&lt;/p&gt;
&lt;h2 id=&quot;como-eu-sei-que-está-funcionando&quot;&gt;Como eu sei que está funcionando?&lt;/h2&gt;
&lt;p&gt;Quatro sinais, mais ou menos na ordem em que aparecem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Você para de reexplicar a mesma coisa a cada sessão nova.&lt;/strong&gt; Este chega primeiro e é o mais imediatamente satisfatório.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alguém corrige uma nota durante um code review.&lt;/strong&gt; Isso é a colocação dando retorno: significa que a nota foi lida no momento em que a coisa que ela descreve estava sendo mudada, que é a razão inteira de ela ter ido para o repositório.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um agente cita uma delas de volta para você&lt;/strong&gt; — propondo algo e nomeando a nota de onde aquilo veio, em vez de propor algo plausível.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alguém arquiva uma.&lt;/strong&gt; Este é o sinal de verdade, e é o que demora mais. Um conjunto que só cresceu está sendo acumulado, não mantido, e vai acabar exatamente onde o vault estava: mais confiante a cada mês e menos exato.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O contrassinal é o espelho desse último. Se as notas do repositório crescem e nada nunca foi removido, você reconstruiu o vault com cerimônia extra, e o vencimento está a caminho.&lt;/p&gt;
&lt;h2 id=&quot;onde-o-commitcycle-está-de-verdade&quot;&gt;Onde o CommitCycle está de verdade&lt;/h2&gt;
&lt;p&gt;Vale dizer com clareza, porque o ponto deste post é uma linha que você pode aplicar com ou sem a gente: o enforcement se instala hoje como plugin, e o pacote &lt;code&gt;commitcycle&lt;/code&gt; do npm instala a CLI ao lado dele. O board hospedado é só por convite enquanto isto é pequeno.&lt;/p&gt;
&lt;p&gt;Então pegue a linha e use. Não custa nada, se aplica às ferramentas que você já tem, e o argumento por baixo dela está &lt;a href=&quot;https://commitcycle.com/pt-br/insights/obsidian-ai-agent-knowledge-base/&quot;&gt;no post anterior&lt;/a&gt; se você quiser conferir o raciocínio antes de confiar na conclusão.&lt;/p&gt;
</content:encoded></item><item><title>Seu vault do Obsidian não pode ser a base de conhecimento dos seus agentes de IA</title><link>https://commitcycle.com/pt-br/insights/obsidian-ai-agent-knowledge-base/</link><guid isPermaLink="true">https://commitcycle.com/pt-br/insights/obsidian-ai-agent-knowledge-base/</guid><description>O Obsidian é uma ferramenta de pensar, de uma pessoa só. Agentes precisam de conhecimento compartilhado, citado e atual — três coisas que um vault não é.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Um vault do Obsidian falha como base de conhecimento para agentes de IA por três razões estruturais: &lt;strong&gt;ele é privado de uma máquina, suas afirmações não trazem citações, e nada avisa quando uma nota deixou de ser verdade.&lt;/strong&gt; Agentes leem o que recebem e não têm como distinguir uma nota atual de outra que venceu três sprints atrás — então a resposta confiante e errada e a certa chegam com a mesma cara.&lt;/p&gt;
&lt;p&gt;Isto não é uma crítica ao Obsidian. Ele é muito bom no trabalho para o qual foi feito, que é uma pessoa pensando. A falha é um erro de categoria: uma ferramenta pessoal de pensamento sendo cobrada como fonte de verdade compartilhada.&lt;/p&gt;
&lt;h2 id=&quot;agentes-conseguem-ler-um-vault-do-obsidian&quot;&gt;Agentes conseguem ler um vault do Obsidian?&lt;/h2&gt;
&lt;p&gt;Conseguem, e vale esclarecer isso primeiro porque é onde a conversa costuma começar. Um vault é uma pasta de markdown puro. Qualquer agente com acesso a arquivos lê sem cerimônia, e existem servidores MCP que ligam um deles numa tarde.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O acesso nunca foi o problema.&lt;/strong&gt; Ler e confiar são operações diferentes, e um vault não carrega nenhum sinal que as separe. Uma nota escrita semana passada e uma nota que deixou de ser verdade em 2024 são o mesmo tipo de objeto, na mesma pasta, com a mesma autoridade. Quem lê o próprio vault desconta automaticamente — &lt;em&gt;ah, essa é velha&lt;/em&gt; — usando conhecimento que não está em lugar nenhum do arquivo. Um agente não tem com o que descontar.&lt;/p&gt;
&lt;p&gt;Então a metade fácil é resolvida, a metade difícil passa despercebida, e o arranjo parece estar funcionando até o momento em que ele age com toda a confiança sobre algo que já tinha vencido.&lt;/p&gt;
&lt;h2 id=&quot;as-três-falhas-na-ordem-do-que-custam&quot;&gt;As três falhas, na ordem do que custam&lt;/h2&gt;
&lt;h3 id=&quot;1-é-privado-então-o-conhecimento-é-por-pessoa&quot;&gt;1. É privado, então o conhecimento é por pessoa&lt;/h3&gt;
&lt;p&gt;Um vault mora num notebook. Sincronize e você tem uma pasta compartilhada, não conhecimento compartilhado — porque o vault não tem noção de revisão. Ninguém aprova uma nota. Ninguém responde por ela. Dois engenheiros mantêm dois vaults, cada um certo sobre coisas diferentes, e o agente fica com o vault de quem estiver operando.&lt;/p&gt;
&lt;p&gt;O sintoma é fácil de reconhecer: &lt;strong&gt;a mesma pergunta recebe duas respostas dependendo de quem perguntou ao agente.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-as-afirmações-não-têm-procedência&quot;&gt;2. As afirmações não têm procedência&lt;/h3&gt;
&lt;p&gt;Uma nota diz “a gente faz migrations em duas etapas.” Isso é uma decisão que alguém tomou, a observação de um incidente, ou algo em que um colega acreditava em 2024? A nota não diz, e depois de alguns meses ninguém lembra.&lt;/p&gt;
&lt;p&gt;Para um leitor humano isso é atrito. Para um agente é fatal, porque ele não consegue pesar uma afirmação que não consegue rastrear. Ele vai seguir uma nota vencida exatamente com a mesma confiança com que segue uma correta.&lt;/p&gt;
&lt;h3 id=&quot;3-nada-marca-uma-nota-como-vencida&quot;&gt;3. Nada marca uma nota como vencida&lt;/h3&gt;
&lt;p&gt;Esta é a que faz mais estrago em silêncio. Um vault não tem estado de morte. As notas se acumulam, e o único mecanismo para tirar uma errada é alguém lembrar que ela está errada — o que falha com regularidade, porque &lt;strong&gt;quem sabe que a nota está vencida não é quem está lendo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O resultado é um corpo de notas que cresce monotonicamente mais confiante e menos exato.&lt;/p&gt;
&lt;h2 id=&quot;o-que-a-documentação-para-agentes-precisa-ser&quot;&gt;O que a documentação para agentes precisa ser?&lt;/h2&gt;
&lt;p&gt;Cada propriedade abaixo existe por causa de um jeito específico pelo qual os vaults falham:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;A falha que ela responde&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mora no repositório&lt;/td&gt;
&lt;td&gt;Revisada como código, não sincronizada como uma pasta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cita uma decisão, uma task ou um arquivo&lt;/td&gt;
&lt;td&gt;Uma afirmação que você não rastreia é uma que você não pesa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escrita quando o trabalho fecha&lt;/td&gt;
&lt;td&gt;Não “quando alguém lembrar”, que é nunca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tem um estado de arquivada&lt;/td&gt;
&lt;td&gt;Uma nota errada precisa poder sair por algo que não seja memória&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carregada pelo que a task declara&lt;/td&gt;
&lt;td&gt;Cinquenta notas não são contexto, são ruído&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Essa última linha é a que a maioria das ferramentas ignora. Entregar uma base de conhecimento inteira a um agente não é engenharia de contexto; é um prompt maior. O que uma task precisa é do subconjunto relevante para &lt;em&gt;aquela&lt;/em&gt; task, escolhido por algo que a própria task declarou.&lt;/p&gt;
&lt;h2 id=&quot;por-que-não-dar-o-vault-inteiro-para-o-agente&quot;&gt;Por que não dar o vault inteiro para o agente?&lt;/h2&gt;
&lt;p&gt;O movimento óbvio, e ele falha de três jeitos específicos:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Volume não é contexto.&lt;/strong&gt; Quatrocentas notas num prompt significam que as três relevantes ficam diluídas entre trezentas e noventa e sete que não são. Isso é um prompt maior, não um embasamento melhor, e custa exatidão em vez de comprá-la.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nada diz quais notas valem aqui.&lt;/strong&gt; Os links de um vault codificam &lt;em&gt;associação&lt;/em&gt; — isto me lembrou daquilo — não &lt;em&gt;aplicabilidade à task que está na sua frente&lt;/em&gt;. São relações diferentes, e só uma delas serve para escolher.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contradições não têm desempate.&lt;/strong&gt; Duas notas discordam sobre como se faz deploy. Nada no vault registra qual venceu, porque a vencedora foi decidida numa conversa. O agente resolve escolhendo a que mais se parece com o prompt, e relata o resultado com a mesma confiança nos dois casos.&lt;/p&gt;
&lt;p&gt;O desfecho é pior do que um arquivo curto e curado teria sido: uma resposta bem escrita, aparentemente bem fundamentada, e errada.&lt;/p&gt;
&lt;h2 id=&quot;rag-sobre-o-vault-resolve&quot;&gt;RAG sobre o vault resolve?&lt;/h2&gt;
&lt;p&gt;Em parte, e vale ser preciso sobre qual parte, porque é a correção mais proposta.&lt;/p&gt;
&lt;p&gt;A recuperação resolve a &lt;strong&gt;seleção&lt;/strong&gt;. Isso é genuíno: transforma “o agente leu quatrocentas notas” em “o agente leu as quatro mais próximas”, que é uma melhora de verdade e o incômodo que mais se sente.&lt;/p&gt;
&lt;p&gt;Ela não toca em &lt;strong&gt;procedência&lt;/strong&gt; nem em &lt;strong&gt;validade&lt;/strong&gt;, e na validade pende levemente para o lado errado. A recuperação traz o que está textualmente mais perto da pergunta, e uma nota vencida escrita com segurança — “a gente faz migrations em duas etapas” — costuma ser a coisa mais próxima de uma pergunta sobre migrations. A nota correta pode ser mais nova, mais cheia de ressalvas e escrita menos parecida com a pergunta. Embeddings não têm opinião sobre datas nem sobre verdade; eles ordenam por similaridade.&lt;/p&gt;
&lt;p&gt;Então RAG promove o problema de &lt;em&gt;o agente leu tudo e não sabia o que estava valendo&lt;/em&gt; para &lt;em&gt;o agente leu as quatro coisas mais relevantes e não sabia o que estava valendo&lt;/em&gt;. Melhor, e não a correção.&lt;/p&gt;
&lt;h2 id=&quot;e-o-notion-o-confluence-ou-um-wiki&quot;&gt;E o Notion, o Confluence ou um wiki?&lt;/h2&gt;
&lt;p&gt;Eles respondem a uma das três falhas com clareza e deixam as outras duas mais ou menos onde estavam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compartilhado: sim.&lt;/strong&gt; Este é o ganho real, e não é pouco — um corpo de notas, muitos leitores, acabou o “a mesma pergunta recebe duas respostas dependendo de qual vault o agente leu”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Procedência: não.&lt;/strong&gt; Uma página de wiki raramente diz de qual decisão veio ou qual incidente a produziu, pela mesma razão que uma nota de vault não diz: quem escreveu sabia, então anotar parecia redundante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validade: discutivelmente pior.&lt;/strong&gt; As notas ruins de um vault pelo menos estão enterradas. As de um wiki estão indexadas, são buscáveis e linkadas de outras quatro páginas, então a escala torna uma afirmação vencida &lt;em&gt;mais&lt;/em&gt; fácil de achar, não menos, e nada na ferramenta a arquiva. O mecanismo para tirar uma página errada continua sendo alguém lembrar.&lt;/p&gt;
&lt;p&gt;E uma falha que o wiki acrescenta: &lt;strong&gt;ele não fica onde o código muda.&lt;/strong&gt; Uma nota no repositório está na sua frente, no diff, no momento em que você altera a coisa que ela descreve. Uma nota num wiki é lida quando alguém vai procurar — que é justamente o comportamento que você estava tentando corrigir.&lt;/p&gt;
&lt;h2 id=&quot;como-o-commitcycle-faz&quot;&gt;Como o CommitCycle faz&lt;/h2&gt;
&lt;p&gt;O CommitCycle chama isso de &lt;strong&gt;playbooks&lt;/strong&gt; — arquivos de conhecimento por topic e por projeto que moram no seu repositório. Quatro propriedades, cada uma respondendo a uma linha da tabela acima:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eles citam.&lt;/strong&gt; Toda afirmação aponta para uma decisão, uma task ou um arquivo. Um lint aponta a afirmação que não traz citação nenhuma — ele avisa, não bloqueia — e quando o &lt;code&gt;cycle seed&lt;/code&gt; redige playbooks, uma afirmação que cita um arquivo que não está no repositório é descartada, e um playbook que fica sem nada citado nem chega a ser criado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;São alimentados no fechamento do trabalho&lt;/strong&gt;, um item por vez, enquanto a pessoa ainda lembra o porquê. Não numa retro, não quando alguém lembrar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;São carregados pelos topics que a task declarou&lt;/strong&gt;, então uma task sobre o banco de dados não carrega as convenções do frontend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podem ser arquivados.&lt;/strong&gt; &lt;code&gt;archived&lt;/code&gt; é um estado real, e é isso que permite que o conjunto encolha.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E uma passada adversarial — &lt;code&gt;cycle challenge&lt;/code&gt; — foi feita para propor as práticas que o repositório visivelmente não tem, cada uma com uma fonte nomeada. Como o &lt;code&gt;cycle seed&lt;/code&gt;, ela precisa de um modelo configurado no board, e ainda não rodou contra um modelo de verdade. &lt;strong&gt;Você pode recusar, e a sua recusa fica registrada com os motivos.&lt;/strong&gt; “A gente se desvia disso de propósito, e eis o porquê” também é conhecimento, e é do tipo que os vaults nunca capturam porque ninguém escreve o que decidiu não fazer.&lt;/p&gt;
&lt;h3 id=&quot;a-parte-honesta&quot;&gt;A parte honesta&lt;/h3&gt;
&lt;p&gt;Aqui existe uma objeção real e ela merece resposta direta: “se você gerar um playbook a partir do meu repositório legado, isso não vai só codificar a minha bagunça?”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vai. Por design, só descrever codifica a bagunça — com recibos.&lt;/strong&gt; É por isso que o challenger existe: ele foi feito para propor o que falta no repo em vez de apenas descrever o que existe, e uma pessoa aceita ou recusa cada proposta. Não há aceitação automática, e um teste mantém esse caminho fechado.&lt;/p&gt;
&lt;h2 id=&quot;o-que-isto-não-substitui&quot;&gt;O que isto não substitui&lt;/h2&gt;
&lt;p&gt;Fique com o vault. Isto não é uma migração.&lt;/p&gt;
&lt;p&gt;O Obsidian continua melhor do que qualquer coisa aqui para pensar — para ideias pela metade, para conexões que você ainda não fez, para notas que são suas e têm permissão de estar erradas. &lt;strong&gt;O que sai dele é o subconjunto do qual outros leitores dependem para ser verdade.&lt;/strong&gt; Esse subconjunto sempre foi a parte que doía quando vencia, e nunca foi a parte que o Obsidian foi projetado para segurar.&lt;/p&gt;
&lt;p&gt;Uma linha útil de traçar: &lt;em&gt;se errar sobre esta nota levaria outra pessoa a errar junto, ela não pertence a um vault pessoal.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Para onde isso vai, no caso das notas que um agente deve ler, é &lt;a href=&quot;https://commitcycle.com/pt-br/insights/agent-skills-guide/&quot;&gt;uma skill no repositório&lt;/a&gt; — o mesmo markdown, mas versionado com o código que ele descreve e carregado só quando a task pede.&lt;/p&gt;
&lt;h2 id=&quot;onde-o-commitcycle-está-de-verdade&quot;&gt;Onde o CommitCycle está de verdade&lt;/h2&gt;
&lt;p&gt;O CommitCycle conduz o próprio desenvolvimento — o board, o gate, os audit records e os playbooks descritos acima estão em uso hoje no repositório dele. &lt;strong&gt;A metade de enforcement se instala como plugin do Claude Code; o pacote &lt;code&gt;commitcycle&lt;/code&gt; no npm coloca a CLI &lt;code&gt;cycle&lt;/code&gt; no seu PATH, sem o hook.&lt;/strong&gt; O board hospedado é só por convite enquanto isto é pequeno. A Phase 0 está medida e publicada com os seus limites.&lt;/p&gt;
&lt;p&gt;Então este post não está pedindo que você migre nada hoje. Ele faz um argumento que você pode avaliar pelo mérito, e se ele se sustentar, &lt;a href=&quot;https://commitcycle.com/pt-br/&quot;&gt;a waitlist&lt;/a&gt; é o próximo passo honesto. Se o argumento estiver errado, isso vale mais para nós do que um cadastro.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;O resto do produto está documentado por completo: &lt;a href=&quot;https://commitcycle.com/pt-br/agents-md/&quot;&gt;o bloco de contexto AGENTS.md&lt;/a&gt;, &lt;a href=&quot;https://commitcycle.com/pt-br/zones/&quot;&gt;as zones&lt;/a&gt; e &lt;a href=&quot;https://commitcycle.com/pt-br/audit-record/&quot;&gt;o audit record&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>