PlatformAI Action FirewallPolicy EngineReal-Time DashboardGitOps PoliciesIntegrations
SolutionsAI Agent SecurityMCP SecurityLLM SecurityCompliance & Audit
ResourcesDocumentationResearchIntelligenceCase StudiesAI Security GlossaryPricing
CompanyAboutCareersContactSecurityEngineering

SAILLENT Technical Documentation

Technical reference for deploying, configuring, integrating, and operating the SAILLENT runtime enforcement engine.

Runtime: v0.1.0
Policy Schema: 1.0
Document Revision: 1.0
Last Verified: 2026-09-24
Status: Verified against runtime v0.1.0

Documentation Version: This documentation describes runtime behavior, policy schema, API behavior, and security controls as implemented in SAILLENT v0.1.0. Updates to runtime behavior will trigger deliberate documentation revisions.

Introduction

SAILLENT is a runtime enforcement layer for autonomous AI agents that controls requests traversing a configured enforcement path to downstream tools, APIs, and services.

SAILLENT intercepts requests, evaluates them against a GitOps-driven policy engine, and enforces a decision before the action executes.

The enforcement model is: Intercept → Inspect → Enforce

For each intercepted request, SAILLENT determines whether the action is permitted by the active policy set. Policy evaluation produces one of two decisions:

  • Allow — permit the request to continue to the upstream service.
  • Deny — prevent the action from executing. Return an error to the caller.

Separately, the inspection layer can apply Redact — modifying protected content (e.g., PII) before forwarding — when configured PII controls match. Redact is an inspection-layer action; it is not a policy decision and is not selectable through allowed_actions.

Upstream service: the external API, tool, or service to which SAILLENT forwards an admitted request.

Each enforcement decision is written to the local audit store together with the Git commit associated with the policy bundle currently loaded by the runtime.

Architecture

AI Application / Agent | v +------------------+ | SAILLENT | | Runtime Engine | | (Rust) | | | | 1. Receive | | 2. Parse | | 3. Normalize | | 4. Inspect | | 5. Evaluate | | 6. Enforce | | 7. Audit | +--------+---------+ | +---------------+---------------+ | | Policy Decision Inspection Action | | +--------+--------+ | v v v Allow Deny Redact | | (applied when configured v v PII controls match) Upstream Blocked | unchanged request v Upstream modified Resource / Protocol Errors (separate from policy decisions): ├── 413 Payload Too Large ├── 429 Too Many Requests └── 400 Invalid Request

The runtime engine is deployed as a native Linux binary within the customer's infrastructure. It handles traffic locally before it reaches the configured upstream service. Policy state is synchronized from a Git repository every 60 seconds.

Quick Start

Requirements

  • Linux-based host (Ubuntu 20.04+, RHEL 8+, or equivalent)
  • sudo privileges
  • Outbound network access to license.saillent.com (enrollment and heartbeat)
  • A valid SAILLENT enrollment token (generated from the organization dashboard)

Step 1: Deploy the Runtime Engine

SAILLENT deploys as a compiled Rust binary. No container runtime is required.

curl -fsSL https://get.saillent.com | sudo bash -s -- <YOUR_ENROLLMENT_TOKEN>

Step 2: Verify Installation

# Check service status
sudo systemctl status saillent

# View real-time enforcement logs
sudo journalctl -u saillent -f

# Inspect the local audit database
sudo sqlite3 /opt/saillent/saillent.db "SELECT decision, reason FROM audits ORDER BY id DESC LIMIT 5;"

Step 3: Define Your First Policy

Policies are managed via Git. Create a file in your policy repository:

id: "analyst-postgres-001"
version: "1.0.0"
description: "Allow data analysts to read from postgres, block destructive actions"
agent_role: "data_analyst"
tool_id: "postgres_db"
allowed_actions:
  - Read
conditions:
  - MaxRiskScore: 50
  - PayloadRegexDeny: "(?i)(DROP|DELETE|TRUNCATE)"
priority: 100
is_active: true

Note: The runtime engine polls the Git repository every 60 seconds. Once committed, the policy is validated by PolicyEngine::validate_policies and hot-swapped into memory without requiring a service restart. If validation fails, the update is rejected and the last-known-good policy remains active.

Request Lifecycle

