Pular para o conteúdo
claudemods

Project Sentinel: handoff de contexto do Claude Code e controle da execução

Faixa de status, handoff de contexto, cache de prompt e regras de permissão para execuções longas do Claude Code.

Permissões

  • Lê arquivosPode ler arquivos e listar diretórios na sua máquina ($.fs.read / list / stat / exists).
  • Executa comandosPode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
  • Chama o modelo (usa sua cota)Pode enviar suas próprias requisições ao Claude, que contam no uso do seu plano ($.model.* / $.agent.spawn).
  • Intercepta chamadas de ferramentasVê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
  • Lê seus promptsPode ver o que você digita e a transcrição da conversa (prompt.* / session.append / session.messages).
  • 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).
  • Armazena dadosGuarda dados entre sessões no armazenamento privado do plugin ($.store.*).
testado com
v2.1.296
último teste
requer
Claude Code ≥ 2.1.287
superfícies
acima do prompt, painel, spinner, status, notificação

Instale dentro do Claude Code:

/plugin install project-sentinel --marketplace Arjun0014/project-sentinel
Todas as opções de instalação ↓

O que este mod faz?

O Project Sentinel é um mod da comunidade criado pelos colaboradores do Project Sentinel (Arjun0014). Ele foi feito para execuções longas do Claude Code, e o seu recurso mais conhecido é o handoff de contexto do Claude Code: quando a janela de contexto enche, o Context Autopilot pede ao Claude que termine a unidade de trabalho atual e escreva um arquivo de notas, e então limpa o contexto e começa um novo que lê essas notas. O mod se chamava Control Room até a versão 1.4.0, e é por isso que o painel e a faixa de status ainda levam esse nome.

Em volta disso, ele adiciona muita coisa. Uma faixa de status acima do prompt mostra o uso do contexto, o cache de prompt e o custo da execução. O Cache Guardian acompanha por quanto tempo o cache de prompt continua quente e pede confirmação antes de uma troca de modelo que reenviaria 100k tokens ou mais. As categorias de permissão deixam você definir instalações de pacotes, pushes, deploys e ações parecidas como pedir confirmação ou negar. Outras partes incluem uma Mission Queue e uma Decision Inbox, limites de subagentes, um roteador de modelos, um governador de carga da máquina e um companheiro em pixel art opcional. O README do autor lista tudo; esta página cobre o que verificamos no código.

Demonstração

A gravação inicia o Claude Code com o mod carregado no pequeno projeto de demonstração e pede ao Claude que leia o README.md e descreva o projeto em uma frase. Antes do prompt, a faixa acima da entrada mostra "Ready" com um selo do Control Room e RUN $0.00. Enquanto o turno roda, ela muda para "Thinking" e depois mostra o medidor de contexto enchendo até 4%. Quando o turno termina, ela mostra "Read 1 file", a barra de contexto, CACHE 1h left e o custo da execução, abaixo de um centavo.

Instalação

Use qualquer um dos métodos do bloco de instalação; eles instalam direto do marketplace do próprio autor, chamado control-room. A faixa aparece no próximo início de sessão. Execute /control-room ou /cr para abrir o painel.

$ install project-sentinel

Requer Claude Code ≥ 2.1.287

Instala a partir do marketplace do autor: Arjun0014/project-sentinel

  1. 1.Uma linha, dentro do Claude Code

    /plugin install project-sentinel --marketplace Arjun0014/project-sentinel

    Cole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.

  2. 2.Pelo seu shell

    claude plugin marketplace add Arjun0014/project-sentinel
    claude plugin install project-sentinel@control-room

    Depois execute /reload-plugins em qualquer sessão que já esteja aberta.

  3. 3.Experimente sem instalar

    git clone https://github.com/Arjun0014/project-sentinel
    claude --plugin-dir ./project-sentinel/plugins/project-sentinel

    Carrega o mod só para uma sessão. Nada é adicionado às suas configurações.

Como funciona

O plugin tem um único módulo de hooks, hooks/register.tsx, que monta um único adaptador de host para todas as chamadas ao engine e registra cada hook como algumas linhas que chamam um objeto de runtime. Todo hook de bloqueio tem um .catch que volta ao comportamento padrão do próprio Claude Code. Este é o hook de chamada de ferramenta, de hooks/register.tsx:

on('tool.call', async ($, e, next) => {
  if (rt.isStandby) return next(e)
  if (rt.host === null) rt.bind(hostOf($))
  const tool = String(e.tool)
  const input: Record<string, unknown> = isRecord(e) ? { ...e } : {}
  const refusal = await rt.beforeTool(tool, input, e.tool_use_id, e.agentId)
  if (refusal !== null) return { deny: refusal }
  // ... then next(e), with afterTool in a finally block
})

beforeTool divide os comandos de shell em tokens, classifica cada segmento em uma categoria de permissão e aplica a configuração mais restritiva. Se essa verificação falhar com um erro, o .catch ainda recusa os comandos claramente perigosos. O estado fica no $.store do plugin (configurações, registros de execução, memória do cache) e em átomos $.state que os hooks de renderização leem.

Personalize

Tudo é configurado pelo painel (/cr) ou pelo comando /cr: perfis, o limite do Autopilot (70% da janela por padrão, ou uma contagem de tokens), o nome do arquivo de handoff, o estado de permissão de cada categoria, o estilo das respostas, a estratégia do roteador, o modo e o limite de subagentes, os tetos de recursos, o Keep warm e o companheiro. /cr reset confirm restaura os padrões. O docs/CONFIGURATION.md do autor lista todas as opções.

Permissões e segurança

Lemos o manifesto, hooks/hooks.json, hooks/register.tsx, o adaptador de host, core/settings.ts, features/prompts.ts, features/permissions/decide.ts, app/formerStore.ts e o SECURITY.md do autor. O plugin tem cerca de 60 arquivos TypeScript (umas 7.800 linhas nos quatro maiores). Não lemos cada linha da interface, do painel e do módulo do companheiro, de 3.000 linhas (kit.client.tsx); nesses e no restante, procuramos em todos os arquivos por chamadas de rede, eval, imports dinâmicos, chamadas de processos, gravação de arquivos, segredos e Unicode oculto, e não encontramos nada além do que está listado aqui. Não há package.json no plugin, nem script de instalação, nem binário, nem código minificado.

Constatações:

  • Rede: nenhuma. Sem fetch, sockets ou hosts. As requisições ao modelo passam pelo próprio cliente do Claude Code (a verificação opcional do guard e o Keep warm, que fica desligado por padrão e reenvia a última requisição com uma mensagem curta "reply ok").
  • Processos: top -l 0 -s 2 -n 0 (um amostrador de CPU e memória de longa duração que roda enquanto "Live CPU and memory" está ligado, que é o padrão) e sysctl -n kern.memorystatus_level no macOS; typeperf e systeminfo no Windows; git status --porcelain=v1 --branch em repositórios git. Todos usam argumentos fixos e nenhum shell. O amostrador para quando a sessão termina.
  • Gravação de arquivos: nenhuma pelo próprio plugin, só o seu arquivo de $.store. O arquivo de notas do handoff (NEXT_SESSION_PROMPT.md por padrão) é escrito pelo Claude com as ferramentas normais, sujeitas à verificação de permissão. O plugin lê uma vez o arquivo de armazenamento antigo do Control Room em ~/.claude/plugins/store/ para levar as configurações adiante; esse arquivo nunca é alterado.
  • Daemons: nenhum. Os timers dos watchers vivem no processo do Claude Code.
  • Ambiente: ele lê HOME, USERPROFILE e CLAUDE_CONFIG_DIR (para encontrar o armazenamento antigo) e as configurações do cache de prompt CLAUDE_CODE_PROMPT_CACHE_TTL, ENABLE_PROMPT_CACHING_1H e FORCE_PROMPT_CACHING_5M. O resumo do SECURITY.md do autor diz que ele nunca lê variáveis de ambiente, mas a própria tabela do documento lista essa leitura. Nada é enviado a lugar nenhum.
  • Telemetria: nenhuma.
  • Influência no modelo: ele adiciona uma seção de política ao prompt de sistema quando recursos como o Autopilot ou o Frontier Max estão ligados, acrescenta notas curtas aos resultados das ferramentas, oferece duas ferramentas (milestones e decision_request) e envia os seus próprios prompts (handoff, continuação, trabalho enfileirado). O texto está em features/prompts.ts. O Frontier Max (desligado por padrão) diz ao Claude que a sessão "is being evaluated for frontier-level autonomous capability" e que evite parar cedo. Não encontramos texto oculto nem de largura zero, nem instruções dirigidas a um revisor.
  • Hooks de bloqueio: ele pode recusar chamadas de ferramentas (padrões: force pushes, resets e comandos perigosos negados; instalações, downloads, pushes, deploys, exclusões e edições fora do projeto pedem confirmação), pedir confirmação antes de uma troca de modelo ou da retomada de um contexto grande e frio, esconder ou recusar subagentes e continuar um turno que parou cedo (guard, desligado por padrão). Ele nunca responde a uma verificação de permissão e nunca afrouxa uma negação. Isso corresponde ao README.
  • Requisitos externos: nenhum além do Claude Code 2.1.287 ou mais recente. top e sysctl vêm com o macOS.
  • Licença: MIT, com um arquivo LICENSE no repositório e na pasta do plugin.

