
Regole di sicurezza portatili per il confine d'azione degli agenti di IA
Specifica portabile e aperta per le regole di sicurezza degli agenti AI
Specifica · Documentazione · Ruleset · JSON Schema
HushSpec è un formato di policy aperto per le regole di sicurezza degli agenti AI. Definisce cosa un agente può fare in esecuzione, inclusi accesso al filesystem, traffico di rete in uscita, uso di strumenti, rilevamento di segreti e altro, senza prescrivere come questi controlli devono essere applicati. Questa separazione rende le policy portatili tra ambienti di esecuzione, framework e linguaggi.
v0.1.1-alpha — La specifica principale, tutti e quattro gli SDK (Rust, TypeScript, Python, Go) e la CLI h2h sono pubblicati e funzionanti. Analizza, valida, valuta, unisci, risolvi, rileva, firma e controlla attraverso 10 tipi di regole e 3 moduli di estensione. La superficie API si sta stabilizzando ma non è ancora congelata — aspettati perfezionamenti prima della 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"
Tutti e quattro gli SDK implementano l'intera pipeline HushSpec, dall'analisi e validazione fino alla risoluzione e valutazione.
Homebrew, npm e binari precompilati diventano disponibili a partire dal primo tag
v0.xcostruito dalla pipeline di rilascio, una volta che la pipeline pubblica artefatti, la formula del tap e i pacchetti npm. Fino ad allora, installa tramite Cargo.
Tutti i metodi installano il comando h2h. Vedi CLI Tool sotto.
[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())
Ogni SDK espone una funzione evaluate() che accetta una specifica analizzata e un'azione, quindi restituisce una decisione (allow, warn, o deny) più i dettagli della regola corrispondente.
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 incapsula il caricamento e la valutazione delle policy dietro un'interfaccia semplice evaluate, check e enforce per il codice applicativo.
import { HushGuard } from '@hushspec/core';
const guard = HushGuard.fromFile('./policy.yaml');
guard.enforce({ type: 'tool_call', target: 'bash' }); // lancia HushSpecDenied se negato
from hushspec import HushGuard
guard = HushGuard.from_file("./policy.yaml")
guard.enforce({"type": "tool_call", "target": "bash"}) # solleva HushSpecDenied se negato
La CLI h2h copre il flusso di lavoro comune delle policy: valida, testa, valuta e spiega singole azioni, lint, diff, formatta, inizializza, firma, verifica e attiva la modalità panico.
# Valida una policy rispetto allo schema HushSpec
h2h validate policy.yaml
# Esegui suite di test di valutazione
h2h test --fixtures ./tests/
# Valuta un'azione e spiega la decisione
h2h eval policy.yaml --type egress --target api.example.com
h2h explain policy.yaml --type egress --target api.example.com
# Analisi statica e linting
h2h lint policy.yaml
# Lint e correzione automatica di problemi neutri per la decisione
h2h lint policy.yaml --fix
# Confronta due policy e mostra le modifiche effettive delle decisioni
h2h diff old.yaml new.yaml
# Formatta i file delle policy in modo canonico
h2h fmt policy.yaml
# Crea scaffolding di un nuovo progetto di policy
h2h init --preset default
# Firma una policy con Ed25519
h2h sign policy.yaml --key h2h.key
# Verifica la firma di una policy
h2h verify policy.yaml --key h2h.pub
# Genera una nuova coppia di chiavi Ed25519
h2h keygen
# Override di emergenza (kill switch nega-tutto)
h2h panic activate --sentinel /tmp/hushspec.panic
h2h panic deactivate --sentinel /tmp/hushspec.panic
Vedi Installazione sopra per le opzioni di installazione — Homebrew, npm, Cargo o binari precompilati.
evaluate_audited() genera ricevute di decisione strutturate con tracce delle regole, riepiloghi delle policy e redazione opzionale del contenuto. Le ricevute sono conformi a hushspec-receipt.v0.schema.json e sono progettate per supportare ambienti pesanti di auditing come 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
Le destinazioni delle ricevute (FileReceiptSink, ConsoleReceiptSink, FilteredSink, MultiSink, CallbackSink) sono disponibili in tutti e quattro gli SDK per instradare le ricevute verso storage, logging o endpoint OTLP.
La pipeline di rilevamento aggancia i controlli di injection di prompt, jailbreak ed esfiltrazione nel flusso di valutazione. I rilevatori di riferimento basati su regex sono forniti con tutti gli SDK, e rilevatori personalizzati possono essere registrati tramite 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 pattern corrispondenti e punteggi di confidenza
Adattatori predefiniti traducono chiamate a strumenti specifici del framework in azioni di valutazione HushSpec.
L'interfaccia EvaluationObserver e il wrapper ObservableEvaluator emettono eventi strutturati per ogni valutazione, caricamento e ricaricamento della policy. Gli observer incorporati includono 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);
Le policy possono essere firmate con chiavi Ed25519 e verificate al momento del caricamento. La CLI fornisce i comandi sign, verify e keygen. Il formato della firma è conforme a hushspec-signature.v0.schema.json.
# Genera una coppia di chiavi
h2h keygen --output-dir mykeys
# Firma una policy (crea policy.yaml.sig)
h2h sign policy.yaml --key mykeys/h2h.key
# Verifica la firma
h2h verify policy.yaml --key mykeys/h2h.pub
La modalità panico è un kill switch nega-tutto che può essere attivato immediatamente senza ridistribuire le policy. Puoi attivarlo con un file sentinella, la CLI o una chiamata API. Mentre la modalità panico è attiva, ogni valutazione restituisce deny.
# Attiva la modalità panico
h2h panic activate --sentinel /tmp/hushspec.panic
# Disattiva
h2h panic deactivate --sentinel /tmp/hushspec.panic
import { activatePanic, deactivatePanic, isPanicActive } from '@hushspec/core';
activatePanic();
// Tutte le chiamate evaluate() ora restituiscono deny
deactivatePanic();
Le policy possono essere caricate da file locali, URL HTTPS (con caching ETag e protezione SSRF) o ruleset incorporati. PolicyWatcher e PolicyPoller supportano la ricarica a caldo senza riavviare il 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();
HushSpec supporta moduli di estensione opzionali per un comportamento di policy più avanzato:
| Estensione | Scopo |
|---|---|
| Posture | Macchina a stati dichiarativa per capacità e budget |
| Origins | Proiezione delle policy sensibile all'origine (Slack, GitHub, email, ecc.) |
| Detection | Configurazione delle soglie per injection di prompt, jailbreak, intelligence delle minacce |
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
Le policy pronte all'uso si trovano in rulesets/:
I documenti HushSpec vengono caricati nativamente in Clawdstrike:
// Rileva automaticamente il formato HushSpec o Clawdstrike nativo
let policy = clawdstrike::Policy::from_yaml_auto(yaml)?;
# Converti tra formati
hush policy migrate policy.yaml --to hushspec
spec/ Specifica normativa, inclusi documenti principali e di estensione
schemas/ Definizioni JSON Schema
crates/ Crate Rust
hushspec/ Libreria principale: analisi, validazione, unione, risoluzione, valutazione, rilevamento, firma
hushspec-cli/ CLI tool
hushspec-testkit/ Esecutore di test di conformità
packages/ SDK linguistici per TypeScript, Python e Go
rulesets/ Ruleset di sicurezza incorporati
fixtures/ Fixture di conformità e valutazione
docs/ Sito di documentazione mdBook
generated/ Artefatti di contratto SDK condiviso generati
scripts/ Generazione di codice e tooling CI
La specifica normativa si trova in spec/. Le definizioni JSON Schema per la validazione programmatica sono in schemas/. La documentazione completa è in docs/.
Apache-2.0. Vedi LICENSE.
| Capacità | Rust | TypeScript | Python | Go |
|---|
| Analisi + Validazione (Livello 1) | Sì | Sì | Sì | Sì |
| Unione (Livello 2) | Sì | Sì | Sì | Sì |
| Risoluzione (Livello 2+) | Sì | Sì | Sì | Sì |
| Valutazione (Livello 3) | Sì | Sì | Sì | Sì |
| Tracciato di Controllo (Livello 4) | Sì | Sì | Sì | Sì |
| Rilevamento | Sì | Sì | Sì | Sì |
| Osservabilità | Sì | Sì | Sì | Sì |
| Destinazione Ricevute | Sì | Sì | Sì | Sì |
| Metodo | Comando |
|---|
| Homebrew (macOS/Linux) | brew install backbay-labs/tap/h2h |
| npm | npm install -g @hushspec/cli (o npx @hushspec/cli validate policy.yaml) |
| Cargo (da sorgente) | cargo install hushspec-cli |
| Binari precompilati | GitHub Releases — h2h-<tag>-<target>.tar.gz + SHA256SUMS, attestazione di provenienza |
| Framework | Adattatore | 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);
| Regola | Scopo |
|---|
forbidden_paths | Blocca l'accesso a percorsi del filesystem sensibili |
path_allowlist | Accesso in lettura/scrittura/patch basato su lista consentita |
egress | Controllo del traffico di rete in uscita per dominio |
secret_patterns | Rileva segreti nel contenuto dei file |
patch_integrity | Valida la sicurezza dei diff (limiti di dimensione, pattern vietati) |
shell_commands | Blocca comandi shell pericolosi |
tool_access | Controlla le invocazioni di strumenti/MCP |
computer_use | Controlla le azioni CUA |
remote_desktop_channels | Controlla i canali laterali del desktop remoto |
input_injection | Controlla le capacità di injection di input |
| Ruleset | Descrizione |
|---|
default | Sicurezza bilanciata per l'esecuzione di agenti AI |
strict | Massima sicurezza, permessi minimi |
permissive | Adatto allo sviluppo, limiti rilassati |
ai-agent | Ottimizzato per assistenti di codifica AI |
cicd | Sicurezza della pipeline CI/CD |
remote-desktop | Sessioni di agenti per uso computer |
panic | Override di emergenza nega-tutto |