trailofbits/open-sourcing

Esta habilidade deve ser usada quando o usuário solicitar

O que é open-sourcing?

Esta habilidade fornece um fluxo de trabalho completo e estruturado para abrir o código-fonte (open source) de um repositório garantindo que ele seja seguro, bem documentado e fácil de usar para colaboradores externos. O processo começa com uma auditoria obrigatória de segredos (etapa 2), que é crucial porque segredos expostos no histórico não podem ser completamente removidos depois da publicação. Em seguida, o fluxo abrange verificação de prontidão, documentação (README, SECURITY.md, licença), configuração de testes e CI, proteção do repositório, versionamento semântico e empacotamento específico por linguagem. A habilidade suporta repositórios de qualquer organização, com detecção automática de perfil (como 'trailofbits') para aplicar políticas específicas. Scripts auxiliares são fornecidos para detectar o perfil organizacional e verificar a prontidão geral, e referências detalhadas orientam sobre licenciamento e práticas para Python, C/C++, Rust, Go, JavaScript e Ruby. O objetivo é garantir que um estranho sem contexto prévio consiga construir, usar e contribuir com o projeto, e que nada sensível seja incluído no lançamento.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/trailofbits/skills/tree/main/plugins/open-sourcing/skills/open-sourcing

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Abrindo um Repositório para Open Source

Prepare um repositório para lançamento público, de modo que uma pessoa externa, sem contexto prévio, possa construir, usar e contribuir com ele — e para que nada sensível seja incluído. Siga as etapas em ordem; a auditoria de segredos vem primeiro porque seu resultado (manter vs. recriar o repositório) afeta tudo o que vem depois.

Quando Usar

  • Tornar um repositório privado público
  • Auditar um repositório público existente quanto à qualidade de lançamento ("torná-lo oficial")
  • Escolher uma licença para um projeto
  • Configurar empacotamento, versionamento ou automação de release antes de um lançamento público

Quando NÃO Usar

  • Desenvolvimento rotineiro em um projeto já lançado (sem evento de release)
  • Auditar código de terceiros em busca de vulnerabilidades (use uma habilidade de revisão de segurança)
  • Publicar um pacote a partir de um repositório que permanecerá privado — apenas as etapas de gerenciamento de release se aplicam; pule o restante

Fluxo de Trabalho

Etapa 1: Detectar o perfil da organização

bash {baseDir}/scripts/detect_org.sh

O script inspeciona os remotes git e os e-mails dos commiters recentes e imprime um nome de perfil. Se imprimir trailofbits, leia references/trailofbits.md agora e aplique sua política de licenciamento, contas de publicação e notas de processo ao longo das etapas restantes. Se imprimir generic, prossiga apenas com as orientações genéricas. Se o usuário disser que a detecção está errada, confie no usuário.

Etapa 2: Auditar segredos — antes de qualquer outra coisa

Um repositório que já conteve segredos (chaves de API, credenciais, dados de clientes) não deve ser tornado público. Reescrever o histórico é propenso a erros e não atinge forks, caches ou artefatos de CI. A correção confiável é um repositório novo: copie a árvore atual, faça commit e arquive o repositório antigo de forma privada.

  1. Pergunte se o projeto já lidou com segredos ou material confidencial de clientes. Para ferramentas de consultoria de segurança, pergunte também se dados de teste ou exemplos vieram de compromissos com clientes.
  2. Escaneie o histórico completo com uma ferramenta dedicada, se disponível — gitleaks git . ou trufflehog git file://. — em vez de inspecionar manualmente.
  3. Verifique além da árvore git: logs e artefatos do GitHub Actions, releases antigos, histórico de issues e PRs, e o wiki do repositório — tudo se torna público com o repositório.
  4. Após tornar público, ative a varredura de segredos do GitHub e a proteção contra push nas configurações do repositório.

Rejeite estas racionalizações — esta é a única etapa que não pode ser corrigida após a publicação:

  • "A chave foi revogada, então o histórico está limpo." Credenciais revogadas ainda vazam nomes de infraestrutura, URLs internos e padrões que atacantes usam para Mira.
  • "Vamos reescrever o histórico com git-filter-repo." Reescrever perde forks, clones, caches e artefatos de CI; a abordagem de repositório novo não.
  • "São apenas dados de teste." Dados de teste derivados de compromissos com clientes ou sistemas de produção são confidenciais, independentemente de como são rotulados.

Etapa 3: Executar a verificação de prontidão

bash {baseDir}/scripts/check_readiness.sh

O script imprime uma lista de verificação de indicadores de presença (README, LICENSE, CONTRIBUTING, SECURITY.md, CI, testes, tags semver, ...) e avisa sobre arquivos rastreados que comumente contêm segredos. Trate itens não marcados como sugestões de discussão, não como falhas críticas — um protótipo de pesquisa não precisa de tudo que uma biblioteca de ponta precisa. Percorra as lacunas com o usuário e corrija as que importam para este projeto.

