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
- código-fonte
- Hamza Zafar (hamzafer) (MIT)
Instale dentro do Claude Code:
/plugin install md-preview --marketplace hamzafer/claude-code-modsO 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.Uma linha, dentro do Claude Code
/plugin install md-preview --marketplace hamzafer/claude-code-modsCole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.
2.Pelo seu shell
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install md-preview@claude-code-modsDepois execute /reload-plugins em qualquer sessão que já esteja aberta.
3.Experimente sem instalar
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/md-previewCarrega 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
ghautenticado, o texto Markdown é enviado para a API/markdowndo GitHub viagh 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-filesegit remote -v(register.tsx:386,607),gh api(593),sh -ccom um script fixo que inicia o Chrome headless e encerra apenas o Chrome que ele iniciou (49-67,675), eopenouxdg-openpara 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_PROGRAMeTERM. 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. Ovalidateo 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/pluginmostra 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
rdepois de corrigir, outpara alternar a visualização. - "Chrome could not draw the page": pressione
rpara 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-inem vez deGitHub: o arquivo não está num repositório do GitHub, oghnã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.
# Mods relacionados
DestaqueContext 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
DestaqueContador 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