Skip to content
Back to skills

Pdf Kb Updater

ASecurity

Extrai conteúdo de qualquer PDF (livro ou artigo) e atualiza os arquivos KB em .claude/kb/. Ativar quando o usuário pedir para "buscar referência", "checar no [autor/título]", "atualizar KB com PDF", mencionar um artigo ou livro pelo nome, ou pedir para explorar um PDF novo e ver o que vale extrair.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 30, 2026
toolspythongoshell

Works with

  • terminal

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 4 files and shows the line behind each finding

Scanned September 30, 2026

npx -y skills add GGHB0/pll_stability_9bus --skill pdf-kb-updater --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pdf Kb Updater?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pdf Kb Updater
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gghb0-pdf-kb-updater/badge)](https://www.skillsdirectory.com/skills/gghb0-pdf-kb-updater)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pdf-kb-updater
description: Extrai conteúdo de qualquer PDF (livro ou artigo) e atualiza os arquivos KB em .claude/kb/. Ativar quando o usuário pedir para "buscar referência", "checar no [autor/título]", "atualizar KB com PDF", mencionar um artigo ou livro pelo nome, ou pedir para explorar um PDF novo e ver o que vale extrair.
version: 2.5.0
---

# PDF → KB Updater

Workflow para extrair conhecimento de qualquer PDF e atualizar `.claude/kb/`.
Scripts pypdf prontos em [scripts.md](scripts.md); exemplos em
[examples.md](examples.md).

## Dois Modos de Operação

| Modo | Quando | Fluxo |
|---|---|---|
| **Dirigido** | Usuário pede tópico/seção específica | Passos 0 → 4 |
| **Exploratório** | Usuário entrega um PDF sem tópico definido, ou pede para "ver o que tem de interessante" | Passos 0–1 → Varredura → proposta ao usuário → Passos 2–4 |

## Divisão de Trabalho por Modelo

A extração é mecânica; a síntese exige julgamento. Separar:

| Etapa | Quem executa |
|---|---|
| Passos 0–2 + varredura (localizar PDF, TOC, skim, extrair seções, triagem) | Subagente **`pdf-extractor`** (Haiku) — `.claude/agents/pdf-extractor.md` |
| Varredura: seleção do que propor + Passos 3–4 (síntese, escrita dos `.md`, MEMORY.md) | Modelo principal |

Delegar via Agent tool com `subagent_type: "pdf-extractor"`, passando o
caminho do PDF e os intervalos de páginas (ou o tópico a localizar, ou o
pedido de varredura). O subagente devolve os caminhos dos `.txt` em
`~/pdfext/` + índice do conteúdo; o modelo principal então lê **direto dos
`.txt`** as seções que vai usar — não confiar em paráfrase do subagente para
conteúdo técnico da KB.

**Quando NÃO delegar:** pedido pontual em PDF já mapeado em
[section-maps.md](section-maps.md) (1–2 extrações pequenas) — o overhead do
subagente não compensa; rodar os scripts inline.

## Ambiente

Rodar os scripts sempre com o Python do venv do projeto:
```powershell
.venv\Scripts\python.exe script.py
```
`pypdf` **não** está no `requirements.txt` — se der `ModuleNotFoundError`,
instalar com `.venv\Scripts\pip install pypdf` (não adicionar ao requirements;
é dependência só desta skill).

Nunca usar `print()` com texto do PDF no terminal — Windows (cp1252) causa
`UnicodeEncodeError`. Salvar sempre em arquivo UTF-8 e ler com `Read`.

## Passo 0 — Localizar o PDF

**Pasta padrão de bibliografia:**
```
C:\Users\victo\OneDrive\Meus Bagulhos\Arquivos\UERJ\TCC - Victor e Bruno\Bibliografia\
```

Se o usuário não fornecer o caminho completo, listar os PDFs (script "Listar
PDFs" em scripts.md), ler `~/pdfext/lista.txt` e confirmar com o usuário.
Caminho absoluto fornecido → usar direto.

## Passo 1 — Ler Metadados e Sumário

Rodar o script "Metadados + sumário" (scripts.md) → `~/pdfext/toc.txt`.
Antes, checar se o PDF já está em [section-maps.md](section-maps.md).

**PDFs sem sumário (artigos):** extrair as primeiras 4–6 páginas para
identificar seções e depois as páginas relevantes ao tópico buscado.

## Varredura Exploratória (só no modo exploratório)

Objetivo: **ler o PDF por amostragem para descobrir o que vale buscar**,
antes de qualquer extração integral.

1. Delegar ao `pdf-extractor`: com o TOC em mãos, rodar o script "Varredura
   exploratória" (scripts.md) — 1ª página de cada seção nível 1–2 →
   `skim_*.txt` — e montar `~/pdfext/_index.txt` com bullets por seção.
2. Modelo principal lê `_index.txt` e os `skim_*.txt` das seções promissoras,
   cruzando com:
   - os KBs existentes (não duplicar conteúdo já sintetizado);
   - o escopo do TCC: SRF-PLL/GFL, contingências severas, IEEE 9 barras,
     LVRT/normas, oscilações, inércia/VSG, eventos (apagões).
3. Apresentar ao usuário uma **lista priorizada**: seção → páginas → por que
   interessa ao TCC → KB alvo (arquivo novo ou append). Incluir também o que
   foi descartado, em 1 linha.
4. **Aguardar aprovação** antes de extrair na íntegra. Aprovado → Passo 2
   com as seções escolhidas.
5. PDF grande e reutilizável (livro-texto, relatório) → registrar o mapa de
   seções em section-maps.md.

## Passo 2 — Extrair Seções na Íntegra

Rodar o script "Extrair seções" (scripts.md) com o dict
`sections = {'nome.txt': (START, END)}` — todas as seções de interesse de uma
vez, um `.txt` por seção em `~/pdfext/`. Atenção ao limite de ~25k tokens por
`Read` (dividir seções longas — ver nota em scripts.md).

## Passo 3 — Identificar o que Atualizar

Verificar os KBs existentes antes de criar arquivos novos, pelo índice gerado
[kb/index.md](../../kb/index.md) (pastas) e pelo `index.md` da pasta
candidata (docs e o que cada um cobre). A pasta certa para cada tema está em
[limits.md](../../rules/limits.md).

Relatórios de eventos/incidentes vão em `kb/events/<evento-ano>/`, com
prefixo do evento no nome do arquivo (ex.: `iberia-2025/iberia_2025_*.md`).
Em pasta com subpastas, o doc novo entra na subpasta do tema, nunca na raiz
(convenção em [limits.md](../../rules/limits.md)).

Regras:
- **Máx 200 linhas** por arquivo de KB
- Conteúdo que não cabe: criar novo arquivo na subpasta temática correta
- Índices e `_index.yaml` não se editam à mão: o `kb_links.py all` do Passo 4
  registra o doc novo

## Passo 4 — Atualizar KB

Usar `Edit` (append ao final) para arquivo existente, ou `Write` para novo.

Frontmatter obrigatório em qualquer arquivo KB:
```markdown
---
name: slug-do-arquivo
description: Uma linha descrevendo o conteúdo (usada para decidir relevância)
aliases: [slug-do-arquivo]
source: Sobrenome Autor, Título Abreviado, ano, §seção ou p.páginas
references:
  - "Citação bibliográfica completa — ver .claude/rules/references.md"
---
```
`references:` é obrigatório quando a fonte é literatura externa (livro, tese,
artigo, norma, relatório) — regras completas em
[references.md](../../rules/references.md). Os metadados extraídos no
Passo 1 (`toc.txt`) normalmente já trazem autor/título/ano suficientes.

Todo doc novo referencia pelo menos um tema existente com `[[slug]]` e, no
fim, roda `scripts/kb_links.py all`. Regras em
[kb-links.md](../../rules/kb-links.md).

## PDFs com Mapa de Seções Conhecido

Antes de rodar o Passo 1 num PDF já mapeado, consultar
[section-maps.md](section-maps.md) (mesma pasta desta skill) — evita
re-extrair o sumário. Ao mapear um PDF novo que provavelmente será
reutilizado, **adicionar o mapa lá** com as páginas das seções relevantes.

Files in this skill

  • SKILL.md6.4 KB
  • examples.md1.4 KB
  • scripts.md4.6 KB
  • section-maps.md10.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…