Etapa 4: Documentação

O README é a porta de entrada do projeto. Confirme que ele explica:

  • O que é o projeto e qual problema ele resolve (primeiro parágrafo)
  • Como instalá-lo — gerenciador de pacotes, imagem de contêiner ou compilação a partir do código-fonte; a compilação a partir de um clone novo deve funcionar usando apenas o que está no repositório
  • Como usá-lo — pelo menos um exemplo concreto e copiável
  • Como contribuir — inline ou via CONTRIBUTING.md
  • A licença — uma seção curta nomeando-a

Adicione também:

  • SECURITY.md com instruções para relatar vulnerabilidades (um endereço de contato ou relatório privado de vulnerabilidade do GitHub). Para ferramentas de segurança, isso é requisito básico.
  • Documentação da API, construída e hospedada (GitHub Pages via CI é o caminho usual), vinculada a partir do README e do campo de site do repositório. Veja as referências de linguagem abaixo para ferramentas de documentação por ecossistema.
  • Um código de conduta se o projeto espera contribuidores externos.

Etapa 5: Licenciamento

Sem licença não é open source, independentemente da visibilidade. Leia references/licensing.md para critérios de seleção e mecânica. A versão resumida:

  1. Aplique a política da organização, se uma foi detectada na Etapa 1.
  2. Caso contrário: Apache 2.0 como padrão permissivo, AGPLv3 quando a modificação privada por concorrentes for uma preocupação real, Creative Commons para artefatos não relacionados a código.
  3. Adicione o arquivo LICENSE, defina identificadores SPDX nos metadados do pacote, declare a licença no README e verifique se todos os três concordam.

Etapa 6: Testes e CI

  • Confirme que a suíte de testes existe e passa; um repositório público com uma branch padrão com falha sinaliza abandono.
  • Garanta que o CI execute os testes em cada PR, em toda a matriz de versões de linguagem e plataformas suportadas.
  • Imponha formatação e linting no CI (ferramentas por linguagem nas referências abaixo), para que debates de estilo nunca cheguem à revisão.
  • Respeite as ferramentas existentes. Não substitua um formatador, linter ou verificador de tipos funcional como parte da abertura do código. Se ele estiver desatualizado em relação à geração atual (as referências de linguagem nomeiam as ferramentas atuais), avise o mantenedor e deixe-o decidir; apenas quando uma categoria estiver completamente ausente — sem verificador de tipos, sem formatador — adicione o padrão atual.
  • Considere um gate de cobertura que falhe o CI quando a cobertura cair.
  • Reforce os próprios workflows antes que se tornem superfície de ataque pública:
    • Fixe ações de terceiros a SHAs completos de commit; habilite Dependabot para github-actions para que os pinnings permaneçam atualizados.
    • Defina blocos permissions: com privilégio mínimo (comece com permissions: {}).
    • Audite com zizmor .github/workflows/ e faça lint com actionlint.

Etapa 7: Configurações do repositório

  • Proteção de branch na branch padrão: sem force push, PRs obrigatórios. Prefira conjuntos de regras para repositórios novos; a proteção clássica de branch continua suportada.
  • Proteção de merge: verificações de status obrigatórias para que PRs não possam ser mesclados com testes falhando.
  • Dependabot ou Renovate para atualizações de dependências e Actions. Agrupe atualizações para reduzir o ruído de PRs e defina uma janela de espera (ex.: 7 dias) para que versões recém-publicadas — e ocasionalmente sequestradas — envelheçam antes da adoção.
  • .editorconfig para que os editores dos contribuidores concordem com o básico de espaçamento.
  • Labels: crie-os assim que mais de uma issue ou PR precisar de um; prefixos para facetas escalam bem (C: componente, P: plataforma). Veja as labels do blight para um exemplo prático.

Etapa 8: Releases e versionamento

  • Marque cada release com vX.Y.Z, seguindo semver; use sufixos -rc.N / -pre.N para release candidates e pré-lançamentos.
  • Torne os releases orientados por CI: enviar uma tag (ou publicar um GitHub Release) aciona compilação, empacotamento e upload sem etapas manuais. Um release deve ser git tag vX.Y.Z && git push origin vX.Y.Z.
  • Publique pacotes sob uma conta de propriedade da organização, não pessoal, e use publicação confiável (OIDC) em vez de tokens de longa duração sempre que o índice suportar.

Etapa 9: Práticas específicas por linguagem

Identifique as linguagens do projeto a partir de seus arquivos de marcação e leia a referência correspondente para empacotamento, publicação e ferramentas de qualidade:

Arquivo de marcaçãoReferência
pyproject.toml, setup.pyreferences/python.md — delega à habilidade de python moderno para ferramentas
CMakeLists.txt, Makefile (C/C++)references/c-cpp.md
Cargo.tomlreferences/rust.md
go.modreferences/go.md
package.jsonreferences/javascript.md
Gemfile, *.gemspecreferences/ruby.md

Para outros ecossistemas, aplique os princípios transversais: compilações reproduzíveis a partir de um clone novo, releases orientados por CI, publicação confiável ou contas de propriedade da organização, e metadados de licença no manifesto do pacote.

Revisão Final

Antes de virar a chave de visibilidade, verifique da perspectiva de um externo:

  1. Clone em um diretório limpo e siga as instruções de compilação do README ao pé da letra — elas funcionam sem conhecimento tácito?
  2. Execute novamente {baseDir}/scripts/check_readiness.sh e confirme que as lacunas restantes são escolhas deliberadas, declaradas ao usuário.
  3. Confirme que a auditoria de segredos (Etapa 2) realmente aconteceu; é a única etapa que não pode ser corrigida após a publicação.

Tornar o repositório público é então uma alteração nas configurações do repositório. Acompanhe o release com um anúncio onde a organização tem um processo para isso.

Recursos Adicionais

Arquivos de Referência

Scripts

  • scripts/detect_org.sh — imprime o perfil da organização (trailofbits ou generic) a partir de remotes git e e-mails de commiters
  • scripts/check_readiness.sh — imprime indicadores de presença para arquivos de prontidão de release e sinaliza arquivos rastreados que comumente contêm segredos

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

trailofbits/address-sanitizer

AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C/C++ code to find buffer overflows and use-after-free bugs.

trailofbits/aflpp

AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C/C++ projects.

trailofbits/agentic-actions-auditor

Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI/CD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI/CD pipeline security for prompt injection risks, or evaluating agentic action configurations.

trailofbits/algorand-vulnerability-scanner

Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL/PyTeal).

trailofbits/ask-questions-if-underspecified

Clarify requirements before implementing. Use when serious doubts arise.

trailofbits/atheris

Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.

trailofbits/audit-augmentation

Augments Trailmark code graphs with external audit findings from SARIF static analysis results and weAudit annotation files. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, cross-referencing Semgrep or CodeQL findings with call graph data, or visualizing audit findings in the context of code structure.

trailofbits/audit-context-building

Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.

trailofbits/audit-prep-assistant

Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).

trailofbits/burpsuite-project-parser

Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.

trailofbits/cairo-vulnerability-scanner

Scans Cairo/StarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.

trailofbits/cargo-fuzz

cargo-fuzz is the de facto fuzzing tool for Rust projects using Cargo. Use for fuzzing Rust code with libFuzzer backend.

trailofbits/chrome-mcp-troubleshooting

Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.

trailofbits/claude-in-chrome-troubleshooting

Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.

trailofbits/code-improver

Runs an autonomous review-and-fix improvement loop over any code target — a skill, plugin, module, or directory — using a reviewer the user names: any installed skill or agent. Keeps a cross-round findings ledger, escalates when fixes stop converging, and guards scope mechanically. Use when asked to 'improve this code until review passes', 'run an improvement loop with <reviewer>', or to iterate review-and-fix with a specific reviewer. For skills prefer the skill-improver entry; for a branch prefer pr-improver.

trailofbits/code-maturity-assessor

Systematic code maturity assessment using Trail of Bits' 9-category framework. Analyzes codebase for arithmetic safety, auditing practices, access controls, complexity, decentralization, documentation, MEV risks, low-level code, and testing. Produces professional scorecard with evidence-based ratings and actionable recommendations.

trailofbits/codeql

Scans a codebase for security vulnerabilities using CodeQL's interprocedural data flow and taint tracking analysis. Triggers on "run codeql", "codeql scan", "codeql analysis", "build codeql database", or "find vulnerabilities with codeql". Supports "run all" (security-and-quality + security-experimental suites) and "important only" (high-precision security findings) scan modes. Also handles creating data extension models and processing CodeQL SARIF output.

trailofbits/constant-time-analysis

Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.

trailofbits/constant-time-testing

Constant-time testing detects timing side channels in cryptographic code. Use when auditing crypto implementations for timing vulnerabilities.

trailofbits/cosmos-vulnerability-scanner

Scans Cosmos SDK blockchain modules and CosmWasm contracts for consensus-critical vulnerabilities — chain halts, fund loss, state divergence. 25 core + 16 IBC + 10 EVM + 3 CosmWasm patterns. Use when auditing custom x/ modules, reviewing IBC integrations, or assessing pre-launch chain security. Updated for SDK v0.53.x.

Habilidades Relacionadas