octechpus
v2.21.0
Published
đ Octechpus â Agent Orchestrator CLI for Claude Code projects
Maintainers
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 initRequisitos: Node.js >= 20
Quick start
npx octechpus initSem 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 emprojectDire no diretĂłrio atual, ignorandonode_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
âââ genericO 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 CodeDesign system: o
initscaffoldadesign-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:tailwindmanda o preset,css-onlysĂł as variĂĄveis CSS,noneapenas 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 âupdatesĂł 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 osettings.json.
v2.16.1 â o
settings.local.jsontambĂ©m Ă© limpo. O CLI nunca cria esse arquivo nem injeta baseline nele, mas, se ele jĂĄ existir,init/update/profile switchconvertem 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
allowdepois 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) eNotebookEdit(x)âEdit(x)(notebook vira qualquer arquivo). Emdeny/aska conversĂŁo sĂł aperta; emallow, 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,docseprofilerpinados em haiku deixaram defeitos de template passarem despercebidos por meses.) Precisa de piso? Sobrescrevaagents_runtimeno profile, com um comentĂĄrio explicando o porquĂȘ.
v2.6 â orquestração real: o
/pipelinedelega cada fase ao subagent via ferramentaTask(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/audittambĂ©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 chaveshooks/env/etc.) em vez de pular o arquivo. Umsettings.jsoninvålido nunca é sobrescrito. Oinit/updatetambé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:
- Think Before Coding â Architect declara premissas e define critĂ©rios testĂĄveis antes de qualquer plano
- Simplicity First â Coder proĂbe abstraçÔes prematuras e cĂłdigo defensivo desnecessĂĄrio
- Surgical Changes â Coder altera o mĂnimo necessĂĄrio; Reviewer rejeita escopo extra
- 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 # AjudaVault 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/highO 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 checkcruza o vault com o filesystem (purofs):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 odocs-check.vault mapdesenha o grafo emdocs/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 rodaoctechpus dashboardâ o Ășnico ponto onde agente e cĂłdigo coexistem, e cai no mesmo commit da mudança. - Na CI (
pushdomain): o workflowoctechpus-dashboard.ymlregenera 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-dashboardrecusa 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:
- Nunca reporta resultado que nĂŁo obteve executando. Sem nĂșmero estimado. Comando
inexistente â
n/a, nunca inventado. Falha de ambiente âerror, nĂŁofail. - NĂŁo conserta nada. Ă o gate, nĂŁo o Coder. Achou falha, devolve com a saĂda real.
- 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:
- Secret manager (1Password/Vault/Doppler/AWS SM) injetando no processo â nada em disco.
.envfora da ĂĄrvore do projeto (~/.config/app/.env), referenciado por caminho absoluto..envno projeto, gitignored â aceitĂĄvel, e o padrĂŁo da maioria. Ă o que a camada 1 bloqueia para o agente.- â 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 falhamAchados 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-checkNo 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 --forceSemĂą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
- Crie
src/profiles/meu-stack.yamlherdando 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- Valide o profile:
node src/cli.mjs profile show meu-stack- Use:
octechpus init --stack=meu-stackConsulte 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 statusMigraçã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 doctorBreaking changes na 2.0:
CLAUDE.mdganhou seçãoStack Profileno topo â oinitfaz merge automaticamentedocs/AGENTS.mdrenomeado paradocs/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 coberturaCobertura: 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 mainManual â Ă© o caminho que funciona hoje. Requer token npm vĂĄlido em ~/.npmrc:
npm whoami && npm publish --access public && npm view octechpus versionAutomå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
- npm: npmjs.com/package/octechpus
- GitHub: github.com/Phaiolli/octechpus-cli
- Issues: github.com/Phaiolli/octechpus-cli/issues
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
