context-distill

context-distill é um servidor MCP que comprime saídas de comandos ruidosas em resumos precisos e acionáveis para fluxos de trabalho com LLMs. Use distill_batch para logs grandes e distill_watch para deltas ciclo a ciclo. Construído com Go, Cobra, Viper e DI para destilação confiável local e com suporte a provedores.

Documentação

context-distill — A Context-Aware Text Summarization Library

context-distill

Uma ferramenta Go que destila a saída de comandos e recupera contexto de código antes que chegue a um LLM pago. Disponível como Skill (recomendado), CLI autônomo e servidor MCP. Inspirado no CLI distill e construído com arquitetura hexagonal, injeção de dependência e TDD.

Visão Geral

context-distill expõe quatro operações acessíveis de três maneiras:

ModoMelhor paraComo funciona
Skill ⭐ (recomendado)Qualquer agente que consiga ler markdown e executar comandos de shellO agente lê um arquivo SKILL.md do próprio diretório de skills e aprende quando e como invocar o CLI. Zero configuração no lado do agente.
CLIScripts locais, pipelines de CI, agentes com capacidade de shellSubcomandos diretos: context-distill distill_batch, context-distill distill_mcp_output, context-distill distill_watch, context-distill search_code.
MCPAgentes/clientes com suporte nativo a MCP (Claude Desktop, Cursor, Codex…)Executa como servidor MCP sobre transporte stdio.
OperaçãoPropósito
distill_batchComprime a saída completa de um comando para responder a uma única pergunta explícita.
distill_mcp_outputDestila payloads MCP brutos, ou chama uma ferramenta MCP e destila o resultado em uma única etapa.
distill_watchCompara dois snapshots consecutivos e retorna apenas o delta relevante.
search_codeLocaliza código relevante no repositório e retorna correspondências compactas para a próxima etapa de raciocínio.

Todos os três modos compartilham os mesmos casos de uso subjacentes, regras de validação e comportamento de saída. Apenas o método de invocação difere.

Também oferece:

  • Configuração de provedor LLM via YAML e variáveis de ambiente.
  • Interface de terminal interativa para configuração inicial (--config-ui).
  • Suporte a Ollama e qualquer provedor compatível com OpenAI.

Por que o Modo Skill é Recomendado

SkillCLIMCP
Configuração de agente necessáriaNenhuma — basta colocar SKILL.md no diretório de skills do agenteO agente precisa saber executar comandos de shellRegistrar servidor na configuração do cliente
Funciona entre agentes✅ Qualquer agente que leia markdown✅ Qualquer agente que execute shell⚠️ Apenas clientes compatíveis com MCP
Complexidade de configuraçãoCopiar um arquivo por agenteInstalar binárioInstalar binário + registrar transporte
PortabilidadeFunciona em qualquer repositórioFunciona em qualquer shellVinculado à configuração do cliente MCP

O modo Skill funciona porque agentes de codificação modernos (Codex, Claude Code, Cursor, Aider, OpenCode…) já sabem ler documentação de projeto e executar comandos de shell. Um arquivo SKILL.md ensina ao agente quando destilar ou recuperar contexto de código e como chamar o CLI — sem necessidade de integração de protocolo.