O claude plugin validate não relatou erros nem avisos. O comando claude plugin test não encontrou arquivos *.test.ts na pasta do plugin, porque o autor mantém o ambiente de testes em uma pasta separada do repositório, tools/test, então não conseguimos rodar os testes do autor. Trate o mod como amplo e invasivo: ele pode reescrever prompts, negar ferramentas e limpar o seu contexto quando você ativa esses recursos.

Lê arquivos
Pode ler arquivos e listar diretórios na sua máquina ($.fs.read / list / stat / exists).
Executa comandos
Pode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
Chama o modelo (usa sua cota)
Pode enviar suas próprias requisições ao Claude, que contam no uso do seu plano ($.model.* / $.agent.spawn).
Intercepta chamadas de ferramentas
Vê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
Lê seus prompts
Pode ver o que você digita e a transcrição da conversa (prompt.* / session.append / session.messages).
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).
Armazena dados
Guarda dados entre sessões no armazenamento privado do plugin ($.store.*).

Compatibilidade e solução de problemas

Verificado com o Claude Code 2.1.296 no macOS (validate e uma sessão gravada). Se algo parecer errado:

  • Execute /cr para ver o painel e as configurações atuais.
  • Se a faixa não aparecer, confira o estilo da faixa em Setup; ele pode estar definido como desligado.
  • Se o Claude recusar um comando, olhe em Guardrails: os estados de permissão padrão negam force pushes e comandos perigosos.
  • Se você também tiver o antigo plugin control-room carregado, o Project Sentinel fica em espera e avisa isso uma vez.
  • No Windows, os contadores de CPU e memória precisam de um Windows em inglês.

Perguntas frequentes

O Project Sentinel faz alguma coisa se eu não ligar nada?
Ele desenha a faixa de status, as linhas compactas das ferramentas e o painel Control Room, roda um amostrador de CPU e memória para a faixa e aplica as regras de permissão padrão (instalações, downloads, pushes e deploys pedem confirmação; force pushes e comandos perigosos são negados). O Context Autopilot, o Frontier Max, o roteador, o Keep warm e o companheiro ficam desligados até você ativá-los.
Ele envia dados para algum lugar?
Ele não faz nenhuma requisição de rede própria e não tem telemetria. Dois recursos pedem ao Claude Code que envie requisições ao modelo, visíveis no painel, a verificação inteligente opcional do guard e o Keep warm (desligado por padrão).
Ele pode limpar o meu contexto sozinho?
Só com o Context Autopilot ligado ou quando você pede um handoff. Ele pede ao Claude que escreva primeiro um arquivo de notas, confere se o arquivo acabou de ser escrito, depois executa /clear e envia um prompt de continuação.
Qual a diferença para o Context Bar ou o Compact Adviser?
Esses mostram o uso do contexto ou dão conselhos sobre ele. O Project Sentinel é um conjunto maior, além do contexto ele cobre o cache de prompt, as categorias de permissão, os limites de subagentes, o trabalho enfileirado e os watchers, e pode agir sobre a sessão.
Como abro o painel?
Execute /control-room, ou /cr para abreviar. O painel tem abas de atividade, contexto, cache, guardrails, comportamento e configuração.
Context Bar em execução no Claude CodeDestaque

Context 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

Compact Adviser em execução no Claude CodeDestaque

Compact Adviser

Sugere rodar /compact quando a sessão do Claude Code chega a um checkpoint, avaliado pelo modelo Jev da TypeSafe.

  • status
  • painel
  • notificação
  • Lê arquivos
  • Grava arquivos
  • Rede
  • Lê seus prompts
  • Altera a interface
  • Adiciona comandos/ferramentas
  • Armazena dados

testado com v2.1.291

Medidor de contexto em execução no Claude CodeDestaque

Medidor de contexto

Uso do contexto, dos limites de 5 horas e 7 dias e custo da sessão na barra de status, com aviso perto do limite.

  • status
  • notificação
  • Altera a interface

testado com v2.1.310

Mais em Timers, tarefas e standups, Proteções de segurança, Contexto, cota e custo.