Every request traversing the configured SAILLENT enforcement path passes through the following sequential pipeline:

StageInputProcessingOutputFailure Behavior
1. ReceiveRaw HTTP requestAccept connection, check concurrency semaphoreRequest admitted or 429If semaphore exhausted: immediate 429
2. ParseHTTP bodyStrict JSON deserialization via serde_jsonStructured payloadMalformed JSON: immediate 400
3. NormalizeRaw text contentURL decode, recursive Base64/Gzip decode (5 iterations), NFKC normalize, strip zero-width chars, map homoglyphsCanonical textDecode failure: treat as opaque, continue
4. InspectNormalized textScan against compiled regex patterns (PII, jailbreak, SSRF, path traversal)Inspection flagsRegex cache bounded at 1000 entries
5. EvaluateFlags + contextMatch against active policy set in priority orderPolicy decision (Allow/Deny)No matching policy: default Deny
6. EnforceDecision + inspection flagsExecute: forward (applying redaction if PII controls matched), or rejectHTTP responseUpstream error: pass through to caller
7. AuditDecision + contextWrite to local SQLite with git_commit hashPersisted recordDB unavailable: log warning, do not block enforcement

Normalization Pipeline

Before security inspection, SAILLENT applies the following transformations to detect and reduce representation-based evasion. These are applied in order:

TransformationPurposeImplementation
URL DecodingDecode percent-encoded payloadsStandard URL decode
Recursive Base64/Gzip DecodeUnwrap layered encoding (up to 5 iterations)BASE64_RE detection + decode loop
Unicode NFKC NormalizationConvert fullwidth, compatibility characters to canonical formsunicode_normalization::nfkc()
Zero-Width Character StrippingRemove invisible characters used to split keywordsFilter ranges: U+200B-U+200F, U+202A-U+202E, U+2060-U+206F, U+FEFF
Combining Diacritic StrippingRemove combining marks used to alter character appearanceFilter range: U+0300-U+036F
Cyrillic Homoglyph MappingMap visually identical Cyrillic characters to Latin equivalentsExplicit mapping table

Boundary: These transformations address known representation-based bypass techniques. They are not a guarantee against all possible encoding evasion. The normalization pipeline is versioned and updated as new techniques are identified.

Policy Schema

Policies are YAML documents validated by the Rust PolicyEngine before loading. The following fields are defined in saillent-core/src/policy.rs:

FieldTypeRequiredDescription
idstringYesUnique policy identifier
versionstringYesVersion string for the policy
descriptionstringYesHuman-readable explanation of intent
agent_rolestringYesRole of the agent this policy applies to
tool_idstringYesTool or API endpoint targeted
allowed_actionsarrayYesPermitted actions: Read, Write, Execute, Delete
conditionsarrayNoAdditional enforcement constraints (see below)
priorityinteger (u32)YesEvaluation order. Higher = evaluated first
is_activebooleanYesWhether the policy is currently enforced
owner_teamstringNoEnterprise governance: owning team
approved_bystringNoEnterprise governance: approver
compliance_frameworksarrayNoEnterprise governance: applicable frameworks
risk_levelstringNoEnterprise governance: risk classification

Supported Conditions

ConditionTypeDescription
MaxRiskScoreu8Deny if the agent's calculated risk score exceeds this value
AllowedHours{start, end}Restrict enforcement window to specific hours (u8, 0-23)
DataClassificationNotstringDeny if the data classification matches the specified level
RequireMFAboolRequire multi-factor authentication context for the action
RequiresApprovalboolRequire explicit human approval before execution
PayloadRegexDenystringRust-compatible regex. If the normalized payload matches, deny the action

Policy Evaluation Algorithm

Policies sorted by priority descending
             ↓
Evaluate highest priority policy
             ↓
Match?
 ├── No → next policy
 └── Yes
       ↓
    Policy decision (Allow/Deny)
       ↓
    STOP (first match determines outcome)
  • Default deny: If no policy matches an action, the default behavior is to Deny.
  • Validation gate: If a new policy fails schema validation or regex compilation, the update is rejected. The engine retains the last-known-good policy state.

Enforcement

Enforcement outcomes combine the policy decision (Allow or Deny) with any inspection-layer redaction applied to admitted requests.

Allow

