Setup
Skill pedroberaldo87/pedro-plugins/plugins/context-guard/skills/setup
Configura o plugin context-guard — registra o wrapper de statusLine e as env vars no settings.json (os hooks de reset/guarda vêm do próprio plugin via hooks.json). Rode 1× após instalar o plugin.From its SKILL.md
npx -y skills add pedroberaldo87/pedro-plugins --skill setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.4 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
Setup do Context Guard
Você está configurando o plugin context-guard, que interrompe o workflow quando o uso do context window passa de um threshold, avisando pra preservar o estado da sessão.
Arquitetura
São três componentes — e só um precisa de setup manual:
- Wrapper de statusLine (
hooks/context-guard-writer.sh) — intercepta o JSON de stdin do Claude Code, extraicontext_window.used_percentage+session_id, grava em/tmp/claude-context-pct-<session_id>(por sessão, v1.3.0) e encaminha pro statusLine que já existia (viaCLAUDE_STATUSLINE_FORWARD). Precisa do setup — statusLine não pode ser um hook de plugin, então tem que ir nosettings.json. - Hook PostToolUse (
hooks/context-guard.sh) — lê o arquivo DA PRÓPRIA sessão após cada tool call e bloqueia com{"decision":"block"}se passar do threshold. Vem do plugin (hooks/hooks.json) — NÃO registre à mão. - Hook SessionStart (
hooks/context-guard-reset.sh) — limpa o sentinel e o estado só da própria sessão pra guarda poder disparar de novo em sessão nova. Vem do plugin (hooks/hooks.json) — NÃO registre à mão.
Por que por-sessão (v1.3.0): antes o estado era um arquivo global (
/tmp/claude-context-pct). Com várias sessões paralelas, a última statusLine a renderizar sobrescrevia o arquivo, então UMA sessão a 80% fazia o guard bloquear TODAS — falso-positivo em massa. Agora cada sessão só lê o próprio contexto.
Por que só o statusLine vai no settings.json: os hooks de reset/guarda já são entregues pelo hooks/hooks.json do plugin e disparam sozinhos quando o plugin está instalado — registrá-los de novo no settings.json seria redundante (o sentinel por sessão neutraliza o disparo duplo, mas é peso à toa, e dois registros do mesmo hook é exatamente o tipo de coisa que o plugin guardrails existe pra desfazer). O statusLine, ao contrário, não existe como hook de plugin — é o único que precisa entrar no settings.json. Por isso o setup faz só isso (+ env vars).
Caso directory-source (sem cache): se o plugin vier de um marketplace de diretório local cujo cache não existe, o
hooks.json(que usa${CLAUDE_PLUGIN_ROOT}) também não carrega — nem os hooks de reset/guarda. Aí instale via marketplace git (gera cache) pra os hooks funcionarem; o setup cobre só o que osettings.jsonsempre suporta (statusLine + env).
Passos
1. Resolver o caminho do plugin
Ache a raiz do context-guard dinamicamente:
# Instalado de marketplace git
PLUGIN_PATH=$(ls -d ~/.claude/plugins/cache/*/context-guard/*/ 2>/dev/null | tail -1)
Valide que o caminho existe e contém hooks/context-guard-writer.sh. Guarde como PLUGIN_PATH.
2. Ler o settings atual
Leia ~/.claude/settings.json. Cheque o que já existe:
- Tem
statusLine.command? (salve o original — vamos preservá-lo via forward) CLAUDE_CONTEXT_THRESHOLDnoenv?CLAUDE_STATUSLINE_FORWARDnoenv?
3. Configurar o statusLine
Se já houver um statusLine.command, salve-o como CLAUDE_STATUSLINE_FORWARD no env pra o wrapper encaminhar pra ele.
Então defina statusLine.command:
"statusLine": {
"type": "command",
"command": "bash <PLUGIN_PATH>/hooks/context-guard-writer.sh"
}
O wrapper extrai o context% E encaminha o stdin pro comando original — qualquer statusLine que já existia (claude-hud ou outro) continua funcionando.
4. Adicionar env vars
Adicione ao env do settings.json (se ainda não estiver):
"CLAUDE_CONTEXT_THRESHOLD": "80"
Se havia um statusLine original (passo 3), adicione também:
"CLAUDE_STATUSLINE_FORWARD": "<comando original do statusLine>"
5. Verificar
Confirme que o wrapper extrai o context% e que o guard do plugin dispara como esperado:
O estado é por sessão (/tmp/claude-context-pct-<session_id>) — cada sessão só lê o próprio contexto (ver Arquitetura). Nos testes, use um session_id fixo:
SID=test-0000; rm -f /tmp/claude-context-pct-$SID /tmp/claude-context-warned-$SID
# Wrapper extrai o context% pro arquivo DA SESSÃO
echo "{\"session_id\":\"$SID\",\"context_window\":{\"used_percentage\":45,\"context_window_size\":200000}}" | bash <PLUGIN_PATH>/hooks/context-guard-writer.sh > /dev/null 2>&1
cat /tmp/claude-context-pct-$SID # deve imprimir: 45
# Guard NÃO dispara abaixo do threshold
echo "{\"session_id\":\"$SID\"}" | CLAUDE_CONTEXT_THRESHOLD=80 bash <PLUGIN_PATH>/hooks/context-guard.sh # sem saída
# Guard DISPARA acima do threshold
printf '85' > /tmp/claude-context-pct-$SID
echo "{\"session_id\":\"$SID\"}" | CLAUDE_CONTEXT_THRESHOLD=80 bash <PLUGIN_PATH>/hooks/context-guard.sh # {"decision":"block","reason":"⚠️ CONTEXTO EM …%"}
rm -f /tmp/claude-context-pct-$SID /tmp/claude-context-warned-$SID
Valide a sintaxe do settings.json:
jq . ~/.claude/settings.json > /dev/null
Confirme que os hooks do plugin carregaram:
claude plugin details context-guard@pedro-plugins # deve mostrar Hooks (2)
Hooks (2) conta tipos de evento (SessionStart + PostToolUse) — correto. Hooks (0) = o hooks.json não foi reconhecido (problema — provável caso directory-source sem cache).
6. Reportar
Diga ao usuário:
- Context guard ativo, threshold em X%.
- Os hooks de reset/guarda vêm do plugin (
hooks.json) — o setup registrou só o statusLine + env vars nosettings.json(sem duplicar hooks). - Pra mudar o threshold: edite
CLAUDE_CONTEXT_THRESHOLDnoenvdo~/.claude/settings.json. - A guarda dispara UMA vez por sessão, depois deixa continuar (pra você rodar /handoff).
- Kill-switch:
echo off > ~/.claude/context-guard/modedesliga o guard globalmente na hora (sem editar settings nem reload); apague o arquivo (ouecho on) pra religar. Útil quando você roda muitas sessões paralelas e quer silêncio. - Estado por sessão: o context% de cada sessão vive em
/tmp/claude-context-pct-<session_id>— uma sessão cheia NÃO bloqueia as outras (bug corrigido na v1.3.0, quando o estado era global). - Se havia statusLine antes, foi preservado via
CLAUDE_STATUSLINE_FORWARD. - Rode
/reload-pluginsou reinicie o Claude Code pra recarregar a config.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.