agentsclimarketplace

Setup

Skill pedroberaldo87/pedro-plugins/plugins/context-guard/skills/setup

Marketplace privado de 17 plugins (skills, hooks e automações) pessoais para Claude Code.

Install
npx -y skills add pedroberaldo87/pedro-plugins --skill setup

Assembled 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:

  1. Wrapper de statusLine (hooks/context-guard-writer.sh) — intercepta o JSON de stdin do Claude Code, extrai context_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 (via CLAUDE_STATUSLINE_FORWARD). Precisa do setup — statusLine não pode ser um hook de plugin, então tem que ir no settings.json.
  2. 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.
  3. 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 o settings.json sempre 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_THRESHOLD no env?
  • CLAUDE_STATUSLINE_FORWARD no env?

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 no settings.json (sem duplicar hooks).
  • Pra mudar o threshold: edite CLAUDE_CONTEXT_THRESHOLD no env do ~/.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/mode desliga o guard globalmente na hora (sem editar settings nem reload); apague o arquivo (ou echo 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-plugins ou reinicie o Claude Code pra recarregar a config.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,970. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.