npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

octechpus

v2.21.0

Published

🐙 Octechpus — Agent Orchestrator CLI for Claude Code projects

Readme

🐙 Octechpus

CLI instalåvel que scaffolda um sistema completo de orquestração de agentes em qualquer projeto Claude Code.

octechpus init detecta sua stack automaticamente e instala 14 agentes especializados (incluindo um Verifier que executa build/testes/lint/audit, Privacy/LGPD e um Designer stack-agnóstico), templates de CI/GitHub e documentação estruturada — tudo configurado para o seu projeto, pronto para usar com /pipeline no Claude Code.


Instalação

# Sem instalar (recomendado para uso pontual)
npx octechpus init

# Global
npm install -g octechpus
octechpus init

Requisitos: Node.js >= 20


Quick start

npx octechpus init

Sem flags, o init pergunta como vocĂȘ quer instalar, com dois caminhos:

  • A) Projeto em andamento — o CLI lĂȘ a base de cĂłdigo existente e auto-detecta a stack coerente, instalando de forma harmoniosa com o que jĂĄ estĂĄ lĂĄ.
  • B) Projeto novo — vocĂȘ aponta um documento PID (.md) descrevendo o projeto; o CLI lĂȘ o documento e escolhe a stack ideal para começar.

VocĂȘ pode pular o menu com flags:

# Stack explĂ­cita (bypass total)
npx octechpus init --stack=python-fastapi

# Projeto novo: aponta o PID direto (entra no caminho B, nĂŁo-interativo)
npx octechpus init --describe=docs/pid.md

💡 NĂŁo precisa do caminho completo. Basta o nome do arquivo (com ou sem .md) — o CLI procura o documento em projectDir e no diretĂłrio atual, ignorando node_modules, .git, dist, etc. Ex.: --describe=pid. Se houver mais de um arquivo com o mesmo nome, o CLI lista os caminhos e pede para vocĂȘ especificar.

