Ativa, por projeto, a previsão do tempo da janela de contexto acima do prompt.

A previsão do tempo da sua janela de contexto do Claude Code, numa linha acima do prompt.
☂ Chuva · 54% 135k / 250k · ··········▄▅ · +35k no último turno
A linha é atualizada a cada turno e mostra:
135k / 250k);· marca turnos que ainda não aconteceram);+35k no último turno). Depois de uma compactação, o número aparece negativo (−120k).| Uso da janela | Símbolo | Previsão | Cor |
|---|---|---|---|
| até 25% | ☼ | Céu limpo | amarelo |
| 26% a 49% | ☁ | Céu nublado com nuvens | ciano |
| 50% a 74% | ☂ | Chuva | azul |
| 75% a 89% | ↯ | Tempestade de raios com ventos fortes!!! | magenta |
| 90% ou mais | ☈☈☈☈☈ | DILÚVIO !!! Limpa esse contexto ai !!! | vermelho |
Os símbolos são caracteres Unicode de largura simples e sem apresentação de emoji, então ficam alinhados em qualquer fonte monoespaçada. O mod roda dentro do próprio Claude Code: funciona igual no bash, zsh, PowerShell e cmd, no Linux, macOS e Windows, sem Node, Python ou qualquer outra dependência.
Antes do primeiro turno de uma sessão (ou logo depois de um /clear), a linha mostra ☼ Previsão do contexto: aguardando o primeiro turno.
São dois plugins no mesmo repositório:
| Plugin | Onde fica | O que faz |
|---|---|---|
monitor-do-contexto | instalado uma vez, para o seu usuário | dá os comandos /monitor-ativar, /monitor-desativar e /monitor-status em qualquer projeto |
monitor-do-contexto-local | copiado para .claude/skills/monitor-do-contexto-local/ de cada projeto ativado | desenha a previsão acima do prompt, só naquele projeto |
Você instala o primeiro uma vez só e ele fica disponível em todos os seus projetos, sem desenhar nada. Quando você roda /monitor-ativar num projeto, ele copia os arquivos do mod para a pasta do projeto. O Claude Code carrega sozinho todo plugin que está em .claude/skills/ do projeto, e é assim que o mod fica registrado para aquele projeto e só para ele.
.claude/skills/ depois que você aceita a pergunta de confiança daquela pasta.Na prompt de qualquer sessão do Claude Code no terminal:
/plugin install monitor-do-contexto --marketplace daniilooo/monitor-do-contexto
y para adicionar o marketplace github:daniilooo/monitor-do-contexto.Installed monitor-do-contexto. Plugin is now active.Se preferir fazer pelo terminal, fora do Claude Code:
claude plugin marketplace add daniilooo/monitor-do-contexto
claude plugin install monitor-do-contexto@monitor-do-contexto
Se você fez um fork, troque
daniilooo/monitor-do-contextopelo<dono>/<repositório>do seu fork.
Abra o Claude Code na pasta do projeto e rode:
/monitor-ativar
O comando copia o mod para .claude/skills/monitor-do-contexto-local/ do projeto. Depois rode /reload-plugins (ou reinicie o Claude Code) e a previsão aparece acima do prompt a partir do próximo turno.
Arquivos criados no projeto:
.claude/skills/monitor-do-contexto-local/
├── .claude-plugin/plugin.json
├── hooks/hooks.json
├── hooks/register.tsx
└── types/index.d.ts
Quer que o time veja também? Faça commit dessa pasta. Quem clonar o projeto passa a ver a previsão sem instalar nada (basta confiar no workspace). Quer só para você? Adicione .claude/skills/monitor-do-contexto-local/ ao .gitignore.
| Comando | O que faz |
|---|---|
/monitor-ativar | copia o mod para o projeto atual; rodar de novo atualiza os arquivos para a versão instalada |
/monitor-status | diz se o projeto atual está com o mod ativo |
/monitor-desativar | apaga .claude/skills/monitor-do-contexto-local/ do projeto atual (com rm -rf no Linux e macOS, rmdir /s /q no Windows). Rode /reload-plugins depois para a linha sumir |
claude plugin update monitor-do-contexto@monitor-do-contexto
Depois rode /monitor-ativar em cada projeto que você quer atualizar: a cópia dentro do projeto só muda quando você pede.
/monitor-desativar (ou apague a pasta .claude/skills/monitor-do-contexto-local/).claude plugin uninstall monitor-do-contexto@monitor-do-contexto
claude plugin marketplace remove monitor-do-contexto
A linha não aparece. Confira se: (1) /monitor-status diz que o projeto está ativo; (2) você rodou /reload-plugins depois de ativar; (3) o workspace é confiável (claude plugin list avisa quando uma pasta de .claude/skills/ foi pulada por isso); (4) já houve pelo menos um turno na sessão. Para ver erros dos mods, inicie com claude --debug.
Os símbolos aparecem como quadradinhos. Sua fonte não tem esses caracteres. Fontes como Cascadia Mono, JetBrains Mono, DejaVu Sans Mono, Menlo e Fira Code têm todos. No Windows, use o Windows Terminal, que busca o caractere em outra fonte quando falta.
De onde vêm os números? São os mesmos da status line do Claude Code: os tokens de entrada da última resposta do modelo, comparados com a janela de contexto do modelo da sessão.
.
├── .claude-plugin/
│ ├── plugin.json # monitor-do-contexto (o ativador)
│ └── marketplace.json # torna o repositório um marketplace
├── hooks/
│ ├── hooks.json
│ └── register.ts # comandos /monitor-ativar, -desativar, -status
├── projeto/ # o mod copiado para cada projeto
│ ├── .claude-plugin/plugin.json # monitor-do-contexto-local
│ ├── hooks/hooks.json
│ ├── hooks/register.tsx # a previsão acima do prompt
│ └── types/index.d.ts # contrato do estado ($.state)
└── tests/
├── ativador.test.ts
└── linha.test.ts
Para testar sem instalar, de dentro desta pasta:
claude plugin validate .
claude plugin validate projeto
claude plugin test .
Para usar a sua cópia local no dia a dia, adicione a pasta como marketplace e instale dela:
claude plugin marketplace add /caminho/para/monitor-do-contexto
claude plugin install monitor-do-contexto@monitor-do-contexto
O mod do projeto (projeto/hooks/register.tsx) mantém toda a lógica dentro de register, de propósito: assim o arquivo é copiado sozinho para cada projeto e os testes do ativador conseguem carregá-lo como plugin.
MIT. Veja LICENSE.
hooks/register.ts 87 lines1import type { Register } from 'claude-code'
2
3// O mod que desenha a previsão vive em ./projeto e é copiado para a pasta
4// .claude/skills do projeto, onde o Claude Code o carrega só naquele projeto.
5const PASTA_NO_PROJETO = '.claude/skills/monitor-do-contexto-local'
6
7export const ARQUIVOS = [
8 '.claude-plugin/plugin.json',
9 'hooks/hooks.json',
10 'hooks/register.tsx',
11 'types/index.d.ts',
12] as const
13
14function ehWindows(caminho: string): boolean {
15 return /^[A-Za-z]:[\\/]/.test(caminho) || caminho.startsWith('\\\\')
16}
17
18export const register: Register = on => {
19 on('session.start', async ($, e, next) => {
20 await $.command.register({
21 name: 'monitor-ativar',
22 description: 'Ativa a previsão do tempo do contexto neste projeto (copia o mod para .claude/skills).',
23 })
24 await $.command.register({
25 name: 'monitor-desativar',
26 description: 'Remove a previsão do tempo do contexto deste projeto.',
27 })
28 await $.command.register({
29 name: 'monitor-status',
30 description: 'Mostra se a previsão do tempo do contexto está ativa neste projeto.',
31 })
32 return next(e)
33 })
34
35 on('command.run', { command: 'monitor-ativar' }, async $ => {
36 const projeto = await $.session.cwd()
37 const destino = `${projeto}/${PASTA_NO_PROJETO}`
38 const jaAtivo = await $.fs.exists(`${destino}/.claude-plugin/plugin.json`)
39
40 for (const arquivo of ARQUIVOS) {
41 const conteudo = await $.fs.read(`${$.plugin.root}/projeto/${arquivo}`)
42 await $.fs.write(`${destino}/${arquivo}`, conteudo)
43 }
44
45 const acao = jaAtivo ? 'atualizado' : 'ativado'
46 return {
47 text: [
48 `Monitor do contexto ${acao} neste projeto.`,
49 `Arquivos copiados para ${PASTA_NO_PROJETO}/.`,
50 'Rode /reload-plugins (ou reinicie o Claude Code) para ver a previsão acima do prompt.',
51 'Versione essa pasta se quiser que o time também veja a previsão.',
52 ].join('\n'),
53 }
54 })
55
56 on('command.run', { command: 'monitor-desativar' }, async $ => {
57 const projeto = await $.session.cwd()
58 const destino = `${projeto}/${PASTA_NO_PROJETO}`
59 if (!(await $.fs.exists(destino))) {
60 return { text: 'O monitor do contexto não está ativo neste projeto.' }
61 }
62
63 const argv = ehWindows(projeto)
64 ? ['cmd', '/c', 'rmdir', '/s', '/q', destino.replace(/\//g, '\\')]
65 : ['rm', '-rf', destino]
66 const { exitCode, stderr } = await $.process.run(argv)
67 if (exitCode !== 0) {
68 return {
69 text: `Não consegui remover ${PASTA_NO_PROJETO}/ (${stderr.trim()}). Apague a pasta manualmente.`,
70 }
71 }
72 return {
73 text: `Monitor do contexto removido deste projeto. Rode /reload-plugins (ou reinicie o Claude Code) para a linha sumir.`,
74 }
75 })
76
77 on('command.run', { command: 'monitor-status' }, async $ => {
78 const projeto = await $.session.cwd()
79 const ativo = await $.fs.exists(`${projeto}/${PASTA_NO_PROJETO}/.claude-plugin/plugin.json`)
80 return {
81 text: ativo
82 ? `Ativo neste projeto (${PASTA_NO_PROJETO}/).`
83 : `Inativo neste projeto. Use /monitor-ativar para ativar.`,
84 }
85 })
86}
87