
Règles de sécurité portables pour la limite d'action des agents IA
Spécification ouverte et portable pour les règles de sécurité des agents IA
Spécification · Documentation · Rulesets · JSON Schema
HushSpec est un format de politique ouvert pour les règles de sécurité des agents IA. Il définit **ce qu'**un agent peut faire à l'exécution, notamment l'accès au système de fichiers, le trafic réseau sortant, l'utilisation des outils, la détection de secrets, et bien plus encore, sans imposer comment ces contrôles doivent être appliqués. Cette séparation rend les politiques portables entre les runtimes, les frameworks et les langages.
v0.1.1-alpha — La spécification de base, les quatre SDK (Rust, TypeScript, Python, Go) et le CLI h2h sont publiés et opérationnels. Analysez, validez, évaluez, fusionnez, résolvez, détectez, signez et auditez à travers 10 types de règles et 3 modules d'extension. La surface d'API se stabilise, mais n'est pas encore figée — attendez-vous à des raffinements avant la 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"
Les quatre SDK implémentent le pipeline HushSpec complet, de l'analyse et de la validation jusqu'à la résolution et l'évaluation.
Homebrew, npm et les binaires précompilés deviennent disponibles à partir du premier tag
v0.xconstruit par le pipeline de publication, dès que celui-ci publie les artefacts, la formule tap et les packages npm. En attendant, installez via Cargo.
Toutes les méthodes installent la commande h2h. Voir Outil CLI ci-dessous.
[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())
Chaque SDK expose une fonction evaluate() qui prend une spécification analysée et une action, puis renvoie une décision (allow, warn ou deny) ainsi que les détails des règles correspondantes.
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 encapsule le chargement et l'évaluation des politiques derrière une interface simple — evaluate, check et enforce — destinée au code applicatif.
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
Le CLI h2h couvre le flux de travail courant des politiques : valider, tester, évaluer et expliquer des actions individuelles, lint, diff, formater, initialiser, signer, vérifier et déclencher le mode panique.
# 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
Voir Installation ci-dessus pour les options d'installation — Homebrew, npm, Cargo ou binaires précompilés.
evaluate_audited() génère des reçus de décision structurés avec les traces de règles, les résumés de politique et le masquage facultatif du contenu. Les reçus sont conformes à hushspec-receipt.v0.schema.json et sont conçus pour prendre en charge les environnements à forte exigence d'audit, tels que SOC 2, HIPAA, PCI-DSS et 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
Les destinations de reçus (FileReceiptSink, ConsoleReceiptSink, FilteredSink, MultiSink, CallbackSink) sont disponibles dans les quatre SDK pour acheminer les reçus vers le stockage, la journalisation ou des points de terminaison OTLP.
Le pipeline de détection intègre des contrôles d'injection de prompt, de jailbreak et d'exfiltration dans le flux d'évaluation. Des détecteurs de référence basés sur des expressions régulières sont fournis avec tous les SDK, et des détecteurs personnalisés peuvent être enregistrés via 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
Des adaptateurs préconfigurés traduisent les appels d'outils spécifiques aux frameworks en actions d'évaluation HushSpec.
L'interface EvaluationObserver et l'enveloppe ObservableEvaluator émettent des événements structurés pour chaque évaluation, chaque chargement et chaque rechargement de politique. Les observateurs intégrés incluent JsonLineObserver, ConsoleObserver et 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);
Les politiques peuvent être signées avec des clés Ed25519 et vérifiées au moment du chargement. Le CLI fournit les commandes sign, verify et keygen. Le format de signature est conforme à 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
Le mode panique est un kill switch tout-refuser qui peut être activé immédiatement sans redéployer les politiques. Vous pouvez le déclencher via un fichier sentinelle, le CLI ou un appel API. Tant que le mode panique est actif, chaque évaluation renvoie 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();
Les politiques peuvent être chargées à partir de fichiers locaux, d'URL HTTPS (avec mise en cache ETag et protection SSRF) ou de rulesets intégrés. PolicyWatcher et PolicyPoller prennent en charge le rechargement à chaud sans redémarrer le processus.
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 prend en charge des modules d'extension facultatifs pour un comportement de politique plus avancé :
| Extension | Objectif |
|---|---|
| Posture | Machine à états déclarative pour les capacités et les budgets |
| Origins | Projection de politique sensible à l'origine (Slack, GitHub, e-mail, etc.) |
| Detection | Configuration de seuils pour l'injection de prompt, le jailbreak et le renseignement sur les menaces |
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
Des politiques prêtes à l'emploi se trouvent dans rulesets/ :
Les documents HushSpec se chargent nativement dans 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
La spécification normative se trouve dans spec/. Les définitions JSON Schema pour la validation programmatique sont dans schemas/. La documentation complète est dans docs/.
Apache-2.0. Voir LICENSE.
| Capacité | Rust | TypeScript | Python | Go |
|---|
| Analyse + validation (niveau 1) | Oui | Oui | Oui | Oui |
| Fusion (niveau 2) | Oui | Oui | Oui | Oui |
| Résolution (niveau 2+) | Oui | Oui | Oui | Oui |
| Évaluation (niveau 3) | Oui | Oui | Oui | Oui |
| Piste d'audit (niveau 4) | Oui | Oui | Oui | Oui |
| Détection | Oui | Oui | Oui | Oui |
| Observabilité | Oui | Oui | Oui | Oui |
| Destinations de reçus | Oui | Oui | Oui | Oui |
| Méthode | Commande |
|---|
| Homebrew (macOS/Linux) | brew install backbay-labs/tap/h2h |
| npm | npm install -g @hushspec/cli (ou npx @hushspec/cli validate policy.yaml) |
| Cargo (à partir des sources) | cargo install hushspec-cli |
| Binaires précompilés | GitHub Releases — h2h-<tag>-<target>.tar.gz + SHA256SUMS, avec attestation de provenance |
| Framework | Adaptateur | 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);
| Règle | Objectif |
|---|
forbidden_paths | Bloque l'accès aux chemins sensibles du système de fichiers |
path_allowlist | Accès en lecture/écriture/patch basé sur une liste blanche |
egress | Contrôle du trafic réseau sortant par domaine |
secret_patterns | Détecte les secrets dans le contenu des fichiers |
patch_integrity | Valide la sécurité des diffs (limites de taille, motifs interdits) |
shell_commands | Bloque les commandes shell dangereuses |
tool_access | Contrôle les invocations d'outils/MCP |
computer_use | Contrôle les actions CUA |
remote_desktop_channels | Contrôle les canaux latéraux du bureau à distance |
input_injection | Contrôle les capacités d'injection d'entrée |
| Ruleset | Description |
|---|
default | Sécurité équilibrée pour l'exécution d'agents IA |
strict | Sécurité maximale, permissions minimales |
permissive | Adapté au développement, limites souples |
ai-agent | Optimisé pour les assistants de codage IA |
cicd | Sécurité des pipelines CI/CD |
remote-desktop | Sessions d'agents d'utilisation d'ordinateur |
panic | Contournement d'urgence tout-refuser |