The request is forwarded to the configured upstream service without modification. The decision is logged to the audit store.

Redact

Redact is an inspection-layer action triggered by configured PII controls. It is not one of the values in allowed_actions. A YAML policy cannot select Redact: policy evaluation yields only Allow or Deny. An allowed request may still have PII redacted before forwarding.

When the inspection layer detects matched PII patterns in the payload, those patterns are replaced with redaction tokens before forwarding:

  • Email addresses → [REDACTED_EMAIL]
  • Social Security Numbers → [REDACTED_SSN]
  • Credit Card Numbers → [REDACTED_CC]

Deny

The request is not forwarded. The caller receives a JSON error response with the decision code and reason. The specific HTTP status depends on the denial cause (e.g., 403 for policy violation, 413 for oversized payload, 429 for concurrency limit).

Supported Runtime Interfaces

SAILLENT can inspect and enforce policies on the following traffic types:

InterfaceSupportedEnforcement Model
OpenAI APIYesRequest interception
Anthropic APIYesRequest interception
MCP (Model Context Protocol)YesTool/action interception
HTTP/JSON trafficYesRequest interception
Database protocolsNoNot currently supported

Boundary: SAILLENT can govern an AI agent's HTTP/API request that ultimately targets a database, but it does not currently act as a native database protocol proxy. SAILLENT enforces policies on traffic routed through the enforcement path. It does not inspect all actions an agent could theoretically take outside the configured interception boundary.

Resource Limits

LimitValueEnforcement PointBehavior on Exceed
Request body size1 MB (1,048,576 bytes)HTTP layer (tower_http::LimitRequestBodyLayer)Immediate 413 Payload Too Large
Concurrent requests100 per instanceRuntime (tokio::sync::Semaphore)Immediate 429 Too Many Requests (non-blocking backpressure)
Text content length50,000 charactersPayload inspection phaseRejected during normalization
Regex cache size1,000 entriesRegex compilation layerLRU eviction of oldest entries

Failure Behavior

SAILLENT uses fail-closed behavior for policy enforcement decisions. Auxiliary subsystem failures are handled according to the failure behavior documented below.

Failure ScenarioSystem BehaviorSecurity Posture
Audit SQLite unavailableEngine logs a non-fatal warning and continues enforcing policiesEnforcement continues; audit gap noted
Policy Git repo unreachableBackground sync fails gracefully. Last validated policy bundle retainedLast-known-good policy remains active
Invalid/malformed policy pushedPolicyEngine::validate_policies rejects the update. Previous state retainedUpdate rejected
Control plane / heartbeat lostLocal enforcement continues. Reconnection attempted every ~10 secondsLocal enforcement continues
License revokedLicense revocation is detected during the next successful heartbeat cycle. The current heartbeat interval is approximately 10 seconds. Upon receiving the revoked state, the runtime initiates its shutdown behavior and returns 503 Service Unavailable while transitioning out of service.Shutdown behavior initiated after revocation detection
Payload exceeds 1 MBRejected at HTTP layer with 413 Payload Too LargeResource protection
Concurrent requests exceed 100Excess rejected with 429 Too Many RequestsBackpressure

Policy-state Traceability

Each enforcement decision is written to the local SQLite audit store. Each record contains:

FieldDescription
audit_idUnique identifier for the decision
timestampISO 8601 timestamp of the decision
agent_idIdentifier of the agent that initiated the action
tool_idTarget tool or API endpoint
decisionOutcome recorded for the request: Allow, Deny, or Redact (Redact indicates the inspection layer modified the payload before forwarding)
reasonHuman-readable explanation of why the decision was made
protocolProtocol used (e.g., openai, anthropic, mcp)
git_commitThe Git commit associated with the policy bundle currently loaded by the runtime

Traceability: Each persisted enforcement decision records the Git commit associated with the active policy bundle, allowing the policy repository state used during enforcement to be identified. This supports customer governance, risk-management, and compliance processes.

Threat Model

Assets

  • Agent permissions
  • Tool access
  • Enterprise data
  • API credentials
  • Database operations
  • Policy configuration
  • Audit records

Threats

  • Compromised agent
  • Prompt-induced malicious action
  • Malicious tool invocation
  • Encoded payload evasion
  • Unicode/representation evasion
  • Unauthorized destructive operation
  • Policy tampering
  • Malformed policy deployment
  • Resource exhaustion