Na detecção (caminhos A e B), o CLI inspeciona manifests (package.json, pyproject.toml, go.mod, Cargo.toml, pom.xml/build.gradle, *.csproj/*.sln, Gemfile, composer.json) e também documentos .md (o PID no caminho B; README.md, PROJECT.md, ARCHITECTURE.md, etc. no caminho A):

  • Alta confiança → aplica o profile imediatamente
  • Confiança mĂ©dia → pede confirmação antes de aplicar
  • Baixa confiança → lista candidatos (com "quando usar") e abre o modo guiado
  • Sem confiança / stack mista → use o profile generic

Profiles disponĂ­veis

Designer e Privacy/LGPD sĂŁo always-on em todos os profiles (nĂŁo aparecem como "extras"). SĂł Cost Engineer Ă© opt-in por profile.

| Profile | Linguagem / Framework | Agente opt-in | |---|---|---| | node-typescript | Node.js + TypeScript, Vitest, Zod | — | | node-javascript | Node.js puro (JS, sem TypeScript) | — | | nextjs-react | Next.js + React + Tailwind + shadcn/ui | — | | vue-nuxt | Vue 3 + Nuxt + Tailwind | — | | react-native | React Native / Expo (mobile) | — | | python-fastapi | Python ≄ 3.12, FastAPI, Pydantic v2, pytest, uv, ruff | — | | python-ai-pipeline | FastAPI + LLM (Anthropic/OpenAI/LangChain) | Cost Engineer | | python-cli | Click / Typer, pytest | — | | go-api | Go, chi ou stdlib, testify | — | | rust-cli | Rust, clap, tokio, cargo test | — | | java-spring | Java 17+, Spring Boot, JUnit 5 | — | | dotnet-api | C#, ASP.NET Core, xUnit | — | | ruby-rails | Ruby on Rails, RSpec | — | | php-laravel | PHP 8.2+, Laravel, Pest/PHPStan | — | | generic | Fallback agnĂłstico (stack mista / desconhecida) | — |

Todos herdam de _base, que define pipeline, segurança, privacidade, ADRs e convençÔes universais. A herança Ă© resolvida por deep-merge: o filho sobrescreve escalares e concatena arrays (use !override como 1Âș item para substituir).

_base
├── node-typescript
│   ├── nextjs-react
│   ├── vue-nuxt
│   └── react-native
├── node-javascript
├── python-fastapi
│   ├── python-ai-pipeline
│   └── python-cli
├── go-api · rust-cli · java-spring · dotnet-api · ruby-rails · php-laravel
└── generic

O que Ă© instalado

seu-projeto/
├── .claude/
│   ├── commands/              ← agentes como slash commands (orquestração)
│   │   ├── pipeline.md            /pipeline
│   │   ├── maestro.md             /maestro
│   │   ├── audit.md               /audit
│   │   ├── architect.md           /architect
│   │   ├── coder.md               /coder
│   │   ├── verify.md              /verify    ← gate de execução
│   │   ├── review.md              /review
│   │   ├── qa.md                  /qa
│   │   ├── security.md            /security
│   │   ├── privacy.md             /privacy   ← LGPD/GDPR
│   │   ├── reporter.md            /reporter
│   │   ├── docs.md                /docs
│   │   ├── github-issue.md        /github-issue
│   │   ├── profiler.md            /profiler
│   │   ├── design.md              /design
│   │   ├── cost-engineer.md       /cost
│   │   └── progress.md            /progress  ← página de andamento
│   ├── agents/                ← subagents escopados (tools por agente, model: inherit)
│   │   ├── security.md            read-only
│   │   ├── coder.md               read-write
│   │   ├── docs.md                read-write
│   │   └── 
 (um por agente ativo)
│   ├── overrides/             ← (opcional, seu) ajustes locais anexados aos agentes
│   └── settings.json          ← permissĂ”es: allow / ask / deny (segurança)
├── .github/
│   ├── ISSUE_TEMPLATE/            Templates bug / feature / refactor
│   └── PULL_REQUEST_TEMPLATE.md
├── docs/
│   ├── OCTECHPUS_AGENTS.md    ← ReferĂȘncia completa dos agentes
│   ├── project-context.md     ← Documentação do SEU projeto (não gerenciado, nunca sobrescrito)
│   └── adr/                   ← Architecture Decision Records (ADR-NNN-titulo.md)
├── .octechpus/
│   └── manifest.json          ← Hashes SHA-256 para rastrear customizaçÔes
└── CLAUDE.md                  ← Config do projeto lida pelo Claude Code

Design system: o init scaffolda design-system/ (starter Stratum) por padrĂŁo. O agente Designer Ă© stack-agnĂłstico e para quando nĂŁo encontra um design system — com o starter local ele sempre tem uma fonte da verdade para tokens, componentes e estados. O conteĂșdo enviado segue o profile (design_system.tokens: tailwind manda o preset, css-only sĂł as variĂĄveis CSS, none apenas a documentação + referĂȘncia visual).

Para pular: npx octechpus init --no-design-system. Se vocĂȘ jĂĄ tem um design system prĂłprio, edite os arquivos Ă  vontade — update sĂł preenche o que estiver faltando e nunca sobrescreve o que existe.


PermissÔes e subagents (v2.5)

Desde a v2.5 o init configura segurança por padrĂŁo — sem vocĂȘ precisar aprovar cada ação dos agentes. Ver ADR 002.

.claude/settings.json — modelo de menor privilĂ©gio

Gerado a partir do profile, com trĂȘs nĂ­veis:

| Nível | Comportamento | Exemplos | |---|---|---| | allow | roda sem perguntar | npm test, git commit, pytest, cargo build, gh 
 | | ask | pausa e pede aprovação | git push, npm publish | | deny | bloqueado (nem pergunta) | rm -rf, force-push, sudo, curl/wget/scp, env/printenv, gh auth token, ler .env/chaves |

As pastas em guardrails.read_only_paths viram regras Write(...)/Edit(...) no deny — o guardrail deixa de ser texto no CLAUDE.md e passa a ser trava imposta.

O resultado Ă© mais autonomia (o trabalho seguro flui sem prompts) e mais segurança (o destrutivo Ă© barrado, nĂŁo perguntado). Para overrides pessoais, use .claude/settings.local.json — ele precede o settings.json.

v2.16.1 — o settings.local.json tambĂ©m Ă© limpo. O CLI nunca cria esse arquivo nem injeta baseline nele, mas, se ele jĂĄ existir, init/update/profile switch convertem regra de caminho inerte (Write(x) → Edit(x), Glob(x) → Read(x), mesmo tier) — senĂŁo o aviso de startup sobrevive ao update. SĂł reescreve quando hĂĄ forma morta de fato, guarda backup antes, e deixa JSON invĂĄlido intacto.

Revise o seu allow depois do update: regra inerte ali passa a valer, e duas conversĂ”es cobrem escopo maior que o original — Glob(x) → Read(x) (listar vira ler) e NotebookEdit(x) → Edit(x) (notebook vira qualquer arquivo). Em deny/ask a conversĂŁo sĂł aperta; em allow, amplia o que roda sem perguntar.

⚠ deny Ă© defesa-em-profundidade, nĂŁo sandbox. As regras casam por prefixo de comando (Bash(rm -rf:*)), entĂŁo reduzem o risco mas nĂŁo eliminam toda evasĂŁo possĂ­vel (ex.: find -delete, aliases). É uma camada de proteção — nĂŁo substitui review humano. Cada subagent tambĂ©m carrega uma instrução anti prompt-injection (conteĂșdo lido do repo Ă© dado, nunca comando).

.claude/agents/ — subagents escopados

Cada agente vira um subagent do Claude Code com contexto isolado e ferramentas por princípio do menor privilégio:

| Agente | Tools | |---|---| | Architect · Reviewer · Security · Privacy · Reporter · Profiler · Designer | Read, Grep, Glob (read-only) | | Coder · QA · Docs · GitHub · Maestro | Read, Write, Edit, Bash, Grep, Glob |

Os agentes de anĂĄlise nĂŁo conseguem editar cĂłdigo (nĂŁo tĂȘm a ferramenta) — a segurança vem de nĂŁo ter a capacidade, nĂŁo de te perguntar. ConfigurĂĄvel via agents_runtime no profile.

v2.12 — sem pin de modelo: todos os agentes usam model: inherit — quem decide o esforço em contexto Ă© a sessĂŁo/orquestrador, nĂŁo uma constante fixada antes da tarefa existir. (Em campo, docs e profiler pinados em haiku deixaram defeitos de template passarem despercebidos por meses.) Precisa de piso? Sobrescreva agents_runtime no profile, com um comentĂĄrio explicando o porquĂȘ.

v2.6 — orquestração real: o /pipeline delega cada fase ao subagent via ferramenta Task (em vez de trocar de papel numa conversa sĂł). O fan-out pĂłs-Coder — Reviewer ∄ QA ∄ Security ∄ Privacy — roda em paralelo, e o handoff entre agentes passa por artefatos em .octechpus/run/ (cada subagent recebe os outputs relevantes dos anteriores). O /audit tambĂ©m delega aos subagents read-only em paralelo (v2.7).

v2.7 — adoção sem atrito: se vocĂȘ jĂĄ tem um .claude/settings.json, o Octechpus faz merge das permissĂ”es nele (preserva suas regras e chaves hooks/env/etc.) em vez de pular o arquivo. Um settings.json invĂĄlido nunca Ă© sobrescrito. O init/update tambĂ©m adicionam .octechpus/run/ ao .gitignore.


Os 13 agentes

Maestro → GitHub → Architect → [Designer] → Coder → Reviewer → QA → Security → Privacy → Docs → Reporter
                                     ↑ em demandas de UI            🔬 Profiler   💰 Cost Engineer (opt-in)

| # | Agente | Responsabilidade | |---|---|---| | 1 | 🎯 Maestro | Orquestra; rubrica de severidade, critĂ©rios testĂĄveis, teto de 2 iteraçÔes → escala p/ humano | | 2 | 🐙 GitHub | Issues, branches (conventional), commits semĂąnticos, PRs; CODEOWNERS/branch protection/secret-scan | | 3 | 📐 Architect | Impacto tĂ©cnico, ADRs, NFRs e classificação de dados (pĂșblico/pessoal/sensĂ­vel) | | 4 | 🎹 Designer | Stack-agnĂłstico — melhores prĂĄticas de UX/UI; pede o design system do Claude Design em runtime | | 5 | đŸ’» Coder | Implementação pelo profile; Karpathy (Simplicity/Surgical); regras de segredos/PII e feature flags | | 6 | 🔍 Reviewer | Code review com severidade (🔮/🟡/đŸ””); K1-K4; concorrĂȘncia, i18n; checklist de UX em PRs de UI | | 7 | đŸ§Ș QA | Unit/integração/E2E + negativos de segurança; fixtures sem PII; smoke de performance | | 8 | đŸ›Ąïž Security | OWASP 2021 + API Security Top 10 (BOLA/BFLA) + SSRF + supply chain | | 8b | ⚖ Privacy | Conformidade LGPD/GDPR: base legal, minimização, retenção, direitos do titular, RIPD/DPIA | | 9 | 📚 Docs | Docstrings/JSDoc, README, CHANGELOG, ADRs, documentação de dados pessoais | | 10 | 📊 Reporter | RelatĂłrio consolidado; scorecard com piso (Segurança/Privacidade < 4 capa o geral) | | 11 | 🔬 Profiler | Auto-detecção de stack (incl. monorepo/drift); rode /profiler para re-verificar | | 12 | 💰 Cost Engineer | Guarda contra gasto de API/infra (budget + kill-switch); opt-in em AI/ML |

PrincĂ­pios de Karpathy (embutidos em todos os agentes desde v2.3)

Todo agente gerado por octechpus init segue os 4 princĂ­pios:

  1. Think Before Coding — Architect declara premissas e define critĂ©rios testĂĄveis antes de qualquer plano
  2. Simplicity First — Coder proĂ­be abstraçÔes prematuras e cĂłdigo defensivo desnecessĂĄrio
  3. Surgical Changes — Coder altera o mínimo necessário; Reviewer rejeita escopo extra
  4. Goal-Driven Execution — Maestro converte demandas vagas em resultados mensuráveis antes de rotear

Slash commands (pĂłs-init)

Abra o Claude Code no projeto e use:

| Comando | Para quĂȘ | |---|---| | /pipeline [demanda] | Pipeline completo — todos os agentes em sequĂȘncia | | /maestro [demanda] | Classificação, severidade e roteamento | | /audit [escopo] | Raio-x do projeto com scorecard | | /architect [escopo] | AnĂĄlise de impacto arquitetural | | /coder [demanda] | Implementação guiada pelo profile | | /review [escopo] | Code review com severidade | | /qa [escopo] | Gerar testes (unit, integration, E2E) | | /security [escopo] | Audit OWASP 2021 + API Top 10 | | /privacy [escopo] | Conformidade LGPD/GDPR | | /docs [escopo] | Documentação | | /github-issue [demanda] | Criar issue no GitHub | | /profiler | Re-detectar e reportar stack atual | | /reporter [escopo] | RelatĂłrio consolidado do pipeline | | /design [demanda] | Briefing de UX/UI (Designer) | | /cost [escopo] | Audit de gasto de API e dependĂȘncias | | /readiness [escopo] | Scorecard de prontidĂŁo tĂ©cnica publicado numa Issue (integração Maestro) | | /progress | PĂĄgina de andamento do projeto em linguagem simples (docs/status/) |


Comandos CLI

octechpus init                        # Setup com auto-detecção de stack
octechpus init --stack=<profile>      # Setup com stack explĂ­cita
octechpus status                      # Verifica setup e profile ativo
octechpus doctor                      # Diagnostica problemas e drift de profile
octechpus docs-check                  # VerificaçÔes mecùnicas da documentação (feito p/ CI)
octechpus docs-check --strict         # Idem, tratando avisos como erro
octechpus secrets-check               # Varredura de credenciais (CI / pre-commit)
octechpus integrity-check             # Lista arquivos gerenciados editados fora da origem
octechpus integrity-check --strict    # Idem, falhando o CI tambĂ©m em divergĂȘncias
octechpus update                      # Atualiza commands (preserva customizaçÔes)
octechpus profile list                # Lista profiles disponĂ­veis
octechpus profile show <nome>         # Mostra profile resolvido (após herança)
octechpus profile current             # Mostra profile ativo do projeto atual
octechpus profile switch <nome>       # Troca o projeto para outro profile
octechpus design-system add           # Adiciona design system ao projeto
octechpus design-system update        # Sincroniza design-system/ com os templates mais recentes
octechpus vault init                  # MemĂłria de projeto em grafo (docs/, formato Obsidian)
octechpus vault check                 # Cruza o vault com o filesystem (CI: exit 1 em erro)
octechpus vault map                   # Desenha o grafo do vault em docs/status/vault.html
octechpus dashboard                   # Painel Ășnico (andamento + grafo) em docs/status/dashboard.html
octechpus help                        # Ajuda

Vault de contexto (octechpus vault)

Cria em docs/ um vault em grafo: notas .md ligadas por wikilinks [[assim]], com entrada Ășnica em docs/00-INDEX.md.

docs/
  00-INDEX.md          — mapa de conteĂșdo: o Ășnico ponto de entrada
  dominio/             — glossario.md (o que as palavras significam aqui) e
                         invariantes.md (o que o negĂłcio nĂŁo permite)
  modulos/             — um nó por módulo: o que faz, invariantes, fronteiras
  sessoes/             — um nó por execução do pipeline, datado
  adr/                 — decisĂ”es de impacto medium/high

O ganho nĂŁo Ă© o formato — Ă© a forma de leitura. O agente entra pelo Ă­ndice e segue sĂł os wikilinks que a demanda exige, em vez de carregar o projeto inteiro no contexto. O vault entra no init e no update por padrĂŁo (--no-vault recusa, e a recusa Ă© registrada): a instrução de navegação vai para o CLAUDE.md, o agente Docs mantĂ©m as notas de mĂłdulo dos mĂłdulos tocados, e cada execução do pipeline vira um nĂł em docs/sessoes/ — o grafo se enche pelo trabalho que jĂĄ foi feito.

  • vault check cruza o vault com o filesystem (puro fs): caminho: ĂłrfĂŁo e wikilink que nĂŁo resolve sĂŁo erro (exit 1); nota fora do Ă­ndice e Invariantes vazia sĂŁo aviso. Serve de gate de CI, como o docs-check.
  • vault map desenha o grafo em docs/status/vault.html (pĂĄgina Ășnica, sem rede) e imprime as lacunas — mĂłdulos ainda sem nota.

Nada depende do Obsidian: um vault Ă© uma pasta de markdown, e qualquer editor lĂȘ o mesmo conteĂșdo. Abrir docs/ no Obsidian mostra o grafo.

O vault Ă© do projeto: vault init nunca sobrescreve nota existente — rodar de novo Ă© seguro, e sĂł completa o que faltar. Use --force para trazer os modelos da release atual por cima. Ver ADR-013 (substitui o ADR-010).

Painel compartilhĂĄvel (octechpus dashboard)

Funde a pĂĄgina de andamento (docs/status/index.html, escrita pelo agente /progress) e o grafo do vault (docs/status/vault.html, do vault map) num arquivo Ășnico: docs/status/dashboard.html — as duas visĂ”es em abas, cada uma embutida num <iframe srcdoc> (isolamento total de estilo, zero requisição externa).

octechpus dashboard        # gera/atualiza docs/status/dashboard.html

É o artefato de compartilhamento: envie o arquivo por anexo ou hospede como pĂĄgina estĂĄtica — abre por duplo clique, sem servidor e sem internet. O comando Ă© determinĂ­stico (mesma entrada ⇒ arquivo idĂȘntico, sem carimbo de relĂłgio) e puro fs, sem dependĂȘncia nova. Sem vault, erra alto; sem andamento, a aba existe com um aviso em vez de sumir.

Duas metades, duas naturezas — e Ă© isso que decide onde cada uma se atualiza:

| Metade | Origem | Atualiza sozinha? | |---|---|---| | Grafo | código determinístico (vault map) | ✅ em qualquer CI/hook | | Andamento | agente /progress (linguagem simples) | ❌ precisa de um LLM |

Por isso a atualização automåtica vive em dois pontos:

  • No pipeline (passo 11b): depois de /progress, o orquestrador roda octechpus dashboard — o Ășnico ponto onde agente e cĂłdigo coexistem, e cai no mesmo commit da mudança.
  • Na CI (push do main): o workflow octechpus-dashboard.yml regenera o grafo e comita se algo mudou, com trĂȘs amarras contra loop (filtro de caminho invertido, guarda de ator, no-op em diff vazio). Instala por padrĂŁo; --no-dashboard recusa e registra a recusa no manifest.

Ver ADR-014.

Flags

| Flag | Efeito | |---|---| | --stack=<nome> | Força um profile, ignorando auto-detecção | | --describe=<file.md> | Infere a stack a partir de um doc .md do projeto | | --force | Sobrescreve arquivos existentes sem perguntar | | --minimal | SĂł o nĂșcleo .claude/: commands + settings.json + agents (sem docs/GitHub) | | --dry-run | Preview do que seria criado, sem escrever nada | | --no-design-system | Pula o starter design-system/ (que Ă© instalado por padrĂŁo) | | --no-vault | Pula o vault de contexto (instalado por padrĂŁo; a recusa Ă© registrada) | | --no-dashboard | Pula o workflow de CI do painel compartilhĂĄvel (instalado por padrĂŁo; a recusa Ă© registrada) | | --keep-customizations | update pula arquivos editados pelo usuĂĄrio (padrĂŁo: true) | | --allow-downgrade | Deixa o update rodar a partir de um CLI anterior ao manifest | | --strict | docs-check / secrets-check / integrity-check tratam avisos como erro |


O Verifier — o Ășnico agente que executa

Todo agente do pipeline lĂȘ o cĂłdigo. O Verifier o executa. Sem ele, o pipeline inteiro era auto-declarado: o QA reportava "cobertura estimada", o Security exigia npm audit sem poder rodĂĄ-lo (Ă© read-only), e o pipeline podia terminar em ready_to_merge com o build quebrado.

Ele roda depois do Coder e antes do fan-out de anĂĄlise:

Coder → ✅ Verifier → [Reviewer ∄ QA ∄ Security ∄ Privacy ∄ Cost] → Docs → Reporter → GitHub

| Etapa | 🔮 quando | |---|---| | build / compilação | erro de build | | type check | erro de tipo | | lint | erro de lint (warning → 🟡) | | testes | qualquer teste falhando | | cobertura | abaixo da meta do profile → 🟠 | | audit de dependĂȘncias | vulnerabilidade high/critical |

TrĂȘs regras que definem o agente:

  1. Nunca reporta resultado que nĂŁo obteve executando. Sem nĂșmero estimado. Comando inexistente → n/a, nunca inventado. Falha de ambiente → error, nĂŁo fail.
  2. Não conserta nada. É o gate, não o Coder. Achou falha, devolve com a saída real.
  3. Descobre os comandos do projeto (scripts do manifesto, Makefile, CI) em vez de presumir — funciona igual em Node, Python, Go, Rust ou Java.

Se o Verifier falha, o fan-out nĂŁo roda. NĂŁo se gasta Reviewer, QA, Security, Privacy e Cost analisando cĂłdigo que nĂŁo compila — Ă© o Ășnico gate cujo veredito Ă© exit code, nĂŁo opiniĂŁo de agente.

Escala de severidade — uma só

Antes havia duas (o Reviewer usava BLOCKER/WARNING/SUGGESTION, o Security usava CRITICAL/HIGH/MEDIUM/LOW) e o gate não sabia dizer se um 🟠 HIGH de segurança bloqueava. Agora todos os agentes usam a mesma:

| NĂ­vel | Gate | |---|:---:| | 🔮 BLOCKER — explorĂĄvel / quebra o build / viola contrato | bloqueia | | 🟠 HIGH — risco significativo (vuln alta, PII em log, custo multiplicado) | bloqueia | | 🟡 WARNING — deveria ser corrigido | nĂŁo bloqueia | | đŸ”” INFO — melhoria opcional | nĂŁo bloqueia |

🟡 e đŸ”” viram dĂ©bito tĂ©cnico — e dĂ©bito nĂŁo morre no corpo do PR: o Reporter os emite em formato fixo e o agente GitHub abre uma issue por item (label octechpus:debt, idempotente por tĂ­tulo) na Fase 2.


Segredos — o que Ă© garantia e o que Ă© mitigação

TrĂȘs camadas, com escopos diferentes. Vale saber o que cada uma entrega:

| Camada | Onde | Garantia real | |---|---|---| | 1. PermissĂ”es (.claude/settings.json) | harness | DeterminĂ­stica para a ferramenta Read e para prefixos de comando. NĂŁo Ă© infalĂ­vel: shell tem infinitas formas de expressar a mesma leitura. | | 2. octechpus secrets-check | CI + pre-commit | DeterminĂ­stica para o que interessa: segredo que entra no repositĂłrio. Exit 1 quebra o build. | | 3. Guard nos prompts | agente | Best-effort. Cobre o que permissĂŁo nĂŁo alcança — o que o agente escreve a partir do que jĂĄ estĂĄ no contexto. |

⚠ Nenhuma combinação dĂĄ "zero possibilidade de vazamento" — quem prometer isso estĂĄ vendendo. O que dĂĄ para garantir Ă©: credencial nĂŁo entra no repositĂłrio sem o CI falhar (camada 2), e o alcance de leitura do agente Ă© estreito por padrĂŁo (camada 1). O resto Ă© reduzir superfĂ­cie.

A regra que mais reduz risco nĂŁo Ă© ferramenta, Ă© arquitetura: o que o agente nĂŁo consegue ler, nĂŁo consegue vazar. Nesta ordem de preferĂȘncia:

  1. Secret manager (1Password/Vault/Doppler/AWS SM) injetando no processo — nada em disco.
  2. .env fora da ĂĄrvore do projeto (~/.config/app/.env), referenciado por caminho absoluto.
  3. .env no projeto, gitignored — aceitável, e o padrão da maioria. É o que a camada 1 bloqueia para o agente.
  4. ❌ Segredo em arquivo versionado — o que a camada 2 impede.

Uso

npx octechpus secrets-check          # exit 1 se achar credencial ou arquivo de segredo
npx octechpus secrets-check --strict # avisos (.gitignore, .env.example) também falham

Achados saem mascarados (AKIA****DFGH) — um scanner que imprime o segredo que encontrou Ă© ele prĂłprio um vazamento, e log de CI costuma ser pĂșblico.

Falsos positivos em fixture ou documentação: marque a linha (ou a anterior) com octechpus:allow-secret.

No CI, junto do docs-check:

- run: npx octechpus secrets-check

No pre-commit (opcional, mas Ă© onde o custo de um vazamento Ă© zero):

printf '#!/bin/sh\nnpx octechpus secrets-check || exit 1\n' > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

🔑 Se o scanner achar algo real, remover o commit NÃO resolve — a credencial jĂĄ esteve no histĂłrico (e possivelmente em fork, cache do GitHub, log de CI). O Ășnico desfecho seguro Ă© rotacionar a chave. SĂł depois limpe o histĂłrico.


docs-check — CI para a documentação (v2.12)

O cĂłdigo passa por lint, testes e type check; a documentação passava por um checkbox. octechpus docs-check fecha esse buraco com quatro verificaçÔes mecĂąnicas — exatamente as que, em campo, teriam evitado meses de acĂșmulo silencioso:

| Verificação | Severidade | |---|---| | Mais de uma seção ## [Unreleased] no CHANGELOG | erro (exit 1) | | Link relativo quebrado em qualquer .md | erro (exit 1) | | ADR com nome fora de ADR-NNN-titulo.md ou Status fora do enum | aviso | | Variåvel no .env.example sem uso no código (órfã) | aviso |

Use no CI: npx octechpus docs-check (ou --strict para rigor total). O agente Docs roda o check automaticamente antes de encerrar.


Arquivos gerenciados — o Octechpus se declara ao agente (v2.14)

O Octechpus gera arquivos para o Claude ler, mas atĂ© a v2.13 nĂŁo se declarava a ele. O agente via um .md versionado no repo com conteĂșdo estranho e reagia como reagiria a qualquer cĂłdigo: consertava. Perguntado "por que esse arquivo estĂĄ assim?", construĂ­a uma justificativa arquitetural plausĂ­vel e errada para o que era interpolação de {{var}}.

Nenhuma camada isolada resolve isso — o dono do repositório sempre pode editar o próprio repositório. São cinco:

| Camada | Onde | Papel | |---|---|---| | Declara | Seção ⚠ Arquivos gerenciados no CLAUDE.md gerado | Diz quais caminhos sĂŁo gerados e o que acontece com cada um numa edição Ă  mĂŁo | | Impede | Deny de Edit/Write em .claude/settings.json | Fecha o buraco do agente — onde a edição acontecia sem ninguĂ©m notar | | Preserva | Hash no manifest + skip no update | Edição que escapou nĂŁo Ă© perdida | | Denuncia | octechpus integrity-check · passo 8 do /audit | DivergĂȘncia vira informação acionĂĄvel, com nome de arquivo | | Protege | Guard de downgrade no update | CLI mais velho nĂŁo regride a instalação |

O que acontece se vocĂȘ editar Ă  mĂŁo

| Caminho | Efeito | |---|---| | .claude/commands/*.md | Congela — o update pula e o arquivo para de receber melhorias upstream | | .claude/agents/*.md | Congela — idem | | docs/OCTECHPUS_AGENTS.md | Congela — idem | | .claude/settings.json | Union-merge — suas regras são preservadas | | CLAUDE.md acima de 📋 PROJECT DOCUMENTATION | Sobrescrito no update |

Fora do deny de propósito: o CLAUDE.md (tem a seção do usuário no fim) e o settings.json (union-merge já preserva). O deny vale para as ferramentas do agente — npx octechpus update continua gerando os arquivos normalmente.

Quer ajustar o comportamento de um agente? Não edite o arquivo gerado — use overrides. É customização sem congelamento.

integrity-check

npx octechpus integrity-check          # exit 1 se faltar arquivo gerenciado
npx octechpus integrity-check --strict # divergĂȘncias tambĂ©m falham (CI)
✓ 31/33 arquivo(s) gerenciado(s) idĂȘntico(s) ao template

⚠ 1 arquivo(s) alterado(s) fora da origem:
    ‱ .claude/agents/coder.md
  → Melhoria de verdade: leve para Phaiolli/octechpus-cli
  → Ajuste local do projeto: use .claude/overrides/coder.md
  → Descartar a edição: npx octechpus update --force

SemĂąntica deliberada: arquivo faltando Ă© exit 1 sempre (o pipeline perdeu um agente sem avisar ninguĂ©m); arquivo alterado Ă© exit 0 com aviso, exit 1 sĂł com --strict. Editar um arquivo gerenciado nĂŁo Ă© proibido — Ă© uma decisĂŁo com custo, e o papel da ferramenta Ă© tornar o custo visĂ­vel, nĂŁo bloquear.

Guard de downgrade

Um update rodado por um CLI anterior ao que gerou os arquivos regenerava tudo a partir dos templates velhos: features de versĂŁo nova sumiam sem erro nenhum, e a Ășnica pista ficava no campo version do manifest. Acontece com cache velho de npx, e Ă© permanente em repositĂłrio de dogfooding. Agora bloqueia antes de escrever qualquer coisa, indicando octechpus@latest, o cĂłdigo local, ou --allow-downgrade para rollback proposital.

Detalhes da decisĂŁo: ADR-006.


Rastreamento de customizaçÔes

octechpus update armazena um hash SHA-256 de cada arquivo gerado em .octechpus/manifest.json. Em updates subsequentes, compara o hash armazenado com o conteĂșdo atual:

  • Hash bate → arquivo nĂŁo foi editado → atualiza
  • Hash diverge → arquivo foi customizado → pula (preserva suas ediçÔes)
  • --force → sobrescreve tudo independente de customizaçÔes

Overrides do projeto — personalize sem sair do canal de update (v2.12)

O dilema clåssico: corrigir um template localmente significava ou perder a correção no próximo upgrade, ou ficar marcado como customizado e parar de receber melhorias. A camada de overrides resolve os dois:

# .claude/overrides/docs.md  (arquivo SEU — o CLI nunca o toca)
Sempre atualizar também o glossårio em docs/glossario.md.

O conteĂșdo Ă© anexado ao final do agente (.claude/agents/docs.md) e do slash command (.claude/commands/docs.md) em todo init/update/profile switch, numa seção "Ajustes do projeto". Pares com nomes divergentes (designer↔design, github↔github-issue) compartilham o override por qualquer um dos nomes.

Outros pontos que continuam seus, fora do manifest: docs/project-context.md (documentação especĂ­fica do projeto, referenciada pelo CLAUDE.md gerenciado) e .claude/settings.local.json (permissĂ”es pessoais — o CLI sĂł o toca para migrar regra de caminho inerte, e nunca o cria).

Baseline com prune e opt-out (excludeRules)

O merge do settings.json preserva toda regra sua, mas deixou de ser aditivo puro para o que o prĂłprio Octechpus escreveu: o baseline emitido fica registrado em .octechpus/manifest.json → baselineRules, e regra que o baseline anterior emitiu e o atual nĂŁo emite mais Ă© removida no prĂłximo init/update/profile switch. Trocar de profile deixa de acumular guardrails do profile antigo para sempre.

Para dispensar uma regra do baseline neste projeto (ex.: o ask de Bash(git push:*), que gera prompt atĂ© em bypassPermissions), declare no manifest — match exato da regra:

{
  "excludeRules": ["Bash(git push:*)"]
}

No prĂłximo update a regra sai do settings.json e nunca Ă© reinjetada. octechpus doctor lista as exclusĂ”es ativas — dispensar regra de segurança Ă© decisĂŁo visĂ­vel, nĂŁo buraco esquecido. Detalhes e limites: docs/adr/ADR-008.

Skills por stack — conhecimento sob demanda

Desde a v2.19, o CLAUDE.md emite quatro skills (convencoes-da-stack, padrao-de-testes, checklist-de-revisao, fluxo-de-commit-e-release) em .claude/skills/<nome>/SKILL.md, renderizadas a partir de campos do profile.

O ganho Ă© a forma de leitura. Blocos que jĂĄ estavam nos prompts dos agentes especĂ­ficos (coder, qa, review, github-issue) sĂŁo consultados pelo caminho ad-hoc — agente editando um arquivo sem passar pelo /pipeline. As skills sĂŁo arquivos gerenciados: hash no manifest, overrides valem, skipped se customizado (--keep-customizations). Perdem o guard anti prompt-injection porque sĂŁo consultadas por um agente que jĂĄ o carrega — seguro por construção.

O template do CLAUDE.md encolhe ~30% e ganha a capacidade de encolher sem travar a base instalada, via RETIRED_MANAGED_HEADINGS — lista de headings do passado para não os classificar como seção do usuário. Ver ADR-011.

Leia a skill deliberadamente com /skills nome ou deixe-a ser carregada quando a demanda casar com a description. octechpus doctor lista as skills ativas.

Hooks por profile — verificação determinística

Desde a v2.19, dois hooks podem ser ligados por projeto no settings.json:

| Hook | Evento | Matcher | O que faz | |---|---|---|---| | stop_check | Stop | — | Roda a suíte do projeto ao encerrar o turno. Determinístico (sem prompt), bloqueante. | | post_edit_format | PostToolUse | Edit\|MultiEdit\|Write | Formata o projeto após edição de arquivo. Apenas em stacks que o declaram. |

Ambos residem em baselineHooks no manifest, permitindo prune anĂĄlogo ao ADR-008: trocar de profile limpa o hook antigo, desligar o opt-in remove de verdade. Comandos vĂȘm exclusivamente do YAML do pacote, proibindo interpolação e metacaracteres de shell — segurança + portabilidade Windows.

Habilitação:

# Ver status
octechpus doctor
# → "Hooks disponíveis: stop_check (desligado), post_edit_format (desligado)"

# Ligar
npx octechpus init --stack=seu-stack  # gera manifest.json
# ou editar: .octechpus/manifest.json → "hooks": { "stop_check": true }

Contraindicação crĂ­tica (Security): nĂŁo ligue stop_check num repositĂłrio que vocĂȘ nĂŁo confia o bastante para rodar a suĂ­te inteira. O hook:

  • Roda fora do deny — permissĂ”es do baseline nĂŁo se aplicam
  • Roda sem prompt — a cada fim de turno
  • Erra quando a suĂ­te jĂĄ estava vermelha por motivo alheio — o agente passa a "consertar" o que ninguĂ©m pediu (violação de mudanças cirĂșrgicas)

Se a suĂ­te estĂĄ verde e Ă© rĂĄpida (< 2 min), estĂĄ seguro ligar. Se estĂĄ falhando ou Ă© lenta, deixe desligado e rode o /verify quando precisar. O Verifier Ă© do pipeline, onde hĂĄ contexto para decidir se refaz. Ver ADR-012.


Criando um profile customizado

  1. Crie src/profiles/meu-stack.yaml herdando da base mais prĂłxima:
extends: _base        # ou python-fastapi, node-typescript, etc.
name: meu-stack
description: "Minha stack customizada"

language: kotlin
runtime: "jvm>=21"
package_manager: gradle

testing:
  framework: junit5
  coverage_target: 80

design_system:
  tokens: none
  1. Valide o profile:
node src/cli.mjs profile show meu-stack
  1. Use:
octechpus init --stack=meu-stack

Consulte docs/profiles.md para a especificação completa do schema.


Projetos existentes

O CLI detecta CLAUDE.md existentes e faz merge automaticamente — seu conteĂșdo Ă© preservado abaixo da seção gerada pelo Octechpus.

cd projeto-existente
octechpus init
octechpus status

Migração do 1.x

npm install -g octechpus
cd seu-projeto
octechpus init        # detecta stack, faz merge do CLAUDE.md, atualiza commands
octechpus status
octechpus doctor

Breaking changes na 2.0:

  • CLAUDE.md ganhou seção Stack Profile no topo — o init faz merge automaticamente
  • docs/AGENTS.md renomeado para docs/OCTECHPUS_AGENTS.md
  • Commands passaram a usar placeholders {{stack.xxx}} em vez de nomes de linguagem hardcoded

Testes

npm test              # 773 testes, ~12s
npm run test:watch    # modo watch
npm run test:coverage # com cobertura

Cobertura: profile-loader, stack-detector, template-renderer, profile-advisor, cli-init, cli-permissions, cli-profile-commands, template-rendering-integration, agents-commands-sync, docs-check, secrets-scan, file-ops, settings-builder, vault, vault-check, agent-write-scope, dashboard.


Publicar no npm

A versĂŁo vive em dois lugares que precisam ficar em sync: package.json e src/lib/version.mjs. (AtĂ© a v2.17 essa constante morava em src/cli.mjs; saiu de lĂĄ na modularização — ADR-009.)

# bumpe version em package.json e src/lib/version.mjs (em sync) + CHANGELOG
npm test
git add package.json src/lib/version.mjs CHANGELOG.md
git commit -m "chore(release): bump version to X.Y.Z"
git push origin main

Manual — Ă© o caminho que funciona hoje. Requer token npm vĂĄlido em ~/.npmrc:

npm whoami && npm publish --access public && npm view octechpus version

AutomĂĄtico (pendente de configuração): o workflow .github/workflows/publish.yml publica via OIDC / Trusted Publishers quando a versĂŁo muda no main (e pula se jĂĄ estiver no npm). Ele ainda falha com npm error code ENEEDAUTH porque falta o vĂ­nculo — passo Ășnico no npmjs.com: pacote octechpus → Settings → Trusted Publisher → GitHub Actions (Phaiolli/octechpus-cli, workflow publish.yml, Environment em branco). Feito isso, gh workflow run publish.yml --ref main publica sem precisar de novo commit.

Detalhes e troubleshooting de auth: ver CLAUDE.md → "Como publicar no npm".


Links


VersĂŁo atual

2.21.0 — Um painel Ășnico e compartilhĂĄvel. octechpus dashboard funde a pĂĄgina de andamento e o grafo do vault num arquivo Ășnico, offline (docs/status/dashboard.html) — as duas visĂ”es em abas, cada uma num <iframe srcdoc>, zero requisição externa: envia-se como anexo. DeterminĂ­stico e puro fs, sem dependĂȘncia nova. O pipeline atualiza o painel no passo 11b (o Ășnico ponto onde agente e cĂłdigo coexistem), no mesmo commit da mudança; e um workflow de CI mantĂ©m o grafo em dia entre pipelines, com trĂȘs amarras contra loop. Instala por padrĂŁo, --no-dashboard recusa (ADR-014).

2.20.0 — O vault vira o modelo de contexto do sistema. O grafo deixa de ser opt-in: entra no init e no update por padrĂŁo (--no-vault recusa, com a recusa registrada), a raiz Ă© configurĂĄvel e validada, e o pipeline passa a escrever nele — uma nota de sessĂŁo por execução (persistida pelo orquestrador, nĂŁo pelo Reporter read-only) e a nota de mĂłdulo atualizada por toda demanda que toca o mĂłdulo, entĂŁo o grafo se enche pelo trabalho jĂĄ feito. Nova camada docs/dominio/ (glossario.md + invariantes.md) ataca a maior fonte de erro de agente fora do cĂłdigo: vocabulĂĄrio errado. vault check cruza o grafo com o filesystem como gate de CI (puro fs, sem dependĂȘncia nova) e vault map desenha o grafo em docs/status/vault.html. O campo leitor: agente | humano governa a tolerĂąncia Ă  obsolescĂȘncia — o check verifica os nĂłs de agente e ignora os de humano. Fecha a #27 com uma invariante estrutural travada por teste: instrução de escrita nunca Ă© injetada em agente sem ferramenta de escrita (ADR-013, substitui o ADR-010).

2.19.0 — Conhecimento sob demanda e verificação determinĂ­stica. TrĂȘs mudanças no custo de contexto: (1) quatro skills renderizadas por profile (convencoes-da-stack, padrao-de-testes, checklist-de-revisao, fluxo-de-commit-e-release) substituem blocos do CLAUDE.md que jĂĄ eram duplicados nos prompts dos agentes especĂ­ficos — template cai ~30%, sĂł o caminho ad-hoc perde detalhe e ganha um ponteiro nominalizado. Skills sĂŁo arquivos gerenciados com hash e overrides (ADR-011); (2) dois hooks podem ser ligados por projeto (opt-in): stop_check roda a suĂ­te como barrier ao fim de turno, post_edit_format formata o projeto pĂłs-edição — ambos determinĂ­sticos, residem no settings.json, com prune anĂĄlogo ao ADR-008 — e portabilidade Windows via proibição de metacaracteres (ADR-012); (3) campo model: no frontmatter dos agentes permite override por subagente (padrĂŁo inherit, que deixa a sessĂŁo decidir — pinar modelos revertiria o ADR-005 item 4 com evidĂȘncia de campo). Segurança: nĂŁo ligue stop_check num repositĂłrio que vocĂȘ nĂŁo confia executar inteiro — roda fora do deny, sem prompt, a cada fim de turno.

2.18.0 — MemĂłria de projeto que sobrevive ao merge. O novo octechpus vault init cria em docs/ um vault em grafo (formato Obsidian): 00-INDEX.md como Ășnico ponto de entrada, modulos/ com invariantes e armadilhas de cada mĂłdulo, sessoes/ com uma nota por execução do pipeline, tudo ligado por wikilinks. O ganho nĂŁo Ă© o formato — Ă© a forma de leitura: o agente entra pelo Ă­ndice e segue sĂł os links que a demanda exige, em vez de carregar o projeto inteiro no contexto. Com o vault presente, o CLAUDE.md ganha a instrução de navegação, o Docs mantĂ©m as notas dos mĂłdulos tocados e o Reporter grava a sessĂŁo — sem vault, nada muda. AdesĂŁo explĂ­cita, nunca sobrescreve nota existente, zero dependĂȘncia nova (ADR-010). Junto: o cli.mjs foi de 2.375 para 153 linhas — um mĂłdulo por comando em src/commands/, helpers em src/lib/, refactor puro verificado saĂ­da-a-saĂ­da contra o HEAD anterior (ADR-009) —, e a migração de regra inerte passou a logar os pares antes→depois (Glob(src/**) → Read(src/**)), com marca de atenção sĂł no allow, o Ășnico tier onde a conversĂŁo concede.

2.17.0 — A regra que o profile antigo deixou para trĂĄs finalmente sai. A v2.16.0 ligou regras que estavam mortas, e o campo mostrou o efeito colateral: guardrail de profile antigo, ĂłrfĂŁo pelo merge sĂł-aditivo, bloqueando pastas que o fluxo real precisa editar — sem opt-out durĂĄvel, porque deny vence allow em qualquer arquivo, inclusive em bypassPermissions. Agora o baseline emitido Ă© registrado no manifest e podado no merge seguinte; regra que nunca esteve em baseline (a sua) Ă© sempre preservada. Para o resto, manifest.json → excludeRules remove por match exato e nunca reinjeta, com o doctor listando as exclusĂ”es ativas (ADR-008). Quatro correçÔes que valem citar: {{#each}} corrompia item contendo $ (e profiles carregam regex nos arrays); octechpus status meuprojeto rodava em silĂȘncio no cwd em vez de errar alto; docs-check reprovava todo link relativo vĂĄlido no Windows por um separador POSIX cravado; e octechpus --version imprimia o help inteiro, porque os case de flag no roteador eram inalcançåveis.

2.16.0 — O que era escrito Ă  mĂŁo no CLAUDE.md para de sumir. Duas correçÔes de perda de dados, uma delas observada em campo (327 linhas apagadas em silĂȘncio). O profile switch reescrevia o arquivo inteiro quando faltava o marcador 📋 PROJECT DOCUMENTATION — e a mensagem do update mandava o usuĂĄrio justamente para lĂĄ. O update, por sua vez, descartava tudo acima do marcador, onde os projetos guardam regra de negĂłcio e tabela de gate lida pelo CI. Agora seção que nĂŁo veio do template faz o comando recusar e listar o que se perderia; --force assume a perda. Toda sobrescrita passa a gravar backup em .octechpus/backups/. Junto: as regras Write(path) do settings.json, que o Claude Code aceita mas nunca consulta — 13 avisos por sessĂŁo —, viram Edit(path), e o update converte as que jĂĄ estĂŁo nos projetos, porque um merge sĂł-aditivo nunca as removeria.

2.15.0 — /progress: a pĂĄgina que o cliente abre. Um comando novo gera docs/status/index.html — andamento do projeto em portuguĂȘs simples, sem sigla, sem score, sem escala de severidade — com histĂłrico por perĂ­odo e prova citada (SHA, issue fechada, PR mesclado) para toda afirmação de "pronto". Descobre o vocabulĂĄrio de fase do projeto em vez de assumir (milestone → doc de plano → CHANGELOG+tags → semana), trata "parado" como categoria prĂłpria com limiar visĂ­vel, Ă© idempotente (carimba a data do Ășltimo commit, nĂŁo a do relĂłgio), abre por duplo clique sem rede, e escapa tĂ­tulo de issue nas duas camadas — HTML no corpo e unicode no JSON embutido, porque um </script> num tĂ­tulo fecha o bloco. Entra no pipeline como passo 11b, depois do Reporter. Automação de atualização Ă© proposta, nunca instalada.

2.14.1 — O Octechpus passa a se declarar ao agente. Os arquivos gerados são output de template, não código-fonte do projeto — e nada dizia isso, então o agente os "consertava" e inventava justificativa arquitetural para o que era interpolação de {{var}}. Cinco camadas: o CLAUDE.md declara, o settings.json impede (deny de Edit/Write), o update preserva, o novo octechpus integrity-check e o passo 8 do /audit denunciam com nome de arquivo, e um guard de downgrade protege contra CLI velho regredindo a instalação. Corrige docs/OCTECHPUS_AGENTS.md, que era sobrescrito cego a cada update. Zera o npm audit (js-yaml → 4.3.1, vitest → 4.x).
Veja o CHANGELOG e a ADR-006.

Veja o CHANGELOG para o histĂłrico completo.


Licença

MIT