Files
ProgramadorBrasil 61ec71c5c7 feat: add 52 specialized AI agent skills (#217)
New skills covering 10 categories:

**Security & Audit**: 007 (STRIDE/PASTA/OWASP), cred-omega (secrets management)
**AI Personas**: Karpathy, Hinton, Sutskever, LeCun (4 sub-skills), Altman, Musk, Gates, Jobs, Buffett
**Multi-agent Orchestration**: agent-orchestrator, task-intelligence, multi-advisor
**Code Analysis**: matematico-tao (Terence Tao-inspired mathematical code analysis)
**Social & Messaging**: Instagram Graph API, Telegram Bot, WhatsApp Cloud API, social-orchestrator
**Image Generation**: AI Studio (Gemini), Stability AI, ComfyUI Gateway, image-studio router
**Brazilian Domain**: 6 auction specialist modules, 2 legal advisors, auctioneers data scraper
**Product & Growth**: design, invention, monetization, analytics, growth engine
**DevOps & LLM Ops**: Docker/CI-CD/AWS, RAG/embeddings/fine-tuning
**Skill Governance**: installer, sentinel auditor, context management

Each skill includes:
- Standardized YAML frontmatter (name, description, risk, source, tags, tools)
- Structured sections (Overview, When to Use, How it Works, Best Practices)
- Python scripts and reference documentation where applicable
- Cross-platform compatibility (Claude Code, Antigravity, Cursor, Gemini CLI, Codex CLI)

Co-authored-by: ProgramadorBrasil <214873561+ProgramadorBrasil@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:04:07 +01:00

230 lines
6.5 KiB
Python

#!/usr/bin/env python3
"""
Context Guardian — Snapshot Manager.
Cria, lista e le snapshots de contexto para preservacao
pre-compactacao. Os snapshots sao arquivos .md estruturados
com todas as informacoes criticas de uma sessao.
Uso:
python context_snapshot.py save --project "nome" --phase "fase" --summary "resumo"
python context_snapshot.py list
python context_snapshot.py latest
python context_snapshot.py read <snapshot-file>
python context_snapshot.py prune --keep 10
"""
import json
import sys
import os
from datetime import datetime
from pathlib import Path
# ── Paths ──────────────────────────────────────────────────────────────────
SCRIPT_DIR = Path(__file__).resolve().parent
SKILL_DIR = SCRIPT_DIR.parent
DATA_DIR = SKILL_DIR / "data"
# ── Functions ──────────────────────────────────────────────────────────────
def ensure_data_dir():
"""Create data directory if it doesn't exist."""
DATA_DIR.mkdir(parents=True, exist_ok=True)
def save_snapshot(project: str = "", phase: str = "", summary: str = "") -> str:
"""
Create a new snapshot file with metadata header.
Returns the path to the created file.
The Claude agent is expected to APPEND the actual content
(extracted from the conversation) after this header is created.
"""
ensure_data_dir()
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
filename = f"snapshot-{timestamp}.md"
filepath = DATA_DIR / filename
header = f"""# Context Guardian Snapshot — {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
**Projeto**: {project or 'nao especificado'}
**Fase**: {phase or 'nao especificada'}
**Resumo**: {summary or 'snapshot pre-compactacao'}
**Modelo**: claude-opus-4-6
---
<!-- O Claude deve preencher as secoes abaixo seguindo references/extraction-protocol.md -->
## Arquivos Tocados
| Arquivo | Acao | Detalhes |
|---------|------|----------|
| | | |
## Decisoes
- (preencher)
## Correcoes
- (preencher)
## Progresso
- Total de tarefas:
- Concluidas:
- Pendentes:
## Trechos Criticos
- (preencher)
## Padroes Observados
- (preencher)
## Dependencias
- (preencher)
## Contexto do Usuario
- Objetivo:
- Proxima acao esperada:
---
*Snapshot gerado por context-guardian v1.0.0*
*Para restaurar: leia este arquivo + MEMORY.md + context_manager.py load*
"""
filepath.write_text(header, encoding="utf-8")
return str(filepath)
def list_snapshots() -> list[dict]:
"""List all snapshots with metadata."""
ensure_data_dir()
snapshots = []
for f in sorted(DATA_DIR.glob("snapshot-*.md"), reverse=True):
stat = f.stat()
snapshots.append({
"file": f.name,
"path": str(f),
"size_kb": round(stat.st_size / 1024, 1),
"modified": datetime.fromtimestamp(stat.st_mtime).strftime("%Y-%m-%d %H:%M:%S"),
})
return snapshots
def read_latest() -> dict:
"""Read the most recent snapshot."""
snapshots = list_snapshots()
if not snapshots:
return {"error": "Nenhum snapshot encontrado."}
latest = snapshots[0]
path = Path(latest["path"])
content = path.read_text(encoding="utf-8")
return {
"file": latest["file"],
"path": latest["path"],
"size_kb": latest["size_kb"],
"content": content,
}
def read_snapshot(filename: str) -> dict:
"""Read a specific snapshot by filename."""
filepath = DATA_DIR / filename
if not filepath.exists():
return {"error": f"Arquivo nao encontrado: {filename}"}
content = filepath.read_text(encoding="utf-8")
return {
"file": filename,
"path": str(filepath),
"content": content,
}
def prune_snapshots(keep: int = 10) -> dict:
"""Remove old snapshots, keeping the N most recent."""
snapshots = list_snapshots()
if len(snapshots) <= keep:
return {"pruned": 0, "remaining": len(snapshots)}
to_remove = snapshots[keep:]
for s in to_remove:
Path(s["path"]).unlink()
return {"pruned": len(to_remove), "remaining": keep}
# ── CLI ────────────────────────────────────────────────────────────────────
def main():
args = sys.argv[1:]
if not args:
print(json.dumps({
"error": "Comando necessario: save, list, latest, read, prune",
"usage": "python context_snapshot.py <command> [options]",
}, indent=2, ensure_ascii=False))
sys.exit(1)
cmd = args[0]
if cmd == "save":
project = ""
phase = ""
summary = ""
i = 1
while i < len(args):
if args[i] == "--project" and i + 1 < len(args):
project = args[i + 1]
i += 2
elif args[i] == "--phase" and i + 1 < len(args):
phase = args[i + 1]
i += 2
elif args[i] == "--summary" and i + 1 < len(args):
summary = args[i + 1]
i += 2
else:
i += 1
path = save_snapshot(project, phase, summary)
print(json.dumps({
"status": "ok",
"action": "snapshot_created",
"path": path,
"next_step": "Preencher o snapshot com dados extraidos da conversa",
}, indent=2, ensure_ascii=False))
elif cmd == "list":
snapshots = list_snapshots()
print(json.dumps({
"total": len(snapshots),
"snapshots": snapshots,
}, indent=2, ensure_ascii=False))
elif cmd == "latest":
result = read_latest()
print(json.dumps(result, indent=2, ensure_ascii=False))
elif cmd == "read" and len(args) > 1:
result = read_snapshot(args[1])
print(json.dumps(result, indent=2, ensure_ascii=False))
elif cmd == "prune":
keep = 10
if "--keep" in args:
idx = args.index("--keep")
if idx + 1 < len(args):
keep = int(args[idx + 1])
result = prune_snapshots(keep)
print(json.dumps(result, indent=2, ensure_ascii=False))
else:
print(json.dumps({"error": f"Comando desconhecido: {cmd}"}, indent=2))
sys.exit(1)
if __name__ == "__main__":
main()