Files
OpenJarvis/docs/api/security.md
T
Jon Saad-FalconandClaude Opus 4.6 a433740809 Add 30 tests for security/channels coverage gaps and 6 new docs pages
Tests: GuardrailsEngine.stream() async tests, OpenClawChannelBridge listener_loop
tests, channel CLI command tests, FileReadTool sensitive file blocking, ingest_path
sensitive file filtering, SecurityConfig/ChannelConfig config tests. Documentation:
new user guides, architecture pages, and API references for Security and Channels
modules; updated CLAUDE.md, configuration docs, CLI reference, and mkdocs.yml nav.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 03:31:19 +00:00

6.1 KiB

API Reference: Security

The openjarvis.security package provides text scanning, content guardrails, file path filtering, and audit logging. All public components are documented below.

For usage examples and configuration, see the Security user guide. For the architectural design, see Security architecture.


Types

Core data types shared across the security subsystem.

ThreatLevel

Severity classification for individual scan findings. Ordered from least to most severe: LOW < MEDIUM < HIGH < CRITICAL.

::: openjarvis.security.types.ThreatLevel options: show_source: true show_root_heading: true heading_level: 4

RedactionMode

Controls the action taken by GuardrailsEngine when findings are detected.

::: openjarvis.security.types.RedactionMode options: show_source: true show_root_heading: true heading_level: 4

SecurityEventType

Categories of security events recorded by AuditLogger.

::: openjarvis.security.types.SecurityEventType options: show_source: true show_root_heading: true heading_level: 4

ScanFinding

A single match produced by a scanner. Includes the pattern name, matched text, position, threat level, and a human-readable description.

::: openjarvis.security.types.ScanFinding options: show_source: true show_root_heading: true heading_level: 4

ScanResult

Aggregated result from one or more scanner passes. The clean property returns True when no findings were detected; highest_threat returns the most severe ThreatLevel found.

::: openjarvis.security.types.ScanResult options: show_source: true show_root_heading: true heading_level: 4

SecurityEvent

A recorded security event, as persisted by AuditLogger.

::: openjarvis.security.types.SecurityEvent options: show_source: true show_root_heading: true heading_level: 4


BaseScanner

BaseScanner is the abstract base class for all scanner implementations. Implement both scan() and redact() to create a custom scanner.

::: openjarvis.security._stubs.BaseScanner options: show_source: true show_root_heading: true heading_level: 3


SecretScanner

Detects API keys, tokens, passwords, and credentials in text using regex patterns. See the pattern reference table in the user guide for the full list of patterns and their threat levels.

::: openjarvis.security.scanner.SecretScanner options: show_source: true show_root_heading: true heading_level: 3


PIIScanner

Detects personally identifiable information including email addresses, Social Security Numbers, credit card numbers, phone numbers, and public IP addresses.

::: openjarvis.security.scanner.PIIScanner options: show_source: true show_root_heading: true heading_level: 3


GuardrailsEngine

GuardrailsEngine wraps any InferenceEngine with security scanning on both input and output. It implements the full InferenceEngine interface, so it can be used anywhere an engine is expected.

!!! note "Registration" GuardrailsEngine is not registered in EngineRegistry. Instantiate it directly by wrapping an existing engine instance.

::: openjarvis.security.guardrails.GuardrailsEngine options: show_source: true show_root_heading: true heading_level: 3

SecurityBlockError

Raised by GuardrailsEngine when mode=RedactionMode.BLOCK and findings are detected during a scan. Catch this exception to handle blocked requests gracefully.

from openjarvis.security.guardrails import GuardrailsEngine, SecurityBlockError
from openjarvis.security.types import RedactionMode

guarded = GuardrailsEngine(engine, mode=RedactionMode.BLOCK)

try:
    response = guarded.generate(messages, model="qwen3:8b")
except SecurityBlockError as exc:
    # exc.args[0] describes the direction and finding count
    print(f"Request blocked: {exc}")

::: openjarvis.security.guardrails.SecurityBlockError options: show_source: true show_root_heading: true heading_level: 4


File Policy

Functions and constants for filtering sensitive file paths. Used internally by FileReadTool and the memory ingest path.

DEFAULT_SENSITIVE_PATTERNS

The default set of glob patterns used to identify sensitive files. This is a frozenset[str] exported from openjarvis.security.file_policy.

See the sensitive file patterns table in the user guide for the complete list.

::: openjarvis.security.file_policy.DEFAULT_SENSITIVE_PATTERNS options: show_source: true show_root_heading: true heading_level: 4

is_sensitive_file

::: openjarvis.security.file_policy.is_sensitive_file options: show_source: true show_root_heading: true heading_level: 4

filter_sensitive_paths

::: openjarvis.security.file_policy.filter_sensitive_paths options: show_source: true show_root_heading: true heading_level: 4


AuditLogger

Append-only SQLite-backed storage for security events. Subscribes to SECURITY_SCAN, SECURITY_ALERT, and SECURITY_BLOCK events on the EventBus when a bus is provided.

The default database path is ~/.openjarvis/audit.db, overridable via security.audit_log_path in config.toml.

from openjarvis.core.events import EventBus
from openjarvis.security.audit import AuditLogger
from openjarvis.security.guardrails import GuardrailsEngine
from openjarvis.security.types import RedactionMode

bus = EventBus()
audit = AuditLogger(bus=bus)

guarded = GuardrailsEngine(engine, mode=RedactionMode.WARN, bus=bus)

# Security events from guarded engine are now persisted automatically
events = audit.query(limit=10)
print(f"Logged {audit.count()} events")
audit.close()

::: openjarvis.security.audit.AuditLogger options: show_source: true show_root_heading: true heading_level: 3