Hashline edits no Oh My OpenAgent: o que é, como funciona e quando vale ligar

O hashline edits é o recurso de edição ancorada em hash do Oh My OpenAgent, e ele vem desligado por padrão: você liga com hashline_edit: true no arquivo omo.jsonc. Ligado, ele substitui a tool Edit nativa por uma versão que trabalha com referências LINE#ID, onde LINE é o número da linha (base 1) e ID é um hash do conteúdo normalizado daquela linha. Se o arquivo mudou desde o Read, o hash não bate e a edição é rejeitada antes de aplicar, o que existe justamente pra evitar alucinação de linha e erro de stale-line
Fala aí, beleza? Tem um recurso de edição ancorada em hash dentro do Oh My OpenAgent que está desligado na tua máquina agora mesmo, e provavelmente tu nem sabia que ele existe
O projeto é um harness/plugin de agente de código mantido no GitHub por code-yeongyu (YeonGyu-Kim), no repositório oh-my-openagent
Ele é distribuído em três edições do mesmo produto: dois plugins que carregam dentro de um host que tu já roda (OpenCode e Codex CLI) e uma edição standalone
E o hashline edits é opt-in, ou seja: vem desabilitado por padrão e só liga se você pedir
Esse post aqui é curto e específico, pra quem JÁ usa o produto e quer fuçar o que vem desligado de fábrica =)
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Como funciona o formato LINE#ID por baixo do capô
A ideia é simples de entender: em vez de o agente apontar "linha 42", ele aponta pra uma referência no formato LINE#ID
LINE é o número da linha (base 1, começando em 1 mesmo)
ID é um hash derivado do conteúdo normalizado daquela linha
E aí? Cada linha que o agente lê volta marcada com esse hash de conteúdo
Na hora de editar, o hash é conferido contra o estado atual do arquivo. Se o conteúdo mudou desde o Read, o hash não bate e a edição é rejeitada antes de corromper o arquivo
Se você conhece checksum de download, é a mesma vibe: o número sozinho não prova nada, o hash prova que é aquilo mesmo que você leu
Junto com o recurso vem um hook companheiro, o hashline-read-enhancer, ativado automaticamente quando você liga a chave. A função dele é anotar a saída do Read com os marcadores LINE#ID, que é o que alimenta a edit tool depois
O que muda na edição de código quando você liga
Quando ligado, o hashline edits substitui a ferramenta Edit built-in por uma versão hash-anchored
Na prática, dois incômodos clássicos da edição por agente saem de cena
O primeiro: some a necessidade de reproduzir espaçamento exato. Aquele drama de o agente precisar acertar o whitespace na unha pra casar o trecho antigo, tchau
O segundo: caem os erros de stale-line, porque a edição é validada contra o estado atual do arquivo, e não contra a foto que o agente tirou três minutos atrás
O objetivo declarado do recurso é justamente esse: evitar alucinação de linha
Se o agente inventar um número de linha, a edição é REJEITADA em vez de aplicada. E olha que diferença absurda isso faz: falhar alto é muito melhor do que escrever no lugar errado e você descobrir dois commits depois
Só que vamos ser honestos aqui: isso é uma troca de comportamento da tool Edit, não mágica. Não é um modelo mais esperto, é uma validação a mais no caminho
Quando vale ligar o hashline edits (e quando não faz diferença)
Os cenários onde o mecanismo brilha saem direto do que ele faz
- Arquivo que muda entre o Read e o Edit: você editando o mesmo arquivo junto com o agente, formatter ou linter rodando no salvamento, outro processo tocando o arquivo. É exatamente o caso que a validação por hash pega
- Arquivos grandes, onde a chance de o agente errar a linha cresce e o erro passa despercebido
- Código com indentação sensível (Python, YAML e afins), onde não precisar reproduzir whitespace exato tira um pé da armadilha
Agora o contraponto honesto
Se suas sessões são curtas, em arquivo pequeno e sem edição concorrente, o ganho tende a ser pequeno. Não tem drama nenhum em continuar com a Edit padrão
E isso ajuda a explicar por que quase ninguém liga: recurso que vem desligado só é ligado por quem sente a dor que ele resolve
É a mesma lógica de manter só o que você realmente usa quando o assunto é enxugar custo de VPS desligando recursos: default ligado pra todo mundo cobra um preço de quem não precisa
Como habilitar o hashline edits no omo.jsonc
A configuração unificada do harness mora no arquivo omo.jsonc, e o passo a passo é bem curtinho
- Abra a configuração certa. A camada de usuário fica em
~/.omo/omo.jsonc(menor precedência) e a camada de projeto em.omo/omo.jsonc, com o arquivo mais próximo vencendo
- Adicione a chave
hashline_editcom valortrue. No JSON schema ela é um booleano, então é isso e mais nada
{
// troca a Edit built-in pela edit tool ancorada em hash
"hashline_edit": true
}
Nota de formato: os arquivos aceitam JSONC, com comentários e trailing commas permitidos, então esse // aí em cima não vai quebrar nada
- Opcional: desligue só o hook companheiro. Se por algum motivo você quiser a edit tool ancorada em hash sem o
hashline-read-enhanceranotando a saída do Read, a chavedisabled_hooksdesliga o hook companheiro sem desligar o resto
O erro comum desse passo a passo? Editar arquivo legado
Os arquivos legados oh-my-openagent.json e oh-my-openagent.jsonc, junto com oh-my-opencode.json e oh-my-opencode.jsonc, não são mais lidos em runtime: eles são importados uma vez pelo motor de migração e só. Se você mexeu ali e "não aconteceu nada", provavelmente é isso. Tome cuidado!
Instalação: qual edição você precisa ter antes
Se você caiu aqui sem ter o produto instalado, se liga na parte chata primeiro
O recurso aparece listado na Ultimate Edition (o omo para OpenCode), na condição de opt-in
# Ultimate Edition (OpenCode)
bunx oh-my-openagent install
# Light Edition (Codex CLI)
npx lazycodex-ai install
# edição standalone, canal beta
npm i -g omo-ai@beta
Dois avisos que a documentação faz questão de dar
O primeiro: não use bunx omo nem npx omo. Aqui a confusão é de NOME DE PACOTE: no npm, omo é um pacote diferente, de outro autor, sem relação nenhuma com esse projeto, e é pra ele que esses comandos resolvem
E atenção pra não misturar as coisas: uma coisa é o pacote omo do npm (de terceiro), outra é o bin omo, o comando. Esse bin foi removido dos pacotes oh-my-openagent/oh-my-opencode nesse major, e hoje o comando vem da edição standalone, que se instala pelo pacote omo-ai em canal beta
O segundo aviso: instalação global não é oficialmente suportada pros plugins (nada de npm install -g, bun add -g ou bun install -g), porque é plugin e ele precisa resolver de onde o OpenCode/Codex carrega plugins. Rode cada edição pelo runner do bloco acima (bunx na Ultimate, npx na Light) em vez de instalar global
Vale a pena ligar? O próximo passo
Meu veredito aqui é bem direto: é um opt-in de baixo custo pra experimentar
A chave é um booleano, então ligar é uma linha e voltar atrás é apagar essa linha. Não tem migração, não tem cerimônia, não tem caminho sem volta
O próximo passo concreto: coloque hashline_edit: true na camada de projeto (.omo/omo.jsonc) de UM repositório só, de preferência aquele com arquivo grande e formatter agressivo
Rode uma sessão de edição real e compare com o que você já conhece do comportamento padrão
Se ajudar, promove pra camada de usuário. Se atrapalhar, remove a chave e segue a vida
É recurso desligado por padrão, então o autor também não está prometendo bala de prata: quem decide é o teu fluxo de trabalho
Até o próximo post! 🙂
Perguntas frequentes
Quem mantém o Oh My OpenAgent e onde fica o repositório?
O projeto é mantido por code-yeongyu (YeonGyu-Kim) e o código fica aberto no GitHub, no repositório oh-my-openagent. É de lá que saem as três edições do produto: os plugins para OpenCode e Codex CLI, e a edição standalone
O hashline edits funciona também na Light Edition (Codex CLI)?
A documentação lista esse recurso na Ultimate Edition, o omo para OpenCode, sempre como opt-in via hashline_edit: true. Não há menção dele pra Light Edition (Codex CLI), que é instalada por um pacote separado, o lazycodex-ai
Preciso reinstalar o Oh My OpenAgent depois de ligar o hashline_edit?
Não. A ativação é só uma linha de configuração no omo.jsonc, com hashline_edit: true. Assim que você salva o arquivo na camada certa (usuário ou projeto), o recurso liga junto com o hook companheiro hashline-read-enhancer
Por que minha edição em omo.jsonc não teve efeito nenhum?
O erro mais comum é mexer no arquivo errado. Os legados oh-my-openagent.json, oh-my-openagent.jsonc, oh-my-opencode.json e oh-my-opencode.jsonc não são mais lidos em runtime, eles só são importados uma vez pelo motor de migração. A configuração que vale de verdade é o omo.jsonc, em ~/.omo/omo.jsonc pro usuário ou .omo/omo.jsonc pro projeto, com o arquivo mais próximo vencendo
Dá pra manter o hashline edits ligado sem o hook hashline-read-enhancer?
Dá sim. A chave disabled_hooks desliga só o hook companheiro, sem desligar o resto do recurso. Só que aí a saída do Read deixa de vir anotada com os marcadores LINE#ID, que é o que alimenta a edit tool
Posso usar bunx omo pra instalar o Oh My OpenAgent?
Não, e a própria documentação avisa sobre isso. Como NOME DE PACOTE no npm, omo é um pacote de terceiro, sem relação com o projeto, e é pra ele que bunx omo ou npx omo resolvem. Coisa diferente é o bin omo, o comando: ele saiu dos pacotes oh-my-openagent/oh-my-opencode nesse major e hoje vem da edição standalone, instalada com npm i -g omo-ai@beta no canal beta. A instalação correta da Ultimate Edition segue sendo bunx oh-my-openagent install
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Oh My OpenAgent: quais casos de uso reais ele resolve?
Oh My OpenAgent promete resolver lint em massa, migrações grandes e tarefas longas. Veja os casos de uso reais divulgados pelo projeto e o que esperar.
MCPs embutidos no Oh My OpenAgent: vale a pena em vez de configurar servidor por servidor?
Os MCPs embutidos no Oh My OpenAgent trocam a configuração manual do opencode.json por 5 servidores prontos. Veja o que muda e quando vale a pena.
Quais são os 11 agents do Oh My OpenAgent e o que cada um faz?
Os agents do Oh My OpenAgent são 11 e já vêm prontos na Ultimate Edition: Sisyphus, Atlas, Prometheus, Oracle e mais. Veja o que cada um faz.
