SLOPSHOPPER

monitor-do-contexto

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

newcommandprocess
v0.1.0MITupdated 2026-10-08daniilooo/monitor-do-contexto
A shopper browsing a rack in a slop shop
Preview · a replayed session in a sandbox
claude · ~/work/app · monitor-do-contexto
› fix the failing auth test and add an audit log call ⏺ Read(src/auth.ts) ⎿ Read 6 lines ⏺ Update(src/auth.ts) ⎿ Added 2 lines, removed 1 line ⏺ Bash(bun test) ⎿ 3 pass, 1 fail ● Done. refresh now rejects expired claims and logs an audit event. ✻ Worked for 42s · done 4:20 PM › /monitor-ativar ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── › ? for shortcuts
README

Monitor do Contexto

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:

  • o clima, que muda conforme a janela de contexto enche;
  • a porcentagem usada e os tokens usados do total (135k / 250k);
  • um mini gráfico de barras dos últimos 12 turnos: cada barra é o quanto a janela estava cheia ao fim daquele turno, na cor do clima daquele turno (· marca turnos que ainda não aconteceram);
  • quanto o último turno somou (+35k no último turno). Depois de uma compactação, o número aparece negativo (−120k).
Uso da janelaSímboloPrevisãoCor
até 25%☼Céu limpoamarelo
26% a 49%☁Céu nublado com nuvensciano
50% a 74%☂Chuvaazul
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.

Como funciona

São dois plugins no mesmo repositório:

PluginOnde ficaO que faz
monitor-do-contextoinstalado uma vez, para o seu usuáriodá os comandos /monitor-ativar, /monitor-desativar e /monitor-status em qualquer projeto
monitor-do-contexto-localcopiado para .claude/skills/monitor-do-contexto-local/ de cada projeto ativadodesenha 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.

Requisitos

  • Claude Code com suporte a mods (plugins de function hooks). O mod foi feito e testado na versão 2.1.295.
  • Para a linha aparecer, use uma sessão interativa no terminal ou na aba Code do app desktop.
  • O projeto precisa ser um workspace confiável: o Claude Code só carrega plugins de .claude/skills/ depois que você aceita a pergunta de confiança daquela pasta.

Instalação (uma vez, para o seu usuário)

Na prompt de qualquer sessão do Claude Code no terminal:

/plugin install monitor-do-contexto --marketplace daniilooo/monitor-do-contexto
  1. Responda y para adicionar o marketplace github:daniilooo/monitor-do-contexto.
  2. Escolha o escopo user (o primeiro da lista) com Enter, para ter os comandos em todos os projetos.
  3. Aparece 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-contexto pelo <dono>/<repositório> do seu fork.

Ativar em um projeto

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.

Comandos

ComandoO que faz
/monitor-ativarcopia o mod para o projeto atual; rodar de novo atualiza os arquivos para a versão instalada
/monitor-statusdiz se o projeto atual está com o mod ativo
/monitor-desativarapaga .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

Atualizar

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.

Desinstalar

  1. Em cada projeto ativado, rode /monitor-desativar (ou apague a pasta .claude/skills/monitor-do-contexto-local/).
  2. Remova o plugin do seu usuário:
claude plugin uninstall monitor-do-contexto@monitor-do-contexto
claude plugin marketplace remove monitor-do-contexto

Perguntas frequentes

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.

Desenvolvimento

.
├── .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.

Licença

MIT. Veja LICENSE.

Source 1 files
hooks/register.ts 87 lines
1import 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