Duas novas ferramentas Showboat: Chartroom e datasette-showboat
Duas novas ferramentas Showboat: Chartroom e datasette-showboat
17 de fevereiro de 2026
Apresentei o Showboat há uma semana – minha ferramenta CLI que ajuda os agentes de codificação a criar documentos Markdown que demonstram o código que eles criaram. Tenho encontrado novas maneiras de usá-lo diariamente e acabei de lançar duas novas ferramentas para ajudar a tirar o melhor proveito do padrão Showboat. Chartroom é uma ferramenta de gráficos CLI que funciona bem com o Showboat, e o datasette-showboat permite que o novo recurso de publicação remota do Showboat envie documentos de forma incremental para uma instância do Datasette.
Publicação remota Showboat
Eu normalmente uso o Showboat no Claude Code para web (veja a nota desta manhã). Eu usei-o em vários projetos diferentes nos últimos dias, cada um deles com um prompt parecido com este:
Use "uvx showboat --help" to perform a very thorough investigation of what happens if you use the Python sqlite-chronicle and sqlite-history-json libraries against the same SQLite database table
Apenas dizendo a Claude Code para correr uvx showboat --help é suficiente para aprender como usar a ferramenta – o texto de ajuda foi projetado para funcionar como uma espécie de documento de habilidade ad-hoc.
O único problema dessa abordagem é que não posso ver o novo documento Showboat até que esteja finalizado. Tenho que esperar que Claude envie o documento, além das capturas de tela incorporadas, e envie-o para uma ramificação em meu repositório do GitHub – então posso visualizá-lo por meio da interface do GitHub.
Há algum tempo venho pensando que seria legal ter meu próprio servidor web remoto para o qual as instâncias do Claude possam enviar atualizações enquanto estão trabalhando. Então, esta manhã, percebi que o Showboat poderia ser o mecanismo ideal para configurar isso…
Showboat v0.6.0 adiciona um novo recurso “remoto”. É quase invisível para os usuários da própria ferramenta, sendo configurado por uma variável de ambiente.
Defina uma variável como esta:
export SHOWBOAT_REMOTE_URL=https://www.example.com/submit?token=xyz
E toda vez que você executa um showboat init ou showboat note ou showboat exec ou showboat image comando, os fragmentos do documento resultantes serão POSTados para esse endpoint da API, além do próprio arquivo Showboat Markdown ser atualizado.
Há detalhes completos no README do Showboat – é um formato de API muito simples, usando variáveis de formulário POST regulares ou um upload de formulário multipart para a imagem anexada ao showboat image.
dataset-showboat
É bastante simples construir um webapp para receber essas atualizações do Showboat, mas eu precisava de um que pudesse implantar facilmente e que funcionasse bem com o resto do meu ecossistema pessoal.
Então pedi a Claude Code que me escrevesse um plugin Datasette que pudesse funcionar como um endpoint remoto do Showboat. Na verdade, eu tinha esse prédio ao mesmo tempo que o recurso remoto Showboat, um ótimo exemplo de execução de agentes paralelos.
dataset-showboat é um plugin Datasette que adiciona um /-/showboat endpoint para Datasette para visualização de documentos e um /-/showboat/receive endpoint para receber atualizações do Showboat.
Esta é uma maneira muito rápida de experimentar:
uvx --with datasette-showboat --prerelease=allow \
datasette showboat.db --create \
-s plugins.datasette-showboat.database showboat \
-s plugins.datasette-showboat.token secret123 \
--root --secret cookie-secret-123
Clique no link entrar como root que aparece no console e navegue até http://127.0.0.1:8001/-/showboat para ver a interface.
Agora defina sua variável de ambiente para apontar para esta instância:
export SHOWBOAT_REMOTE_URL="http://127.0.0.1:8001/-/showboat/receive?token=secret123"
E execute o Showboat assim:
uvx showboat init demo.md "My first document"
Atualize essa página e você verá isto:

Clique no documento, inicie Claude Code ou Codex ou o agente de sua escolha e solicite:
Run 'uvx showboat --help' and then use showboat to add to the existing demo.md document with notes and exec and image to demonstrate the tool - fetch a placekitten for the image demo.
O init O comando atribui um UUID e um título e os envia para o Datasette.