Trust Assumptions

SAILLENT trusts:

  • The runtime host
  • The operating system
  • The SAILLENT runtime binary
  • The configured policy repository / policy source
  • The licensing service (license.saillent.com) used for enrollment token validation and heartbeat

Security Boundary

Untrusted / potentially compromised │ ▼ AI Agent │ ▼ ════════════════════════════ SAILLENT Enforcement Boundary ════════════════════════════ │ ▼ Trusted Systems

Assumption: SAILLENT assumes the runtime host and its operating-system security boundary have not been compromised.

Security Properties

PropertyBehaviorVerification
Policy sourceGit repository, polled every 60 secondsIntegration test
Policy validationSchema + regex compilation validation before loadingUnit/integration tests
Policy updateRuntime hot-swap, no restart requiredIntegration test
Invalid policy handlingRejected; last-known-good retainedIntegration test
Request body limit1 MB (HTTP layer)Automated test
Concurrency limit100 simultaneous requests per instanceAutomated test
Audit persistenceEnforcement decisions written to SQLiteIntegration test
Audit failure behaviorEnforcement continues if audit write failsFailure test
Policy attributionGit commit recorded in audit eventIntegration test
Runtime languageRustBuild verification
DeploymentNative Linux binary, systemd serviceDeployment verification
Default unmatched actionDeny (fail-closed)Integration test
CI enforcementCompilation, tests, and linting gates. Builds with warnings denied (-D warnings)CI pipeline

Explicit Non-Goals

What SAILLENT Does Not Do

  • SAILLENT does not replace Identity and Access Management (IAM). It enforces policies on top of existing identity systems.
  • SAILLENT does not determine whether an LLM response is factually correct.
  • SAILLENT does not guarantee that an agent is uncompromised.
  • SAILLENT does not replace network segmentation or network firewalls.
  • SAILLENT does not automatically make an application compliant with a regulatory framework. It provides audit artifacts and enforcement controls that support compliance efforts.
  • SAILLENT does not attempt to make an AI model inherently trustworthy. It establishes an external control boundary around the actions the agent is permitted to execute.

SAILLENT is not

  • an LLM
  • an LLM gateway by itself
  • an IAM system
  • a network firewall
  • an EDR
  • a SIEM
  • a replacement for application authorization
  • a guarantee of model safety
End of technical reference · SAILLENT runtime v0.1.0 · Policy Schema 1.0 · Document revision 1.0
TRUST & COMPLIANCE

Built for the frameworks your auditors care about

SAILLENT produces the cryptographic, exportable evidence regulated teams need — across the US, Canada, and Europe. Explore compliance tooling →

SOC 2 Type II United States
DESIGNED FOR
Trust Services Criteria controls
ISO 27001:2022 European Union
DESIGNED FOR
Information security controls
GDPR European Union
CAPABILITIES FOR
EU data protection requirements
HIPAA United States
CAPABILITIES FOR
Healthcare privacy controls
NIST AI RMF United States
ALIGNED WITH
AI risk management framework
ISO/IEC 42001 European Union
ALIGNED WITH
AI management systems
OSFI E-23 Canada
RELEVANT TO
Financial AI oversight requirements
SR 11-7 United States
RELEVANT TO
Model risk management requirements
Saudi PDPL Saudi Arabia
CAPABILITIES FOR
Kingdom personal data protection law
SDAIA AI Governance Saudi Arabia
ALIGNED WITH
National data & AI authority guidance
SAMA Fintech Oversight Saudi Arabia
RELEVANT TO
Saudi Central Bank fintech supervision
UAE PDPL United Arab Emirates
CAPABILITIES FOR
Federal Decree-Law 45/2021 data protection
CBUAE AI Guidance United Arab Emirates
RELEVANT TO
UAE Central Bank AI governance for finance
ADGM FSRA United Arab Emirates
RELEVANT TO
Abu Dhabi Global Market financial regulation
China PIPL China
CAPABILITIES FOR
Personal Information Protection Law
MLPS 2.0 China
RELEVANT TO
Multi-Level Protection Scheme cybersecurity

Capability claims only — formal certifications & attestations in progress · Technical evidence available under NDA

Request a Technical Briefing →