O Clip arquiva uma página da web nas suas notas com o resumo já escrito. Hoje ele abre para todas as contas do Telli.sh.
O Clip não apenas salva uma página da web: ele a transforma em uma nota do Telli.sh com título e resumo de uma linha escritos por IA. Ele foi lançado atrás de uma trava de administrador, e por isso dois contadores de analytics nunca dispararam uma única vez. Essa trava acabou: contas gratuitas ganham 30 salvamentos e 10 resumos de IA por dia, e a versão 1.18 da extensão de navegador acrescenta um Salvar no Telli.sh no menu de contexto, autenticado por um token que não sabe fazer mais nada além disso.
Existe um tipo específico de bug que nenhuma suíte de testes pega: o recurso funciona, e ninguém consegue chegar até ele.
O Clip está pronto há semanas. O modal salva via POST /v1/clip, preenche o cartão de link com as meta tags públicas da página, gera um resumo de IA de uma linha, invalida o cache das notas e já sabe a diferença entre «salvou, mas sua cota de resumos acabou» e «isto falhou». Tudo isso, funcionando. E no PostHog os dois eventos que ele reporta — clip_opened e clip_created — nunca haviam disparado. Nem uma vez, nem raramente. Zero.
O motivo eram três linhas de código no frontend. O botão da barra lateral e o modal estavam ambos travados em user.is_master, e o botão exibia um selo âmbar Prévia de admin. O backend nunca travou nada em is_master — ele aplica cotas diárias por plano, que é o lugar certo para um limite. O recurso não estava sem uso. Estava inalcançável.
A partir do commit 64852ac, em 5 de setembro de 2026, a trava passou a ser «tem alguém com sessão iniciada». Este texto é um anúncio de produto, então é centrado no produto por opção: eis o que o Clip faz, o que ele te custa, o que a extensão de navegador envia e o que ela deliberadamente nunca lê.
TL;DR
- O Clip está aberto a todas as contas com sessão iniciada. O botão da barra lateral perdeu o selo de administrador em 5 de setembro de 2026.
- Os limites são cotas diárias, não uma trava. O plano gratuito recebe 30 salvamentos e 10 resumos de IA por dia UTC; plus, pro e pro+ sobem a partir daí. Os números exatos estão na tabela abaixo.
- Ficar sem cota de resumo não faz você perder o clip. O link e seus metadados continuam sendo salvos; só o resumo é pulado, e o aplicativo avisa.
- A extensão de navegador consegue salvar a página em que você está. «Salvar no Telli.sh» fica no menu de contexto de qualquer página http(s) e leva junto o que você tinha selecionado. A versão 1.18 está em análise na Chrome Web Store no momento desta publicação — ainda não dá para instalar.
- A extensão se autentica com um token que só sabe salvar clips. Ele não consegue ler suas notas, alterar sua conta, chegar à cobrança nem criar outro token. Você vê o segredo exatamente uma vez, e pode revogá-lo.
- A extensão lê o que a página já mostra para você. Título, link canônico, meta públicos
og:/twitter:e sua seleção. Não o corpo do artigo. Nada sai do navegador sem o seu clique e, sem um token salvo, o item de menu não faz absolutamente nada.
O que o Clip realmente faz com uma URL
Abra o Clip na barra lateral, cole uma URL e o modal chama POST /v1/clip/metadata. Esse endpoint busca o HTML da página e lê apenas as meta tags públicas dela — og:title, og:description, og:image, og:site_name, article:author, article:published_time e o <link rel="canonical">. Título, descrição, site e imagem voltam preenchidos. Se a busca falhar, o modal avisa e deixa você salvar o link mesmo assim, com o nome do host no lugar do nome do site.
Então você salva, e o Clip vira uma nota. Não um anexo, não um favorito numa lista separada — uma nota com note_type="clip", dentro de Todas as notas junto com o resto, pesquisável, organizável em pastas, compartilhável e exportável pela mesma máquina. A URL de origem e o cartão de link inteiro ficam preservados no contexto da nota, então a procedência nunca se perde atrás do resumo.
Se houver algo a resumir — uma descrição, o texto que você selecionou, uma anotação que você colou — um resumo geral roda e escreve na nota um resumo de uma linha. É a linha que você vê embaixo do título na lista.

