Pular para o conteúdo
claudemods

md-preview: pré-visualização de Markdown no Claude Code em um painel lateral

Os arquivos Markdown que o Claude edita, renderizados como no GitHub num painel ao lado do chat, com antes e depois.

Permissões

  • Lê arquivosPode ler arquivos e listar diretórios na sua máquina ($.fs.read / list / stat / exists).
  • Grava arquivosPode criar ou sobrescrever arquivos na sua máquina ($.fs.write).
  • Executa comandosPode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
  • Intercepta chamadas de ferramentasVê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
  • Altera a interfaceDesenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
  • Adiciona comandos/ferramentasRegistra novos comandos de barra ou ferramentas que você ou o Claude podem acionar ($.command.register / $.tool.register).
testado com
v2.1.291
último teste
requer
Claude Code ≥ 2.1.287
superfícies
painel, notificação

Instale dentro do Claude Code:

/plugin install md-preview --marketplace hamzafer/claude-code-mods
Todas as opções de instalação ↓

O que este mod faz?

O md-preview é uma pré-visualização de Markdown no Claude Code, um mod da comunidade criado por Hamza Zafar (hamzafer), parte da coleção claude-code-mods dele. Quando o Claude escreve ou edita um arquivo .md, .mdx ou .markdown, um toast avisa README.md changed · /md to preview, e o /md abre um painel ao lado do chat que mostra o arquivo renderizado do jeito que o GitHub o mostra.

O painel tem botões para Prev, Next, Before, Render, Text, Browser e Close, cada um com uma tecla de atalho (p, n, b, r, t, o, q). As teclas n e p percorrem os arquivos Markdown alterados nesta sessão. b mostra o arquivo como ele era antes da primeira edição do turno ao lado do texto atual, e os blocos alterados pela última edição ganham uma barra verde. /md compare <a> <b> coloca dois arquivos lado a lado, e o ou /md open abre a mesma página no seu próprio navegador.

A forma como a página é desenhada depende da sua configuração. Num terminal com imagens (Ghostty, iTerm2, WezTerm ou kitty, fora do tmux) e com o Chrome ou um Chromium instalado, a página é desenhada em PNG e exibida no painel. Caso contrário, o painel mostra uma visualização em texto com títulos, listas, tabelas e blocos de código estilizados com as cores do terminal. O manifesto não indica uma versão mínima do Claude Code.

Demonstração

A gravação inicia o Claude Code com o mod carregado no pequeno projeto de demonstração e executa /md README.md. O comando responde com as dicas de teclas (n/p: next/previous · b: before | after · o: browser · r: render again · t: page/text · q: close), e um painel com borda se abre acima do prompt. A primeira linha tem os botões, a segunda mostra README.md 1/1, e abaixo dela o README do projeto aparece na visualização em texto: o título demo-app e a linha "A tiny demo app. Run it with npm start." com o trecho de código colorido. O terminal da demonstração não consegue exibir imagens, então ele mostra a visualização em texto em vez da página renderizada.

Instalação

Use qualquer um dos métodos do bloco de instalação; eles instalam direto do marketplace do próprio autor. Depois de instalar, execute /reload-plugins ou inicie uma nova sessão e então use /md.

$ install md-preview

Requer Claude Code ≥ 2.1.287

Instala a partir do marketplace do autor: hamzafer/claude-code-mods

  1. 1.Uma linha, dentro do Claude Code

    /plugin install md-preview --marketplace hamzafer/claude-code-mods

    Cole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.

  2. 2.Pelo seu shell

    claude plugin marketplace add hamzafer/claude-code-mods
    claude plugin install md-preview@claude-code-mods

    Depois execute /reload-plugins em qualquer sessão que já esteja aberta.

  3. 3.Experimente sem instalar

    git clone https://github.com/hamzafer/claude-code-mods
    claude --plugin-dir ./claude-code-mods/mods/md-preview

    Carrega o mod só para uma sessão. Nada é adicionado às suas configurações.

Como funciona

