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

211 lines
6.1 KiB
Markdown

# 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](../user-guide/security.md). For the architectural design, see [Security architecture](../architecture/security.md).
---
## 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](../user-guide/security.md#pattern-reference) 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.
```python
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](../user-guide/security.md#sensitive-file-patterns) 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`.
```python title="audit_logger_example.py"
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