Três clips salvos numa conta de produção em 5 de setembro de 2026, em Todas as notas ao lado de notas comuns. Os dois clips de artigos trazem um título escrito por IA e um resumo de uma linha. A capa do Hacker News não publica meta de descrição e não havia texto selecionado, então não havia nada a resumir — ela manteve o próprio título e ficou sem linha de resumo. Quando o Clip não tem com o que trabalhar, ele não diz nada em vez de inventar alguma coisa.
Esse último detalhe é a regra de projeto que sustenta o recurso inteiro, e vale enunciá-la sozinha: a saída da IA nunca substitui o original. A URL de origem, os metadados do próprio site e qualquer texto que você tenha fornecido são preservados; o resumo é dado derivado, colocado por cima. Se o resumo estiver errado ou for inútil, a coisa que você de fato salvou continua ali.
Os limites são uma cota diária, e são o único limite
Não há trava de plano no Clip. Há uma quantidade.
| Plano | Salvamentos por dia | Resumos de IA por dia |
|---|---|---|
| Free | 30 | 10 |
| Plus | 150 | 50 |
| Pro | 500 | 150 |
| Pro+ | 2,000 | 500 |
Padrões de backend/config.py (CLIP_SCRAPE_DAILY_QUOTA_*, CLIP_SUMMARY_DAILY_QUOTA_*), lidos em 5 de setembro de 2026.
Duas cotas, não uma, e elas falham de formas diferentes de propósito. Acabaram os salvamentos e o salvamento é recusado — o servidor responde 403 com um código estruturado clip_scrape_quota_exceeded e uma data de reinício. Acabaram os resumos e o clip é salvo mesmo assim; só a etapa do resumo é pulada, e o aplicativo diz exatamente isso: «Clip salvo. A cota de resumos de IA de hoje foi usada.»
Essa assimetria é deliberada. Salvar um link é barato e é a coisa que você realmente queria; resumir é a parte cara. Perder uma página que você pretendia guardar porque um modelo de linguagem estava com a cota estourada seria uma troca absurda, então não fazemos isso.
O contador é uma simples data de calendário UTC. Às 00:00 UTC seu dia reinicia — o mesmo instante para todo mundo, não uma janela móvel de 24 horas sobre a qual você precisa raciocinar.
«Salvar no Telli.sh» está a um clique com o botão direito — assim que a 1.18 for aprovada
O modal da web pressupõe que você tem a URL na área de transferência. Normalmente você tem a página aberta.
O Telli.sh: Every Translator 1.18 acrescenta um item de menu de contexto, Salvar no Telli.sh, registrado tanto para o contexto page quanto para selection em http://*/* e https://*/* — qualquer página da web, não apenas os cerca de 30 sites em que a extensão traduz. Clique com o botão direito em qualquer ponto de um artigo e ele é salvo. Selecione três parágrafos antes e eles vão junto, até 2.000 caracteres.
O retorno vem pelo selo da barra de ferramentas que a extensão já tem: … enquanto salva, ✓ no sucesso, ! na falha, cada um com uma explicação na dica da barra. As mensagens de erro são específicas porque os erros do servidor são. Um 401 significa que o token foi recusado e você precisa de um novo. Um 403 significa duas coisas diferentes, e a extensão as distingue procurando um código *_quota_exceeded no corpo da resposta — cota esgotada («volte amanhã») versus um token sem permissão de clip («este token não pode fazer isso»). Mesmo código de status, conselhos opostos.
A versão 1.18 foi enviada à Chrome Web Store e está em análise em 5 de setembro de 2026. Você ainda não consegue instalá-la. Quando for aprovada, ela chega como atualização automática, e o menu de contexto aparece junto.
Uma chave só de escrita: o token salva clips e não faz mais nada
Aqui está a parte com a qual mais nos importamos, porque é onde esse tipo de integração costuma dar errado.
A versão preguiçosa de «conecte a extensão à sua conta» é pedir que você cole o token de sessão dentro da extensão. Esse token abre tudo: apaga notas, exporta seus dados, mexe na cobrança. Você entregaria as credenciais completas da conta em troca de um botão de favorito, e elas ficariam guardadas na extensão para sempre.
Por isso o Clip não usa esse token. O Telli.sh emite tokens de API com escopo, nos moldes dos da Cloudflare: um token carrega uma lista de políticas em vez de ocupar o seu lugar, e cada política é um effect (allow ou deny, com o deny vencendo), um conjunto de resources e um conjunto de grupos de permissão. Hoje existe exatamente um grupo, clip_write, que se expande nas permissões clip:write e clip:metadata, e exatamente um formato de recurso, {"user": "self"} — os seus próprios dados, nada além disso.
Nós a chamamos de uma chave só de escrita, porque esse é o formato dela: ela consegue colocar coisas na sua conta e não tira nenhuma.
A invariante de segurança que torna isso real é uma frase no documento de projeto: um token de API nunca passa pelo caminho de autenticação de sessão. Cookies de sessão e JWTs de acesso são resolvidos por get_current_user_optional, que alcança todos os endpoints do produto. Tokens de API são resolvidos apenas pela dependência require_permission(...) e, se a permissão que essa dependência pede não estiver no token, a resposta é 403. Quebre essa separação e um token com escopo volta silenciosamente a ser um token de conta inteira, e é por isso que ela é enunciada como a regra mais importante do projeto. Há um efeito de segunda ordem útil: um token de API é uma string opaca, então a decodificação de JWT sempre falha nele. Se um dia ele vazasse para um caminho de sessão por engano, autenticaria como ninguém.
A própria API de tokens é fechada para tokens. Criar, listar e revogar tokens exige uma sessão real com login — um token não pode criar outro token.
Criar um leva uns quinze segundos
Vá em Ajustes → Tokens de API. Antes de você ter um, a página é honesta sobre o que a coisa que você está prestes a criar consegue fazer.