O melhor disso é que funciona no Claude Code para web. Execute o plugin em um servidor em algum lugar (um exercício deixado para o leitor – eu uso Fly.io para hospedar o meu) e configure-o SHOWBOAT_REMOTE_URL variável de ambiente em seu ambiente Claude, sempre que você solicitar que ele use o Showboat, o documento criado será transmitido ao seu servidor e poderá ser visualizado em tempo real.
Eu desenvolvi Rodney, uma ferramenta de automação de navegador CLI, especificamente para trabalhar com Showboat. Torna mais fácil fazer com que um documento Showboat carregue páginas da web, interaja com elas por meio de cliques ou JavaScript injetado e capture capturas de tela para incorporar no documento Showboat e mostrar os efeitos.
Isso é extremamente útil para hackear interfaces da web usando Claude Code para web, especialmente quando combinado com o novo recurso de publicação remota. Só consegui fazer esse material funcionar esta manhã e já tive várias sessões em que Claude Code publicou capturas de tela de seu trabalho em andamento, sobre as quais pude fornecer feedback diretamente na sessão de Claude enquanto ainda estava funcionando.
Sala de cartas
Há alguns dias, tive outra ideia para ampliar o ecossistema do Showboat: e se os documentos do Showboat pudessem facilmente incluir cartas?
Às vezes, aciono o Claude Code para tarefas de análise de dados, muitas vezes solicitando que ele baixe um banco de dados SQLite e, em seguida, execute consultas nele para descobrir coisas interessantes a partir dos dados.
Com uma ferramenta CLI simples que produzia imagens PNG, eu poderia fazer com que Claude usasse o Showboat para criar um documento com gráficos incorporados para ajudar a ilustrar suas descobertas.
Sala de cartas é exatamente isso. É efetivamente um invólucro fino em torno da excelente biblioteca matplotlib Python, projetada para ser usada por agentes de codificação para criar gráficos que podem ser incorporados em documentos Showboat.
Veja como renderizar um gráfico de barras simples:
echo 'name,value
Alice,42
Bob,28
Charlie,35
Diana,51
Eve,19' | uvx chartroom bar --csv \
--title 'Sales by Person' --ylabel 'Sales'

Ele também pode criar gráficos de linhas, gráficos de barras, gráficos de dispersão e histogramas – como visto neste documento de demonstração que foi criado usando o Showboat.
Chartroom também pode gerar texto alternativo. Se você adicionar -f alt acima, será gerado o texto alternativo do gráfico em vez da imagem:
echo 'name,value
Alice,42
Bob,28
Charlie,35
Diana,51
Eve,19' | uvx chartroom bar --csv \
--title 'Sales by Person' --ylabel 'Sales' -f alt
Saídas:
Sales by Person. Bar chart of value by name — Alice: 42, Bob: 28, Charlie: 35, Diana: 51, Eve: 19
Ou você pode usar -f html ou -f markdown para obter a tag da imagem com texto alternativo diretamente:
!(Sales by Person. Bar chart of value by name — Alice: 42, Bob: 28, Charlie: 35, Diana: 51, Eve: 19)(/Users/simon/chart-7.png)
Adicionei suporte para imagens Markdown com texto alternativo ao Showboat na v0.5.0, para complementar esse recurso do Chartroom.
Finalmente, Chartroom tem suporte para diferentes estilos matplotlib. Pedi a Claude que construísse um documento Showboat para demonstrar tudo isso em um só lugar – você pode ver isso em demos/styles.md.
Como construí o Chartroom
Iniciei o repositório Chartroom com meu modelo click-app cookiecutter e, em seguida, contei um novo código Claude para sessão na web:
Estamos construindo uma ferramenta Python CLI que usa matplotlib para gerar uma imagem PNG contendo um gráfico. Terá vários subcomandos para diferentes tipos de gráficos, controlados por opções de linha de comando. Tudo o que você precisa saber para usá-lo estará disponível na única saída “chartroom –help”.
Ele aceitará dados de arquivos ou entrada padrão como CSV ou TSV ou JSON, semelhante a como o sqlite-utils aceita dados – clone simonw/sqlite-utils para /tmp para referência lá. Clone matplotlib/matplotlib para referência também
Ele também aceitará dados de –sql path/to/sqlite.db “select …” que é executado em modo somente leitura
Comece fazendo perguntas esclarecedoras (não use a ferramenta de perguntas ao usuário, embora ela esteja quebrada) e gere uma especificação para eu aprovar
Uma vez aprovado, prossiga usando testes de execução TDD vermelho/verde com “uv run pytest”
Além disso, durante a construção, mantenha um documento demo/README.md usando a ferramenta “uvx showboat –help” – cada vez que você obtiver um novo tipo de gráfico funcionando, confirme os testes, implementação, atualização README de nível raiz e uma nova versão desse documento demo/README.md com uma demonstração de imagem embutida do novo tipo de gráfico (que deve ser um nome de arquivo de imagem UUID gerenciado pelo comando showboat image e deve ser armazenado na pasta demo/
Certifique-se de que “uv build” seja executado corretamente, sem reclamar de diretórios extras, mas também certifique-se de que dist/ e uv.lock estejam no gitignore
Isso fez a maior parte do trabalho. Você pode ver o resto nos PRs que se seguiram.
O florescente ecossistema Showboat
A família de ferramentas Showboat agora consiste no próprio Showboat, Rodney para automação do navegador, Chartroom para gráficos e streaming de datasette-showboat de documentos remotos do Showboat para o Datasette.
Estou gostando de como essas ferramentas podem operar juntas com base em um conjunto muito flexível de convenções. Se uma ferramenta puder gerar um caminho para uma imagem, o Showboat poderá incluir essa imagem em um documento. Qualquer ferramenta que possa gerar texto pode ser usada com o Showboat.
É quase certo que construirei mais ferramentas que se encaixem nesse padrão. Eles são muito rápidos para nocautear!
O mecanismo de variável de ambiente para streaming remoto do Showboat também é um hack divertido – até agora estou usando-o apenas para transmitir documentos em outro lugar, mas é efetivamente um mecanismo de extensão de webhook que provavelmente poderia ser usado para todos os tipos de coisas que ainda não pensei.