O mod é um único módulo de function hooks, hooks/register.tsx, mais um pequeno parser de Markdown (hooks/md.ts) e um gerador de páginas HTML (hooks/page.ts). Um hook tool.call lê o arquivo antes de uma chamada Write, Edit ou MultiEdit num caminho de Markdown, deixa a chamada rodar e devolve o resultado sem alterações. Este é o renderizador do GitHub, de hooks/register.tsx:

const repo = await repoOf($, dir)
if (!repo) return null // not in a GitHub repo: the Markdown stays on this machine
const r = await $.process
  .run(['gh', 'api', '-X', 'POST', '/markdown', '--input', '-'], { stdin: JSON.stringify({ text: md, mode: 'markdown', context: repo }), timeoutMs: GH_TIMEOUT_MS })
  .catch(() => null)

repoOf pergunta ao git remote -v por um remote do GitHub. Se o gh falhar, a renderização pelo GitHub fica pausada por um minuto e o renderizador embutido é usado. O HTML é gravado em $TMPDIR/md-preview/ e desenhado com o Chrome headless por meio de um script sh curto, um desenho por vez, com os desenhos em cache por conteúdo. Os arquivos que o Claude editou são desenhados em segundo plano quando o turno termina, então o /md normalmente abre numa página que já está desenhada.

Personalize

Não há opções no /config. Tudo é feito com o comando e as teclas do painel: /md abre o arquivo mais recente, /md <path> abre qualquer arquivo Markdown, /md compare <a> <b> compara dois e /md open abre o navegador. Se outro comando já usar o nome /md, o mod registra /mdview no lugar. Para mudar limites como a lista de caminhos do Chrome (CHROMES), o número de arquivos guardados (MAX_FILES) ou o tamanho do cache (CACHE_SIZE), edite as constantes no início do register.tsx.

Permissões e segurança

Lemos todos os arquivos que o plugin pode executar antes de rodá-lo: plugin.json, hooks/hooks.json, hooks/register.tsx, hooks/md.ts, hooks/page.ts, as declarações de tipos e os testes. Não há package.json, script de instalação, binário nem código empacotado, e não encontramos caracteres ocultos ou de largura zero.

  • Rede: nenhuma requisição direta. Com um remote do GitHub e um gh autenticado, o texto Markdown é enviado para a API /markdown do GitHub via gh api (register.tsx:592-594), sem nenhum consentimento adicional. Arquivos acima de cerca de 390 KB são renderizados localmente. A página renderizada é carregada pelo Chrome headless com uma Content-Security-Policy que permite imagens de qualquer host (page.ts:97), então imagens remotas num arquivo Markdown são baixadas quando a página é desenhada. Scripts no Markdown não podem rodar.
  • Processos: git ls-files e git remote -v (register.tsx:386, 607), gh api (593), sh -c com um script fixo que inicia o Chrome headless e encerra apenas o Chrome que ele iniciou (49-67, 675), e open ou xdg-open para o botão do navegador (788).
  • Gravação de arquivos: apenas $TMPDIR/md-preview/ (HTML da página, partes em PNG e um perfil descartável do Chrome). Nada em ~/.claude, configurações, arquivos de shell, LaunchAgents ou git hooks.
  • Leitura de arquivos: os arquivos Markdown que o Claude edita, os arquivos que você indica e, antes do primeiro comando de shell de um turno, até 200 arquivos Markdown do repositório obtidos de git ls-files.
  • Ambiente: HOME, TMPDIR, TMUX, TERM_PROGRAM e TERM. Eles não são enviados a lugar nenhum.
  • Daemons, telemetria, injeção de prompt: nenhum. Ele não adiciona texto aos prompts nem aos resultados das ferramentas.
  • Bloqueio (gating): o hook tool.call é um observador. Ele espera a chamada e devolve o resultado sem alterações. O validate o aponta como um hook de bloqueio sem .catch; a primeira chamada de shell de um turno espera o snapshot do Markdown, que apenas lê arquivos.
  • Requisitos externos: Chrome, Chromium, Edge ou Brave para a visualização renderizada, um terminal com suporte a imagens e, opcionalmente, o gh. Todos são opcionais; a visualização em texto é a alternativa.
  • Licença: MIT, com um arquivo LICENSE na raiz do repositório.