A página de tokens de API em /settings/tokens antes de existir qualquer token, capturada em 5 de setembro de 2026. A linha sobre o escopo fica acima do formulário, não enterrada num artigo de ajuda: «Um token só pode salvar clips. Ele não pode ler suas notas, alterar sua conta nem chegar aos seus dados de cobrança.» Uma permissão é oferecida, porque uma permissão é tudo o que existe.
Dê um nome, marque Salvar clips, crie. O segredo completo aparece uma vez, num painel que diz isso em vermelho.

O painel do segredo de exibição única. O token nesta captura está mascarado, e a conta a que ele pertencia foi excluída. Um token é tsh_<prefixo de 12 caracteres>_<segredo de 43 caracteres> — 256 bits de aleatoriedade base64url. Só o prefixo é armazenado em texto puro, como chave de busca; o segredo é guardado como hash bcrypt e não é recuperável nem por nós nem por você. Feche este painel e ele se foi de vez.
Depois disso a lista mostra o prefixo e nada mais. É o suficiente para diferenciar dois tokens e inútil para quem roubar a captura de tela.

O mesmo token depois que o painel do segredo é dispensado: prefixo, escopo, hora de criação, hora do último uso e Revogar. O last_used_at é escrito no máximo uma vez por hora, em vez de a cada requisição, então ele indica aproximadamente quando um token esteve ativo pela última vez sem transformar cada clip numa gravação extra no banco. Revogar define revoked_at — imediato, permanente e sem exclusão definitiva, então o registro do que existiu sobrevive.
Conectar a extensão: cinco passos
- Entre em telli.sh e abra Ajustes → Tokens de API (
/settings/tokens). - Digite um nome que você vá reconhecer depois — «Extensão de navegador» é o texto de exemplo por um motivo —, marque Salvar clips e aperte Criar token.
- Aperte Copiar token enquanto o painel de exibição única estiver aberto. Não há segunda chance; se você perdê-lo, revogue esse token e faça outro.
- Abra a página de ajustes da extensão, encontre a seção Telli.sh Clip, cole o token no campo Token do Telli.sh Clip e aperte Conectar.
- Clique com o botão direito em qualquer página da web e escolha Salvar no Telli.sh. O selo da barra de ferramentas pisca
✓e o clip está em Todas as notas.

