Setup
Skill pedroberaldo87/pedro-plugins/plugins/context-guard/skills/setup
Marketplace privado de 17 plugins (skills, hooks e automações) pessoais para Claude Code.
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.
What its author says it does
Copied from the file, not written here
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.
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.