Home / Documentation / Configuration Guide

The Three-Layer Agent Firewall

Guardianship

Every one of Neurova's stars needs a guardian. We ship several protective layers built in:

LayerWhat it protects
L0 EntryJWT authentication, IP allow/deny lists, rate limiting, input safety scanning
L1 IsolationHard isolation between users (cannot be disabled), optional isolation between agents
L2 OutputAPI key masking, sensitive-path interception, file-type protection
L3 AuditOperation audit logs, security event monitoring, anomalous behaviour detection
L4 DataEncrypted storage at rest, anonymisation of sensitive information, right-to-be-forgotten support
Every star you tend belongs to you alone, and no one else can look at it.

L0: Entry gateway and output masking

  • JWT authentication — every API request must be authenticated
  • IP allow/deny lists — access controlled by source IP
  • Global rate limiting — configured centrally by the administrator to absorb abusive traffic
  • Input safety inspection — real-time interception of prompt injection, SQL injection, command injection and path traversal
  • Automatic output masking — API keys, tokens, passwords and similar secrets are replaced on the way out

L1: Dual isolation across users and agents

Isolation scopeDefaultHow it is controlled
Between usersAlways on (cannot be disabled)An agent of user A has no way to reach user B's data
Between agentsOff by defaultUsers may turn it on to isolate agents under the same user

Isolation is carried through the whole stack by ContextVar scoping (three levels: agent / user-session / user) and enforced with a mandatory WHERE clause in SQL.

L2: File access protection

  • System-level denial of access to configuration, keys, documentation, databases and other sensitive files
  • Users may add their own interception rules for file extensions and paths
  • An agent workspace allowlist: free read/write only inside workspace/{user_id}/

MCP governance (six P0 security hardenings)

IDVulnerabilityFix
M1Unauthenticated RCEAuthorization dependency added to the router; stdio restricted to admin
M2No allowlist for stdio commandShell rejection table plus a command allowlist
M3Tool routing bypassed the firewallFirewall converged into the call_tool main path
M4Governance pre-check missed key namesFull-parameter scanning (scan_all) with graded fail-closed
M5MCP client was a cross-user singletonFirewall identity is now threaded per request (injected via ContextVar)
M6-M10Configuration forks / dead code / key-name bugsStorage converged, lazy ToolEngine acquisition, server_id corrected