A extensão depois do passo 4, capturada em 5 de setembro de 2026. A linha de status mostra apenas o prefixo — a extensão exibe o que a lista de tokens exibe. O texto de apoio enuncia o modelo de armazenamento sem rodeios: «Ele fica guardado somente neste dispositivo, e o salvamento de clips permanece desligado até que um token seja adicionado.» Sem token, sem clip; o item de menu existe, mas não faz nada.
O que exatamente a extensão lê
Promessas de privacidade são baratas. Eis o comportamento do código, que é a única versão que vale.
Quando você clica em Salvar no Telli.sh, a extensão injeta uma função na página e lê oito campos: og:title ou twitter:title, com recuo para document.title; og:description, twitter:description ou description; o link canônico; og:image ou twitter:image; og:site_name ou application-name; article:author ou author; article:published_time; e window.getSelection().
Releia essa lista pelo que falta nela. Não há document.body. Não há extração do texto do artigo, nenhuma passada de legibilidade, nenhuma varredura do DOM. Sete dos oito campos são metadados que a página publica para o Google e para as prévias em redes sociais — dados escritos para serem lidos por estranhos. O oitavo é o texto que você mesmo destacou.
Mais quatro propriedades valem no código:
Nada é enviado sem um clique. A função de metadados roda dentro do tratador do menu de contexto. Não há alarme em segundo plano, nem gancho no carregamento da página, nem modo «coletar enquanto você navega».
Sem token, nada acontece. O tratador primeiro verifica se há um token do Telli.sh salvo e para por aí se não houver, exibindo um selo que te diz para conectar um. Numa instalação nova, o item de menu é inerte.
Seu cookie de sessão não pode ser emprestado. A extensão tem uma permissão de host para telli.sh, o que normalmente significa que suas chamadas fetch levam automaticamente os cookies da sua sessão — e o cookie autenticaria antes do token, concedendo acesso total à conta em vez do escopo só-de-clip que projetamos. Por isso a requisição é enviada com credentials: 'omit'. O token é a única credencial em jogo, e o escopo que você escolheu é o escopo que vale. É essa única opção que faz a chave só de escrita ser de fato só de escrita.
Onde a extensão não tem acesso à página, ela envia menos, não mais. A injeção de script exige acesso de host, que a extensão só tem para os sites declarados no manifesto. Em todos os outros lugares a injeção simplesmente falha e o clip recua para apenas a URL; o servidor então preenche o cartão com as meta tags públicas da página. O modo de falha é «menos dados», nunca «pedir permissões mais amplas».
E quando o servidor busca uma URL, ele busca como um visitante, não como um crawler. Ele recusa localhost, qualquer host .local e qualquer nome de host que resolva para um endereço IP privado, de loopback, link-local, multicast, reservado ou não especificado — resolvido e verificado, não apenas comparado com um padrão, então um nome DNS público apontando para 10.0.0.1 também é rejeitado. Ele segue no máximo 3 redirecionamentos e lê no máximo 256 KB de HTML. Não faz login, não leva seus cookies e não tenta nada que um visitante deslogado não conseguisse buscar. Páginas com paywall e páginas privadas continuam com paywall e privadas — salve delas o seu próprio texto selecionado.
Uma última nota de medição, já que abrimos este texto com uma história de analytics. Clips feitos pela extensão nunca passam pelo aplicativo web, então o frontend não os enxerga; para esses, é o servidor que reporta clip_created. Esse evento carrega o aplicativo de origem, o tipo de origem, se havia seleção incluída, se um resumo foi gerado e o plano. Ele não carrega URL, nem título, nem texto selecionado — quantos clips foram feitos e por qual caminho, nunca o que havia dentro deles.
Conclusão: um aplicativo de notas que só guarda o que você falou é meia memória
O Telli.sh começou como um lugar para o trabalho falado — grave uma reunião, transcreva no idioma em que ela foi realmente falada, traduza, resuma, guarde as quatro camadas numa mesma nota. Isso cobre o que você disse.
Não cobre o que você leu, que é a maior parte do que você sabe. A aba que você deixou aberta por três dias. A página de documentação de que vai precisar de novo daqui a um mês. O tópico de comentários com a resposta de verdade dentro. Essas coisas moram num histórico de navegador que você nunca vai pesquisar e numa barra de favoritos que você parou de abrir em 2019.
O Clip é a outra metade chegando: a mesma nota, a mesma busca, as mesmas pastas, a mesma exportação — alcançadas por um clique com o botão direito em vez de um microfone. A direção é um único banco de dados pessoal em que suas palavras e suas fontes ficam lado a lado, e esta é a primeira superfície de coleta apontada para a web.
A trava acabou. Agora os contadores têm para onde ir.
Experimente: entre na sua conta, abra o Clip na barra lateral e cole a URL de algo que você vem querendo guardar. Contas gratuitas ganham 30 salvamentos e 10 resumos de IA por dia. Quando a extensão 1.18 passar pela análise da Chrome Web Store, a mesma coisa vira um clique com o botão direito em qualquer página que você já esteja lendo.
Abra o Telli.sh e salve seu primeiro clip
Fontes
- Repositório do Telli.sh, commit
64852ac, 5 de setembro de 2026 — «feat(clip): open Clip to every signed-in user», que removeu a travais_mastere o selo Prévia de admin, e registrou queclip_createdeclip_openednunca haviam disparado no PostHog. - Repositório do Telli.sh,
backend/config.py— os padrões deCLIP_SCRAPE_DAILY_QUOTA_*eCLIP_SUMMARY_DAILY_QUOTA_*, lidos em 5 de setembro de 2026. - Repositório do Telli.sh,
docs/SUPERAPP_BASELINE.md— a base do Clip e as regras de segurança: nenhum contorno de login ou paywall, nenhum scraping em massa, resumo limitado ao texto fornecido pelo usuário e aos metadados públicos, e a regra de que a saída da IA nunca substitui o original. - Repositório do Telli.sh,
docs/design/API_TOKEN_RBAC_DESIGN.md— o projeto do token com escopo: estrutura de políticas, o formatotsh_<prefix>_<secret>, armazenamento com bcrypt e a invariante de que tokens de API nunca são resolvidos pelo caminho de autenticação de sessão. - Repositório do Telli.sh,
extension/extension/background.js—readClipMetadataFromPage,collectClipMetadataesaveClip, 5 de setembro de 2026: os oito campos de metadados, o disparo apenas por clique, o retorno antecipado sem token e ocredentials: 'omit'. - Telli.sh: Every Translator na Chrome Web Store — a página em que a versão 1.18 foi enviada; em análise em 5 de setembro de 2026.
- Página do produto Telli.sh: Every Translator — os sites compatíveis, os modos de exibição, os provedores e os compromissos de privacidade num só lugar.
- O pop-up da extensão respondia à pergunta errada. Na 1.16 ele desenha a página em que você está., 4 de setembro de 2026 — o lançamento anterior da extensão, para a página de ajustes onde mora o campo do token do Clip.