
Regras de segurança portáteis para o limite de ação de agentes de IA
Especificação aberta e portátil para regras de segurança de agentes de IA
Especificação · Documentação · Conjuntos de Regras · JSON Schema
HushSpec é um formato de política aberto para regras de segurança de agentes de IA. Ele define um agente pode fazer em tempo de execução, incluindo acesso ao sistema de arquivos, egresso de rede, uso de ferramentas, detecção de segredos e muito mais, sem prescrever esses controles devem ser aplicados. Essa separação torna as políticas portáteis entre runtimes, frameworks e linguagens.
v0.1.1-alpha — A especificação principal, todos os quatro SDKs (Rust, TypeScript, Python, Go) e a CLI h2h estão publicados e funcionais. Com eles, você pode analisar, validar, avaliar, mesclar, resolver, detectar, assinar e auditar por meio dos 10 tipos de regras e 3 módulos de extensão. A superfície da API está se estabilizando, mas ainda não está congelada — espere refinamentos antes da v1.0.
hushspec: "0.1.0"
name: production-agent
rules:
forbidden_paths:
patterns:
- "**/.ssh/**"
- "**/.aws/**"
- "/etc/shadow"
egress:
allow:
- "api.openai.com"
- "*.anthropic.com"
- "api.github.com"
default: block
tool_access:
block: [shell_exec, run_command]
require_confirmation: [file_write, git_push]
default: allow
secret_patterns:
patterns:
- name: aws_key
pattern: "AKIA[0-9A-Z]{16}"
severity: critical
skip_paths: ["**/test/**"]
shell_commands:
forbidden_patterns:
- "rm\\s+-rf\\s+/"
- "curl.*\\|.*bash"
Todos os quatro SDKs implementam o pipeline completo do HushSpec, da análise e validação até a resolução e avaliação.
| Capacidade | Rust | TypeScript | Python | Go |
|---|---|---|---|---|
| Análise + Validação (Nível 1) | Sim | Sim | Sim | Sim |
| Mesclagem (Nível 2) | Sim | Sim | Sim | Sim |
| Resolução (Nível 2+) | Sim | Sim | Sim | Sim |
| Avaliação (Nível 3) | Sim | Sim | Sim | Sim |
| Trilha de Auditoria (Nível 4) | Sim | Sim | Sim | Sim |
| Detecção | Sim | Sim | Sim | Sim |
| Observabilidade | Sim | Sim | Sim | Sim |
| Destinos de Recibos | Sim | Sim | Sim | Sim |
| Método | Comando |
|---|---|
| Homebrew (macOS/Linux) | brew install backbay-labs/tap/h2h |
| npm | npm install -g @hushspec/cli (ou npx @hushspec/cli validate policy.yaml) |
| Cargo (a partir do código-fonte) | cargo install hushspec-cli |
| Binários pré-compilados | GitHub Releases — h2h-<tag>-<target>.tar.gz + SHA256SUMS, com proveniência atestada |
Homebrew, npm e binários pré-compilados estarão disponíveis a partir da primeira tag
v0.xgerada pelo pipeline de release, assim que o pipeline de release publicar os artefatos, a fórmula do tap e os pacotes npm. Até lá, instale via Cargo.
Todos os métodos instalam o comando h2h. Veja Ferramenta CLI abaixo.
[dependencies]
hushspec = "0.1"
npm install @hushspec/core
pip install hushspec
go get github.com/backbay-labs/hush/packages/go@main
use hushspec::HushSpec;
let yaml_str = "hushspec: \"0.1.0\"\nname: example\n";
let spec = HushSpec::parse(yaml_str)?;
let result = hushspec::validate(&spec);
assert!(result.is_valid());
import { parseOrThrow, validate } from '@hushspec/core';
const yamlString = 'hushspec: "0.1.0"\nname: example\n';
const spec = parseOrThrow(yamlString);
const result = validate(spec);
console.log(result.valid); // true
from hushspec import parse_or_raise, validate
yaml_string = 'hushspec: "0.1.0"\nname: example\n'
spec = parse_or_raise(yaml_string)
result = validate(spec)
assert result.is_valid
import (
"fmt"
"github.com/backbay-labs/hush/packages/go/hushspec"
)
yamlString := "hushspec: \"0.1.0\"\nname: example\n"
spec, err := hushspec.Parse(yamlString)
if err != nil {
panic(err)
}
result := hushspec.Validate(spec)
fmt.Println(result.IsValid())
Cada SDK expõe uma função evaluate() que recebe uma spec analisada e uma ação e retorna uma decisão (allow, warn ou deny) além dos detalhes das regras correspondentes.
import { parseOrThrow, evaluate } from '@hushspec/core';
const spec = parseOrThrow(policyYaml);
const result = evaluate(spec, { type: 'egress', target: 'api.openai.com' });
// result.decision === 'allow' | 'warn' | 'deny'
// result.matched_rule === 'egress'
from hushspec import parse_or_raise, evaluate
spec = parse_or_raise(policy_yaml)
result = evaluate(spec, {"type": "egress", "target": "api.openai.com"})
assert result.decision in ("allow", "warn", "deny")
HushGuard encapsula o carregamento e a avaliação de políticas por trás de uma interface simples de evaluate, check e enforce para código de aplicação.
import { HushGuard } from '@hushspec/core';
const guard = HushGuard.fromFile('./policy.yaml');
guard.enforce({ type: 'tool_call', target: 'bash' }); // throws HushSpecDenied if denied
from hushspec import HushGuard
guard = HushGuard.from_file("./policy.yaml")
guard.enforce({"type": "tool_call", "target": "bash"}) # raises HushSpecDenied if denied
A CLI h2h cobre o fluxo de trabalho comum de políticas: validar, testar, avaliar e explicar ações individuais, fazer lint, diff, formatar, inicializar, assinar, verificar e acionar o modo de pânico.
# Validate a policy against the HushSpec schema
h2h validate policy.yaml
# Run evaluation test suites
h2h test --fixtures ./tests/
# Evaluate one action and explain the decision
h2h eval policy.yaml --type egress --target api.example.com
h2h explain policy.yaml --type egress --target api.example.com
# Static analysis and linting
h2h lint policy.yaml
# Lint and auto-fix decision-neutral issues
h2h lint policy.yaml --fix
# Compare two policies and show effective decision changes
h2h diff old.yaml new.yaml
# Format policy files canonically
h2h fmt policy.yaml
# Scaffold a new policy project
h2h init --preset default
# Sign a policy with Ed25519
h2h sign policy.yaml --key h2h.key
# Verify a policy signature
h2h verify policy.yaml --key h2h.pub
# Generate a new Ed25519 keypair
h2h keygen
# Emergency override (deny-all kill switch)
h2h panic activate --sentinel /tmp/hushspec.panic
h2h panic deactivate --sentinel /tmp/hushspec.panic
Veja Instalação acima para opções de instalação — Homebrew, npm, Cargo ou binários pré-compilados.
evaluate_audited() gera recibos de decisão estruturados com rastros de regras, resumos de política e redação opcional de conteúdo. Os recibos estão em conformidade com hushspec-receipt.v0.schema.json e são projetados para suportar ambientes com forte exigência de auditoria, como SOC 2, HIPAA, PCI-DSS e FedRAMP.
import { parseOrThrow, evaluateAudited } from '@hushspec/core';
const spec = parseOrThrow(policyYaml);
const receipt = evaluateAudited(spec, action, {
enabled: true,
include_rule_trace: true,
redact_content: false,
});
// receipt.decision, receipt.rule_evaluations, receipt.policy_summary
Os destinos de recibos (FileReceiptSink, ConsoleReceiptSink, FilteredSink, MultiSink, CallbackSink) estão disponíveis nos quatro SDKs para rotear recibos para armazenamento, registro de logs ou endpoints OTLP.
O pipeline de detecção integra verificações de injeção de prompt, jailbreak e exfiltração ao fluxo de avaliação. Detectores de referência baseados em regex acompanham todos os SDKs, e detectores personalizados podem ser registrados por meio do DetectorRegistry.
import { parseOrThrow, evaluateWithDetection, DetectorRegistry } from '@hushspec/core';
const registry = DetectorRegistry.withDefaults();
const result = evaluateWithDetection(spec, action, registry, {
enabled: true,
prompt_injection_threshold: 0.5,
});
// result.detection_results contains matched patterns and confidence scores
Adaptadores pré-construídos convertem chamadas de ferramentas específicas de frameworks em ações de avaliação do HushSpec.
| Framework | Adaptador | SDK |
|---|---|---|
| Claude / Anthropic | mapClaudeToolToAction, createSecureToolHandler | TypeScript |
| OpenAI | mapOpenAIToolCall, createOpenAIGuard | TypeScript |
| MCP (Model Context Protocol) | mapMCPToolCall, createMCPGuard | TypeScript |
import { HushGuard, mapClaudeToolToAction } from '@hushspec/core';
const guard = HushGuard.fromFile('./policy.yaml');
const action = mapClaudeToolToAction(toolUseBlock);
guard.enforce(action);
A interface EvaluationObserver e o wrapper ObservableEvaluator emitem eventos estruturados para cada avaliação, carregamento de política e recarregamento de política. Os observadores integrados incluem JsonLineObserver, ConsoleObserver e MetricsCollector.
import { ObservableEvaluator, JsonLineObserver, MetricsCollector } from '@hushspec/core';
const evaluator = new ObservableEvaluator();
evaluator.addObserver(new JsonLineObserver(process.stderr));
evaluator.addObserver(new MetricsCollector());
const result = evaluator.evaluate(spec, action);
As políticas podem ser assinadas com chaves Ed25519 e verificadas no momento do carregamento. A CLI fornece os comandos sign, verify e keygen. O formato da assinatura está em conformidade com hushspec-signature.v0.schema.json.
# Generate a keypair
h2h keygen --output-dir mykeys
# Sign a policy (creates policy.yaml.sig)
h2h sign policy.yaml --key mykeys/h2h.key
# Verify the signature
h2h verify policy.yaml --key mykeys/h2h.pub
O modo de pânico é um interruptor de emergência deny-all que pode ser ativado imediatamente sem reimplantar políticas. Você pode acioná-lo com um arquivo sentinela, a CLI ou uma chamada de API. Enquanto o modo de pânico estiver ativo, toda avaliação retorna deny.
# Activate panic mode
h2h panic activate --sentinel /tmp/hushspec.panic
# Deactivate
h2h panic deactivate --sentinel /tmp/hushspec.panic
import { activatePanic, deactivatePanic, isPanicActive } from '@hushspec/core';
activatePanic();
// All evaluate() calls now return deny
deactivatePanic();
As políticas podem ser carregadas de arquivos locais, URLs HTTPS (com cache ETag e proteção contra SSRF) ou conjuntos de regras integrados. PolicyWatcher e PolicyPoller suportam hot reload sem reiniciar o processo.
import { PolicyWatcher, HushGuard } from '@hushspec/core';
const guard = HushGuard.fromFile('./policy.yaml');
const watcher = new PolicyWatcher('./policy.yaml', {
onChange: (newSpec) => guard.swapPolicy(newSpec),
});
watcher.start();
| Regra | Finalidade |
|---|---|
forbidden_paths | Bloquear acesso a caminhos sensíveis do sistema de arquivos |
path_allowlist | Acesso de leitura/escrita/patch baseado em allowlist |
egress | Controle de egresso de rede por domínio |
secret_patterns | Detectar segredos no conteúdo de arquivos |
patch_integrity | Validar a segurança do diff (limites de tamanho, padrões proibidos) |
shell_commands | Bloquear comandos de shell perigosos |
tool_access | Controlar invocações de ferramentas/MCP |
computer_use | Controlar ações CUA |
remote_desktop_channels | Controlar canais laterais de área de trabalho remota |
input_injection | Controlar capacidades de injeção de entrada |
HushSpec suporta módulos de extensão opcionais para comportamentos de política mais avançados:
| Extensão | Finalidade |
|---|---|
| Posture | Máquina de estados declarativa para capacidades e orçamentos |
| Origins | Projeção de política com reconhecimento de origem (Slack, GitHub, e-mail, etc.) |
| Detection | Configuração de limites para injeção de prompt, jailbreak e inteligência de ameaças |
extensions:
posture:
initial: standard
states:
standard: { capabilities: [file_access, egress] }
restricted: { capabilities: [file_access] }
transitions:
- { from: "*", to: restricted, on: critical_violation }
detection:
prompt_injection:
block_at_or_above: high
Políticas prontas para uso ficam em rulesets/:
| Conjunto de Regras | Descrição |
|---|---|
default | Segurança equilibrada para execução de agentes de IA |
strict | Máxima segurança, permissões mínimas |
permissive | Amigável para desenvolvimento, limites flexíveis |
ai-agent | Otimizado para assistentes de codificação com IA |
cicd | Segurança para pipelines de CI/CD |
remote-desktop | Sessões de agentes de uso de computador |
panic | Substituição de emergência deny-all |
Os documentos HushSpec são carregados nativamente no Clawdstrike:
// Auto-detects HushSpec vs Clawdstrike-native format
let policy = clawdstrike::Policy::from_yaml_auto(yaml)?;
# Convert between formats
hush policy migrate policy.yaml --to hushspec
spec/ Normative specification, including core and extension docs
schemas/ JSON Schema definitions
crates/ Rust crates
hushspec/ Core library: parse, validate, merge, resolve, evaluate, detect, sign
hushspec-cli/ CLI tool
hushspec-testkit/ Conformance test runner
packages/ Language SDKs for TypeScript, Python, and Go
rulesets/ Built-in security rulesets
fixtures/ Conformance and evaluation fixtures
docs/ mdBook documentation site
generated/ Generated shared SDK contract artifacts
scripts/ Code generation and CI tooling
A especificação normativa fica em spec/. As definições de JSON Schema para validação programática estão em schemas/. A documentação completa está em docs/.
Apache-2.0. Veja LICENSE.