Recursos

  • Interface tripla — arquivo Skill para adoção sem configuração + CLI para uso direto no shell + ferramentas MCP para clientes nativos de protocolo.
  • Quatro operações principais — distill_batch, distill_mcp_output, distill_watch e search_code.
  • Arquitetura hexagonal — distill/domain, distill/application, platform/*.
  • Injeção de dependência via sarulabs/di.
  • Gerenciamento de configuração com viper + .env.
  • Validação específica por provedor no momento da configuração.
  • Interface de configuração interativa (--config-ui).
  • Testes unitários, de integração e opcionais ao vivo.

Requisitos

  • Go 1.26+
  • Make (recomendado)

Se preferir não compilar, você pode instalar um binário pré-compilado dos GitHub Releases (veja abaixo).

Instalação

Opção A: Compilar a partir do código-fonte

make build

O binário é colocado em ./bin/context-distill.

Para instalá-lo no seu PATH:

make install
# installs to ~/.local/bin/context-distill

Opção B: Binário pré-compilado (sem necessidade de compilação)

Linux / macOS:

# Latest release
curl -fsSL https://raw.githubusercontent.com/jcastilloa/context-distill/master/scripts/install.sh | sh

# Specific version
curl -fsSL https://raw.githubusercontent.com/jcastilloa/context-distill/master/scripts/install.sh | VERSION=vX.Y.Z sh

Windows (PowerShell):

# Latest release
iwr https://raw.githubusercontent.com/jcastilloa/context-distill/master/scripts/install.ps1 -UseBasicParsing | iex

# Specific version
$env:VERSION='vX.Y.Z'; iwr https://raw.githubusercontent.com/jcastilloa/context-distill/master/scripts/install.ps1 -UseBasicParsing | iex

Variáveis de ambiente do instalador:

VariávelPadrão
REPOjcastilloa/context-distill
SERVICE_NAMEcontext-distill
INSTALL_DIR~/.local/bin (Linux/macOS) · %LOCALAPPDATA%\context-distill\bin (Windows)
VERSIONTag da versão mais recente

Alvos do Makefile

make help
AlvoDescrição
make buildCompila o binário para ./bin/context-distill
make installInstala o binário em ~/.local/bin/context-distill
make cleanRemove ./bin

Início Rápido

1. Configure o provedor (todos os modos)

context-distill --config-ui

2. Verifique se funciona

echo "PASS: TestA, PASS: TestB, FAIL: TestC - expected 4 got 5" | context-distill distill_batch --question "Did tests pass? Return only PASS or FAIL. If FAIL, list failing test names."
context-distill distill_watch --question "What changed? Return one short sentence." --previous-cycle "services: api=OK, db=OK, cache=OK" --current-cycle "services: api=OK, db=FAIL, cache=OK"
context-distill distill_mcp_output \
  --tool-name "list_items" \
  --question "Return only item names, one per line." \
  --output '[{"type":"text","text":"[{\"id\":\"a1\",\"name\":\"Alpha\"},{\"id\":\"b2\",\"name\":\"Beta\"}]"}]'
context-distill distill_mcp_output \
  --server-command "/absolute/path/to/mcp-server" \
  --server-arg "--transport" \
  --server-arg "stdio" \
  --tool-name "get_status" \
  --tool-arguments '{"scope":"production"}' \
  --question "Return only status and version as JSON."
context-distill search_code --query "provider_name" --mode text --question "Return only file:line, one per line."

Se os comandos retornarem respostas compactas esperadas, a configuração está pronta.

3. Escolha seu modo

⭐ Modo Skill (recomendado)

Copie SKILL.md para o diretório de skills apropriado do agente (veja Configuração do Skill). Seu agente o lerá automaticamente e começará a destilar.

Modo CLI

Use os subcomandos diretamente em scripts ou chamadas de shell do agente:

# Pipe (preferred)
echo "data" | context-distill distill_batch --question "..."

# Explicit flag
context-distill distill_batch --question "..." --input "data"

# Explicit stdin marker
echo "data" | context-distill distill_batch --question "..." --input -

# MCP payload distillation
context-distill distill_mcp_output --tool-name "list_items" --question "Return only item names." --output '<mcp payload>'

# MCP call + distillation in one step
context-distill distill_mcp_output --server-command "/absolute/path/to/mcp-server" --server-arg "--transport" --server-arg "stdio" --tool-name "get_status" --tool-arguments '{"scope":"production"}' --question "Return only status and version as JSON."

# Code retrieval
context-distill search_code --query "LoadDistillConfig" --mode symbol --question "Return likely definitions first as file:line, one per line."

Modo MCP

context-distill --transport stdio

Em seguida, registre o servidor no seu cliente MCP (veja Registro de Cliente MCP).


Configuração do Skill (Recomendado)

O skill instalável canônico agora vive em SKILL.md.

Esse arquivo é o lugar mais claro para aprender o comportamento e o arquivo mais fácil de copiar para um diretório de skills de agente.

O skill agora cobre quatro fluxos de trabalho concretos:

  1. Destilar saída longa de comando com distill_batch.
  2. Destilar payloads MCP brutos que você já possui com distill_mcp_output --output.
  3. Chamar uma ferramenta MCP e destilar o resultado em uma única etapa com distill_mcp_output --server-command.
  4. Localizar código antes de abrir muitos arquivos com search_code.

Modelos adicionais prontos para copiar estão aqui:

Onde instalar o Skill

Instale SKILL.md no nível do projeto, no nível global, ou em ambos:

AgenteCaminho no nível do projetoCaminho global
Claude Code.claude/skills/context-distill/SKILL.md~/.claude/skills/context-distill/SKILL.md
Codex.codex/skills/context-distill/SKILL.md~/.codex/skills/context-distill/SKILL.md
OpenCode.opencode/skills/context-distill/SKILL.md~/.opencode/skills/context-distill/SKILL.md
Cursor.cursor/skills/context-distill/SKILL.md~/.cursor/skills/context-distill/SKILL.md

Nível do projeto (recomendado para equipes): todo agente que trabalha no repositório o adota automaticamente.

Global (recomendado para uso pessoal): disponível em todos os projetos sem configuração por repositório.

Exemplo de instalação rápida (Claude Code, nível do projeto)

mkdir -p .claude/skills/context-distill
cp SKILL.md .claude/skills/context-distill/SKILL.md

Exemplo de instalação rápida (todos os agentes, global)

for agent in .claude .codex .opencode .cursor; do
  mkdir -p ~/"$agent"/skills/context-distill
  cp SKILL.md ~/"$agent"/skills/context-distill/SKILL.md
done

Referência de Comandos CLI

Os comandos CLI fornecem as mesmas capacidades das ferramentas MCP (destilação + recuperação de código), mas são invocados diretamente do shell. Use-os em scripts locais, pipelines de CI ou com runtimes de agente que executam comandos de shell em vez de ferramentas MCP.

Métodos de entrada

# 1. Pipe (preferred)
echo "data" | context-distill distill_batch --question "..."

# 2. Explicit flag
context-distill distill_batch --question "..." --input "data"

# 3. Explicit stdin marker
echo "data" | context-distill distill_batch --question "..." --input -

distill_batch

Destila um payload de saída bruto usando um contrato de pergunta explícito.

go test ./... 2>&1 | context-distill distill_batch --question "Did all tests pass? Return only PASS or FAIL."

Flags:

FlagObrigatóriaDescrição
--questionsimPergunta exata a ser respondida a partir da saída do comando.
--inputnãoSaída bruta do comando a ser destilada. Se omitida, lê da entrada padrão.

distill_mcp_output

Destila resultados MCP em um destes modos:

  1. Você já possui um payload MCP bruto e o passa com --output.
  2. Você quer que context-distill chame uma ferramenta MCP primeiro e depois destile o resultado.
context-distill distill_mcp_output \
  --tool-name "list_items" \
  --question "Return only item names, one per line." \
  --output '<mcp payload>'
context-distill distill_mcp_output \
  --server-command "/absolute/path/to/mcp-server" \
  --server-arg "--transport" \
  --server-arg "stdio" \
  --tool-name "get_status" \
  --tool-arguments '{"scope":"production"}' \
  --question "Return only status and version as JSON."

Flags:

FlagObrigatóriaDescrição
--questionsimPergunta exata a ser respondida a partir do resultado MCP.
--tool-namenão*Contexto útil ao usar --output; obrigatório ao invocar um servidor.
--outputnão*Payload MCP bruto a ser destilado diretamente.
--server-commandnão*Binário do servidor MCP a ser invocado quando --output for omitido.
--server-argnãoArgumento do servidor MCP. Repita para múltiplos valores.
--tool-argumentsnãoObjeto JSON passado à ferramenta MCP de destino.

* Você deve fornecer --output ou uma invocação de servidor (--server-command + --tool-name).

distill_watch

Destila apenas o delta relevante entre dois snapshots.

context-distill distill_watch \
  --question "Return only newly failing services, one per line." \
  --previous-cycle "$(cat /tmp/health.prev)" \
  --current-cycle "$(cat /tmp/health.curr)"

Flags:

FlagObrigatóriaDescrição
--questionsimPergunta exata a ser respondida a partir das mudanças do ciclo.
--previous-cyclesimSnapshot de saída do ciclo de observação anterior.
--current-cyclesimSnapshot de saída do ciclo de observação atual.

search_code

Pesquisa código do repositório localmente e destila correspondências compactas de acordo com --question.

context-distill search_code \
  --query "distill_watch" \
  --mode symbol \
  --question "Return definitions first, then usages, as file:line."

Importante:

  • A sintaxe do CLI usa flags. Use --query, --mode, --question, --max-results, --context-lines.
  • Não use argumentos de shell como search_code mode=text query="..." max_results=5 (esse formato não é sintaxe CLI válida).
  • Para --mode path, trate --query como um fragmento de caminho (por exemplo, .go) e use --scope para filtros glob.

Flags:

FlagObrigatóriaDescrição
--querysimConsulta de busca para texto, regex, nome de símbolo ou fragmento de caminho.
--modesimModo de busca: text, regex, symbol ou path.
--questionsimContrato de saída para o resultado compacto final.
--scopenãoFiltros glob opcionais (repita a flag ou separe por vírgula).
--max-resultsnãoLimite rígido para candidatos retornados (padrão 20).
--context-linesnãoLinhas de contexto ao redor de cada correspondência (padrão 2).

Notas do CLI

  • Os comandos CLI e as ferramentas MCP compartilham os mesmos casos de uso subjacentes e regras de validação.
  • Entradas inválidas/ausentes retornam código de saída diferente de zero.
  • A saída é gravada na saída padrão exatamente como produzida pelo caso de uso selecionado.

Modo Servidor MCP

Executando o servidor

context-distill --transport stdio
# or without building:
go run ./cmd/server --transport stdio

Versão

go run ./cmd/server version

Flags do Servidor

FlagDescriçãoPadrão
--transportModo de transporte MCP (stdio)service.transport
--config-uiAbrir interface de configuração e sairfalse

Registro de Cliente MCP

Após compilar ou instalar o binário, registre-o no seu cliente MCP para usar a interface de ferramentas.

Clientes baseados em JSON (Claude Desktop, Cursor, etc.)

{
  "mcpServers": {
    "context-distill": {
      "command": "/absolute/path/to/context-distill",
      "args": ["--transport", "stdio"]
    }
  }
}

Codex — TOML manual (recomendado)

Adicione a ~/.codex/config.toml:

[mcp_servers.context-distill]
command = "/absolute/path/to/context-distill"
args = ["--transport", "stdio"]
startup_timeout_sec = 20.0

Se você usou make install:

[mcp_servers.context-distill]
command = "/home/<your-user>/.local/bin/context-distill"
args = ["--transport", "stdio"]
startup_timeout_sec = 20.0

Codex — registro via CLI

codex mcp add context-distill -- /absolute/path/to/context-distill --transport stdio

Verifique:

codex mcp list
codex mcp get context-distill

Reinicie sua sessão do Codex para que ele reconheça o novo servidor.

OpenCode — CLI interativo

opencode mcp add

Siga os prompts:

  1. Localização → Current project ou Global.
  2. Nome → context-distill.
  3. Tipo → local.
  4. Comando → /absolute/path/to/context-distill --transport stdio.

Verifique:

opencode mcp list

Se o servidor ainda não estiver conectado, reinicie sua sessão do OpenCode.

OpenCode — configuração manual (opencode.json)

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "context-distill": {
      "type": "local",
      "command": ["/absolute/path/to/context-distill", "--transport", "stdio"],
      "enabled": true
    }
  }
}

Notas de registro

  • Sempre use um caminho absoluto para o binário.
  • Sempre use transporte stdio.
  • Se o servidor não aparecer, execute codex mcp list --json para inspecionar a configuração resolvida.

Referência de Ferramentas MCP

As ferramentas MCP expõem as mesmas capacidades dos comandos CLI (destilação + recuperação de código), mas são consumidas por clientes compatíveis com MCP sobre o transporte stdio.

distill_batch

ParâmetroTipoObrigatórioDescrição
questionstringsimO que extrair da entrada. Deve incluir um contrato de saída.
inputstringsimSaída bruta do comando a ser destilada.

Retorna uma resposta curta e focada para question.

distill_watch

ParâmetroTipoObrigatórioDescrição
questionstringsimQual delta relatar. Deve incluir um contrato de saída.
previous_cyclestringsimSnapshot do ciclo anterior.
current_cyclestringsimSnapshot do ciclo atual.
Retorna um resumo curto das alterações relevantes, ou uma mensagem de nenhuma alteração quando nada significativo difere.

search_code

ParâmetroTipoObrigatórioDescrição
querystringsimConsulta de busca para texto, regex, símbolo ou caminho.
modestringsimModo de busca: text, regex, symbol, path.
questionstringsimContrato de saída para a resposta destilada.
scopearray[string]nãoFiltros opcionais de escopo glob.
max_resultsnumbernãoLimite rígido de correspondências (padrão 20).
context_linesnumbernãoLinhas de contexto por correspondência (padrão 2).

Retorna saída compacta controlada por question, após recuperação local do repositório.

Notas:

  • Esta seção documenta os campos de payload da ferramenta MCP (snake_case), não flags de shell.
  • Equivalentes de CLI são --query, --mode, --question, --scope, --max-results, --context-lines.

Configuração

Interface de terminal (recomendada para configuração inicial)

context-distill --config-ui
# or without building:
go run ./cmd/server --config-ui

Campos editáveis:

CampoNotas
provider_nameLista suspensa de provedores suportados.
base_urlObrigatório para provedores compatíveis com OpenAI.
api_keyEntrada mascarada. Obrigatório para openai, openrouter, jan.

Regras de validação:

  • Provedores que exigem chave de API bloqueiam o salvamento até que uma seja inserida.
  • Provedores compatíveis com OpenAI exigem um base_url.
  • Aliases de provedores são normalizados automaticamente (ex.: OpenAI Compatible → openai-compatible, dmr → docker-model-runner).

Caminho de configuração persistido: ~/.config/context-distill/config.yaml

O salvamento preserva as seções YAML existentes (service, openai, etc.) e atualiza apenas os campos relevantes de distill.

Configuração manual em YAML

Você também pode editar o arquivo de configuração diretamente.

Ordem de busca:

  1. ~/.config/<service>/config.yaml
  2. ./config.yaml

Exemplo de config.yaml:

service:
  transport: stdio

openai:
  provider_name: openai
  api_key: sk-xxxx
  base_url: https://api.openai.com/v1
  model: gpt-4o-mini
  timeout: 30s
  max_retries: 3
  supports_system_role: true
  supports_json_mode: true

distill:
  provider_name: ollama
  base_url: http://127.0.0.1:11434
  model: qwen3.5:2b
  timeout: 90s
  max_retries: 0
  thinking: false

Nota: service.version é injetado em tempo de build a partir dos metadados do binário e não precisa ser definido manualmente.

Matriz de Provedores

ProvedorTransporteChave de API ObrigatóriaURL Base Padrão
ollamaollama nativoNãohttp://127.0.0.1:11434
openaicompatível com OpenAISimhttps://api.openai.com/v1
openroutercompatível com OpenAISimhttps://openrouter.ai/api/v1
openai-compatiblecompatível com OpenAINão (depende do backend)—
lmstudiocompatível com OpenAINãohttp://127.0.0.1:1234/v1
jancompatível com OpenAISimhttp://127.0.0.1:1337/v1
localaicompatível com OpenAINãohttp://127.0.0.1:8080/v1
vllmcompatível com OpenAINãohttp://127.0.0.1:8000/v1
sglangcompatível com OpenAINão—
llama.cppcompatível com OpenAINão—
mlx-lmcompatível com OpenAINão—
docker-model-runnercompatível com OpenAINãohttp://127.0.0.1:12434/engines/v1

Escrevendo Boas Perguntas

A qualidade da saída de destilação/busca depende do contrato question — seja invocado via Skill, CLI ou MCP. Seja explícito sobre o que você quer e em qual formato.

Perguntas ruins

  • "What happened?"
  • "Summarize this"

Perguntas boas

  • "Did tests pass? Return only PASS or FAIL. If FAIL, list failing test names, one per line."
  • "List only changed file paths, one per line."
  • "Return valid JSON only with keys: severity, file, message."

Exemplos de distill_batch

FontePergunta
go test ./..."Did tests pass? Return only PASS or FAIL."
git diff"List changed files and one short reason per file. Max 10 lines."
Logs de CI"Return only blocking errors with file and line if available."

Exemplos de distill_watch

SnapshotsPergunta
Saída do observador de testes em T−1 / T"What changed in failure count? Return one short sentence."
Status de implantação em T−1 / T"Return only newly failing services, one per line."

Exemplos de search_code

ModoPergunta
text"Return only file:line, one per line."
symbol"Return likely definitions first, then usages, as file:line."
path"Return matching file paths only, one per line."

Modelos de AGENTS.md

Se você preferir incorporar instruções diretamente no AGENTS.md do seu projeto, use os arquivos independentes em vez de copiar grandes blocos deste README:

Sugestão de política em uma linha

Adicione isto à documentação do seu projeto para referência rápida:

Default policy: use `context-distill` (via Skill, CLI, or MCP) to distill command output and run `search_code` for repository localization before sending data to an LLM, unless raw output is explicitly required.

Estrutura do Projeto

context-distill/
├── cmd/
│   └── server/
│       ├── main.go
│       ├── bootstrap.go
│       └── openai_distill_config.go
├── distill/
│   ├── application/
│   │   └── distillation/
│   └── domain/
├── mcp/
│   ├── application/
│   └── domain/
├── platform/
│   ├── config/
│   ├── configui/
│   ├── di/
│   ├── mcp/
│   │   ├── commands/
│   │   ├── server/
│   │   └── tools/
│   ├── ollama/
│   └── openai/
├── shared/
│   ├── ai/domain/
│   └── config/domain/
├── SKILL.md
├── config.sample.yaml
├── config.yaml
├── Makefile
└── AGENTS.md

Arquitetura

Regra de dependência:

platform  →  shared + distill/application + distill/domain
distill/application  →  distill/domain
cmd  →  platform + shared

Restrição: shared e distill/domain nunca devem importar platform.

Desenvolvimento

Testes e verificações estáticas

go test ./...
go vet ./...

Fluxo de trabalho local sugerido

  1. go test ./...
  2. context-distill --config-ui
  3. Verifique se a CLI funciona:
    echo "hello world" | context-distill distill_batch --question "Return the input verbatim."
    context-distill search_code --query "provider_name" --mode text --question "Return only file:line, one per line."
    
  4. (Opcional) Inicie o servidor MCP: context-distill --transport stdio
  5. Valide o comportamento a partir do seu cliente MCP ou via comandos CLI.

Teste ao vivo opcional (provedor real)

DISTILL_LIVE_TEST=1 OPENAI_BASE_URL=https://openrouter.ai/api/v1 \
go test -tags=live ./platform/di -run TestLiveDistillBatchWithOpenAICompatibleProvider -v

Solução de Problemas

ProblemaCorreção
provider unauthorizedVerifique distill.api_key (ou o fallback openai.api_key, dependendo do provedor).
requires base_urlDefina distill.base_url. O caminho mais rápido é --config-ui.
O cliente MCP não detecta o servidorConfirme que o caminho do binário é absoluto, tem permissões de execução e o transporte é stdio.
O servidor falha na validação de configuraçãoExecute --config-ui para a configuração inicial e depois inicie normalmente.
O comando CLI retorna código de saída diferente de zeroVerifique se as flags obrigatórias estão presentes e não vazias (distill_batch: --question; distill_mcp_output: --question mais --output ou --server-command + --tool-name; distill_watch: --question, --previous-cycle, --current-cycle; search_code: --query, --mode, --question).
distill_mcp_output falha antes da execução da ferramentaVerifique se --tool-arguments é JSON válido e se o caminho do comando do servidor MCP é absoluto e executável.
search_code falha com query is required apesar de passar valoresVocê provavelmente usou argumentos no estilo MCP (mode=text query=...) no shell. Use flags de CLI: context-distill search_code --mode text --query "..." --question "...".
O agente ignora SKILL.mdGaranta que o arquivo esteja dentro do diretório correto de skills do agente (ex.: .claude/skills/context-distill/SKILL.md). Consulte a tabela Configuração de Skill para todos os caminhos.

Segurança

  • Nunca commite chaves de API reais em repositórios públicos.
  • Prefira segredos baseados em ambiente em ambientes compartilhados ou de CI.

Licença

Copyright © 2026 jcastilloa. Todos os direitos reservados.

A redistribuição e o uso em formas de código-fonte e binárias, com ou sem modificação, são permitidos desde que as seguintes condições sejam atendidas:

  1. Redistribuições de código-fonte devem manter o aviso de copyright acima, esta lista de condições e o aviso de isenção a seguir.
  2. Redistribuições em forma binária devem reproduzir o aviso de copyright acima, esta lista de condições e o aviso de isenção a seguir na documentação e/ou outros materiais fornecidos com a distribuição.
  3. Nem o nome do detentor dos direitos autorais nem os nomes de seus contribuidores podem ser usados para endossar ou promover produtos derivados deste software sem permissão prévia específica por escrito.

ESTE SOFTWARE É FORNECIDO PELOS DETENTORES DOS DIREITOS AUTORAIS E CONTRIBUIDORES "COMO ESTÁ" E QUAISQUER GARANTIAS EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS IMPLÍCITAS DE COMERCIABILIDADE E ADEQUAÇÃO A UM FIM ESPECÍFICO SÃO REJEITADAS. EM NENHUM CASO O DETENTOR DOS DIREITOS AUTORAIS OU CONTRIBUIDORES SERÃO RESPONSÁVEIS POR QUAISQUER DANOS DIRETOS, INDIRETOS, INCIDENTAIS, ESPECIAIS, EXEMPLARES OU CONSEQUENCIAIS (INCLUINDO, MAS NÃO SE LIMITANDO À AQUISIÇÃO DE BENS OU SERVIÇOS SUBSTITUTOS; PERDA DE USO, DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) SEJA COMO FOR CAUSADO E SOB QUALQUER TEORIA DE RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE ESTRITA OU ATO ILÍCITO (INCLUINDO NEGLIGÊNCIA OU OUTRO) DECORRENTE DE QUALQUER FORMA DO USO DESTE SOFTWARE, MESMO SE AVISADO DA POSSIBILIDADE DE TAIS DANOS.