O claude plugin validate não relatou erros nem avisos, e os 26 testes do autor passaram no Claude Code 2.1.291.

Lê arquivos
Pode ler arquivos e listar diretórios na sua máquina ($.fs.read / list / stat / exists).
Grava arquivos
Pode criar ou sobrescrever arquivos na sua máquina ($.fs.write).
Executa comandos
Pode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
Intercepta chamadas de ferramentas
Vê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
Altera a interface
Desenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
Adiciona comandos/ferramentas
Registra novos comandos de barra ou ferramentas que você ou o Claude podem acionar ($.command.register / $.tool.register).

Compatibilidade e solução de problemas

Verificado com o Claude Code 2.1.291 no macOS (validate, testes e a gravação). Se o painel não estiver como você espera:

  • /md é desconhecido: confira se o /plugin mostra o md-preview carregado, ou tente /mdview.
  • Você vê texto em vez de uma página: o seu terminal não consegue mostrar imagens, você está dentro do tmux ou nenhum Chrome foi encontrado. Pressione r depois de corrigir, ou t para alternar a visualização.
  • "Chrome could not draw the page": pressione r para tentar de novo. O mod não tenta de novo sozinho.
  • A mudança num arquivo não gera um toast: só caminhos de Markdown são acompanhados, e gravações feitas pelo shell só são percebidas num repositório git.
  • O painel diz built-in em vez de GitHub: o arquivo não está num repositório do GitHub, o gh não está autenticado ou o arquivo tem mais de cerca de 390 KB.

Perguntas frequentes

O md-preview envia o meu Markdown para algum lugar?
Só em um caso. Quando o arquivo está numa pasta cujo remote do git fica no GitHub e a GitHub CLI (gh) está autenticada, o mod envia o texto Markdown para a API /markdown do GitHub através do seu gh para renderizá-lo. Fora de um repositório do GitHub, ou quando o gh falha, é usado um renderizador embutido e nada sai da sua máquina pelo código do próprio mod.
Preciso do Chrome?
Só para a visualização da página renderizada. O mod procura o Google Chrome, o Chromium, o Edge ou o Brave em caminhos fixos e o usa em modo headless, com um perfil descartável próprio, para desenhar a página em PNG. Sem um navegador, ou num terminal que não consegue mostrar imagens, ele mostra uma visualização em texto.
Como pré-visualizo um arquivo que o Claude não editou?
Execute /md seguido de um caminho, por exemplo /md docs/guide.md. O arquivo precisa terminar em .md, .mdx ou .markdown. /md compare a.md b.md mostra dois arquivos lado a lado, e /md open abre a página no seu navegador.
Ele percebe Markdown escrito por um comando de shell?
Sim, num repositório git. Antes da primeira chamada de Bash ou PowerShell de um turno, ele tira um snapshot dos arquivos Markdown do repositório (até 200) e, no fim do turno, compara os dois, então uma mudança como cat > README.md também gera um toast.
Por que a demonstração mostra uma visualização em texto?
O terminal da demonstração não consegue exibir imagens, então o mod recorre à visualização em texto. Num terminal com suporte a imagens, como Ghostty, iTerm2, WezTerm ou kitty (fora do tmux), ele mostra a página renderizada.
Context Bar em execução no Claude CodeDestaque

Context Bar

A janela de contexto do Claude Code como uma barra empilhada acima do prompt, uma cor por categoria, com tokens.

  • acima do prompt
  • Altera a interface
  • Adiciona comandos/ferramentas
  • Armazena dados

testado com v2.1.291

Contador de chamadas de ferramentas em execução no Claude CodeDestaque

Contador de chamadas de ferramentas

Conta as chamadas de ferramentas do Claude por turno e por sessão, mostra o total junto ao spinner e adiciona /tally.

  • spinner
  • transcrição
  • status
  • Intercepta chamadas de ferramentas
  • Altera a interface
  • Adiciona comandos/ferramentas

testado com v2.1.310

Mais em Painéis e dashboards, Timers, tarefas e standups.