
Reglas de seguridad portátiles para el límite de acción de agentes de IA
Especificación abierta y portátil para reglas de seguridad de agentes de IA
Especificación · Documentación · Conjuntos de reglas · Esquema JSON
HushSpec es un formato de políticas abierto para reglas de seguridad de agentes de IA. Define puede hacer un agente en tiempo de ejecución, incluyendo acceso al sistema de archivos, tráfico de red saliente, uso de herramientas, detección de secretos y más, sin prescribir deben aplicarse esos controles. Esa separación hace que las políticas sean portátiles entre tiempos de ejecución, marcos de trabajo y lenguajes.
v0.1.1-alpha — La especificación central, los cuatro SDK (Rust, TypeScript, Python, Go) y la CLI h2h están publicados y funcionales. Analice, valide, evalúe, fusione, resuelva, detecte, firme y audite a través de 10 tipos de reglas y 3 módulos de extensión. La superficie de la API se está estabilizando pero aún no está congelada; espere refinamientos antes de 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"
Los cuatro SDK implementan el pipeline completo de HushSpec, desde el análisis y la validación hasta la resolución y evaluación.
| Capacidad | Rust | TypeScript | Python | Go |
|---|---|---|---|---|
| Analizar + Validar (Nivel 1) | Sí | Sí | Sí | Sí |
| Fusionar (Nivel 2) | Sí | Sí | Sí | Sí |
| Resolver (Nivel 2+) | Sí | Sí | Sí | Sí |
| Evaluar (Nivel 3) | Sí | Sí | Sí | Sí |
| Rastro de auditoría (Nivel 4) | Sí | Sí | Sí | Sí |
| Detección | Sí | Sí | Sí | Sí |
| Observabilidad | Sí | Sí | Sí | Sí |
| Receptáculos de recibos | Sí | Sí | Sí | Sí |
| Método | Comando |
|---|---|
| Homebrew (macOS/Linux) | brew install backbay-labs/tap/h2h |
| npm | npm install -g @hushspec/cli (o npx @hushspec/cli validate policy.yaml) |
| Cargo (desde fuente) | cargo install hushspec-cli |
| Binarios precompilados | GitHub Releases — h2h-<tag>-<target>.tar.gz + SHA256SUMS, con procedencia atestiguada |
Homebrew, npm y los binarios precompilados estarán disponibles a partir del primer tag
v0.xconstruido por el pipeline de lanzamiento, una vez que el pipeline de lanzamiento publique los artefactos, la fórmula tap y los paquetes npm. Hasta entonces, instale mediante Cargo.
Todos los métodos instalan el comando h2h. Vea Herramienta CLI más abajo.
[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 expone una función evaluate() que toma una especificación analizada y una acción, y devuelve una decisión (allow, warn o deny) más detalles de la regla coincidente.
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 envuelve la carga de políticas y la evaluación detrás de una interfaz simple evaluate, check y enforce para el código de la aplicación.
import { HushGuard } from '@hushspec/core';
const guard = HushGuard.fromFile('./policy.yaml');
guard.enforce({ type: 'tool_call', target: 'bash' }); // lanza HushSpecDenied si se deniega
from hushspec import HushGuard
guard = HushGuard.from_file("./policy.yaml")
guard.enforce({"type": "tool_call", "target": "bash"}) # lanza HushSpecDenied si se deniega
La CLI h2h cubre el flujo de trabajo común de políticas: validar, probar, evaluar y explicar acciones individuales, lint, diff, formatear, inicializar, firmar, verificar y activar el modo de pánico.
# Validar una política contra el esquema HushSpec
h2h validate policy.yaml
# Ejecutar suites de prueba de evaluación
h2h test --fixtures ./tests/
# Evaluar una acción y explicar la decisión
h2h eval policy.yaml --type egress --target api.example.com
h2h explain policy.yaml --type egress --target api.example.com
# Análisis estático y linting
h2h lint policy.yaml
# Lint y corrección automática de problemas neutrales para la decisión
h2h lint policy.yaml --fix
# Comparar dos políticas y mostrar los cambios efectivos en las decisiones
h2h diff old.yaml new.yaml
# Formatear archivos de política de forma canónica
h2h fmt policy.yaml
# Crear la estructura de un proyecto de política nuevo
h2h init --preset default
# Firmar una política con Ed25519
h2h sign policy.yaml --key h2h.key
# Verificar una firma de política
h2h verify policy.yaml --key h2h.pub
# Generar un nuevo par de claves Ed25519
h2h keygen
# Anulación de emergencia (interruptor de apagado deny-all)
h2h panic activate --sentinel /tmp/hushspec.panic
h2h panic deactivate --sentinel /tmp/hushspec.panic
Consulte Instalación arriba para opciones de instalación: Homebrew, npm, Cargo o binarios precompilados.
evaluate_audited() genera recibos de decisión estructurados con trazas de reglas, resúmenes de políticas y redacción opcional de contenido. Los recibos cumplen con hushspec-receipt.v0.schema.json y están diseñados para soportar entornos con alta auditoría como SOC 2, HIPAA, PCI-DSS y 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
Los receptáculos de recibos (FileReceiptSink, ConsoleReceiptSink, FilteredSink, MultiSink, CallbackSink) están disponibles en los cuatro SDK para enrutar los recibos a almacenamiento, registro o puntos finales OTLP.
El pipeline de detección incorpora comprobaciones de inyección de indicaciones, jailbreak y exfiltración en el flujo de evaluación. Los detectores de referencia basados en expresiones regulares se envían con todos los SDK, y se pueden registrar detectores personalizados a través de 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 contiene patrones coincidentes y puntuaciones de confianza
Los adaptadores preconstruidos traducen las llamadas a herramientas específicas del framework en acciones de evaluación de 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);
La interfaz EvaluationObserver y el envoltorio ObservableEvaluator emiten eventos estructurados para cada evaluación, carga de política y recarga de política. Los observadores incorporados incluyen JsonLineObserver, ConsoleObserver y 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);
Las políticas se pueden firmar con claves Ed25519 y verificar en el momento de la carga. La CLI proporciona los comandos sign, verify y keygen. El formato de firma cumple con hushspec-signature.v0.schema.json.
# Generar un par de claves
h2h keygen --output-dir mykeys
# Firmar una política (crea policy.yaml.sig)
h2h sign policy.yaml --key mykeys/h2h.key
# Verificar la firma
h2h verify policy.yaml --key mykeys/h2h.pub
El modo de pánico es un interruptor de apagado deny-all que se puede activar inmediatamente sin redistribuir políticas. Puede activarlo con un archivo centinela, la CLI o una llamada API. Mientras el modo de pánico esté activo, cada evaluación devuelve deny.
# Activar modo de pánico
h2h panic activate --sentinel /tmp/hushspec.panic
# Desactivar
h2h panic deactivate --sentinel /tmp/hushspec.panic
import { activatePanic, deactivatePanic, isPanicActive } from '@hushspec/core';
activatePanic();
// Todas las llamadas a evaluate() ahora devuelven deny
deactivatePanic();
Las políticas se pueden cargar desde archivos locales, URLs HTTPS (con almacenamiento en caché ETag y protección SSRF) o conjuntos de reglas integrados. PolicyWatcher y PolicyPoller admiten la recarga en caliente sin reiniciar el proceso.
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();
| Regla | Propósito |
|---|---|
forbidden_paths | Bloquear el acceso a rutas sensibles del sistema de archivos |
path_allowlist | Acceso de lectura/escritura/parche basado en lista blanca |
egress | Control de tráfico de red saliente por dominio |
secret_patterns | Detectar secretos en el contenido de archivos |
patch_integrity | Validar la seguridad de los diffs (límites de tamaño, patrones prohibidos) |
shell_commands | Bloquear comandos de shell peligrosos |
tool_access | Controlar invocaciones de herramientas/MCP |
computer_use | Controlar acciones CUA |
remote_desktop_channels | Controlar canales laterales de escritorio remoto |
input_injection | Controlar capacidades de inyección de entrada |
HushSpec admite módulos de extensión opcionales para un comportamiento de políticas más avanzado:
| Extensión | Propósito |
|---|---|
| Posture | Máquina de estados declarativa para capacidades y presupuestos |
| Origins | Proyección de políticas consciente del origen (Slack, GitHub, correo electrónico, etc.) |
| Detection | Configuración de umbral para inyección de indicaciones, jailbreak, inteligencia de amenazas |
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
Las políticas listas para usar se encuentran en rulesets/:
| Conjunto de Reglas | Descripción |
|---|---|
default | Seguridad equilibrada para la ejecución de agentes de IA |
strict | Máxima seguridad, permisos mínimos |
permissive | Amigable para el desarrollo, límites relajados |
ai-agent | Optimizado para asistentes de codificación de IA |
cicd | Seguridad de pipelines CI/CD |
remote-desktop | Sesiones de agente de uso de computadora |
panic | Anulación de emergencia deny-all |
Los documentos de HushSpec se cargan de forma nativa en Clawdstrike:
// Detecta automáticamente el formato HushSpec vs Clawdstrike nativo
let policy = clawdstrike::Policy::from_yaml_auto(yaml)?;
// Convertir entre formatos
hush policy migrate policy.yaml --to hushspec
spec/ Especificación normativa, incluyendo documentos centrales y de extensión
schemas/ Definiciones de esquemas JSON
crates/ Crates Rust
hushspec/ Biblioteca central: parse, validate, merge, resolve, evaluate, detect, sign
hushspec-cli/ Herramienta CLI
hushspec-testkit/ Ejecutor de pruebas de conformidad
packages/ SDK de lenguaje para TypeScript, Python y Go
rulesets/ Conjuntos de reglas de seguridad incorporados
fixtures/ Accesorios de conformidad y evaluación
docs/ Sitio de documentación mdBook
generated/ Artefactos de contrato de SDK compartido generados
scripts/ Generación de código y herramientas CI
La especificación normativa se encuentra en spec/. Las definiciones de esquemas JSON para validación programática están en schemas/. La documentación completa está en docs/.
Apache-2.0. Consulte LICENSE.