diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..c43cc2e --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,5 @@ +title: SentinelGuard +description: Security-first LLM gateway and guardrails framework for AI applications +theme: jekyll-theme-primer +plugins: + - jekyll-seo-tag diff --git a/docs/index.md b/docs/index.md index 0920377..34b79b0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,129 +1,178 @@ -# SentinelGuard - -
-
- -

Security-first LLM gateway and guardrails framework

- -## Put one protected gateway in front of your AI traffic - -SentinelGuard helps teams secure LLM applications, AI IDEs, agents, and model -provider traffic with prompt scanning, output scanning, PII and secret -protection, model routing, failover, usage controls, audit events, and a stable -management API. - -
-[Start in 5 minutes](getting-started.md){ .sg-button .sg-button-primary } -[Run the gateway](gateway.md){ .sg-button .sg-button-secondary } -[View on GitHub](https://github.com/aitechnav/Sentinel_Guard){ .sg-button .sg-button-secondary target="_blank" } -
- -
-OpenAI-compatible gateway -PII and secret controls -Prometheus metrics -Docker and Kubernetes ready -
- -
-
- -

Install and start the gateway

- -```bash -pip install "sentinelguard[gateway,monitoring]" +--- +title: SentinelGuard +description: Security-first LLM gateway and guardrails framework for AI applications +--- + +
+ + +
+
+

Security-first LLM gateway and guardrails framework

+

Put one protected gateway in front of your AI traffic

+

+ SentinelGuard helps teams secure LLM applications, AI IDEs, agents, and + model provider traffic with prompt scanning, output scanning, PII and + secret protection, model routing, failover, usage controls, audit + events, and a stable management API. +

+ +
+ OpenAI-compatible gateway + PII and secret controls + Prometheus metrics + Docker and Kubernetes ready +
+
+ +
+
+ + + +
+

Install and start the gateway

+
pip install "sentinelguard[gateway,monitoring]"
 sentinelguard init
 sentinelguard gateway \
   --config sentinelguard.yaml \
   --gateway-config sentinelguard-gateway.yaml \
-  --port 8080
-```
-
-Point apps and IDEs to:
-
-```text
-http://localhost:8080/v1
-```
-
-
-
- -## Why Teams Use SentinelGuard - -
-
-### Secure the LLM boundary -Scan prompts before they reach a model and scan responses before they return to -users. Block attacks, redact PII, and stop secrets from leaving the application. -
- -
-### Route across providers -Use friendly model names, route traffic across OpenAI-compatible providers, -fail over when one provider is unavailable, and keep private routes available -for sensitive traffic. -
- -
-### Operate with evidence -Use virtual keys, usage accounting, provider health, privacy-safe audit events, -Prometheus metrics, and the stable `/gateway/v1` API for dashboards and alerts. -
-
- -## Built For Modern AI Applications - -
-
- -### Package mode - -Use SentinelGuard directly in Python code when you want guardrails inside one -application. - -```python -from sentinelguard import SentinelGuard + --port 8080 +

Point apps and IDEs to http://localhost:8080/v1

+
+ + +
+
+ 36 + security scanners +
+
+ v1 + stable gateway API +
+
+ 2 modes + library and proxy +
+
+ local + model-backed detection +
+
+ +
+
+

Why teams use SentinelGuard

+

Runtime protection for the LLM boundary

+
+
+
+

Secure prompts and responses

+

+ Scan prompts before they reach a model and scan responses before they + return to users. Block attacks, redact PII, and stop secrets from + leaving the application. +

+
+
+

Route across providers

+

+ Use friendly model names, route traffic across OpenAI-compatible + providers, fail over when one provider is unavailable, and keep + private routes available for sensitive traffic. +

+
+
+

Operate with evidence

+

+ Use virtual keys, usage accounting, provider health, privacy-safe + audit events, Prometheus metrics, and the stable + /gateway/v1 API for dashboards and alerts. +

+
+
+
+ +
+
+

Built for modern AI applications

+

Use it in code or as a shared gateway

+
+
+
+

Package mode

+

Use SentinelGuard directly in Python code when you want guardrails inside one application.

+
from sentinelguard import SentinelGuard
 
 guard = SentinelGuard()
 result = guard.scan_prompt("Ignore previous instructions")
-print(result.is_valid, result.failed_scanners)
-```
-
+print(result.is_valid, result.failed_scanners)
+
+
+

Gateway mode

+

Run SentinelGuard as a proxy so multiple applications, users, and AI tools share one security boundary.

+
App or IDE -> SentinelGuard /v1 -> LLM provider
+

Stable endpoints: /gateway/v1/contract, /gateway/v1/health, /gateway/v1/routes

+
+
+
+ +
+
+

Explore the docs

+

Pick the workflow you need

+
+ +
-
- -### Gateway mode - -Run SentinelGuard as a proxy so multiple applications, users, and AI tools can -share the same security boundary. - -```text -App or IDE -> SentinelGuard /v1 -> LLM provider -``` - -Stable management API: - -```text -/gateway/v1/contract -/gateway/v1/health -/gateway/v1/routes -``` - -
-
- -## Explore The Docs - -| Workflow | Start Here | -| --- | --- | -| Use SentinelGuard inside Python code | [Getting Started](getting-started.md) | -| Put SentinelGuard in front of apps or IDEs | [LLM Gateway](gateway.md) | -| Build a dashboard or integration | [Stable Gateway API](gateway-api.md) | -| Deploy with containers or Kubernetes | [Deployment](deployment.md) | -| Publish official Docker images | [Docker Release](docker-release.md) | - -## Open Source And Easy To Try -The GitHub star button in the top-right header shows the repository star count -and opens GitHub's authenticated star flow. GitHub requires the user to be -signed in before starring a repository. + diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index c5d2eaa..3b15122 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -13,34 +13,116 @@ } } +.sg-page { + --sg-primary: #2347a5; + --sg-primary-dark: #182f70; + --sg-teal: #087f83; + --sg-green: #19734b; + --sg-amber: #a35b00; + --sg-ink: var(--md-default-fg-color, #172033); + --sg-muted: var(--md-default-fg-color--light, #526071); + --sg-border: rgba(37, 55, 80, 0.16); + --sg-surface: var(--md-default-bg-color, #ffffff); + --sg-soft: #f6f8fb; + --sg-code-bg: #101827; + color: var(--sg-ink); +} + +[data-md-color-scheme="slate"] .sg-page { + --sg-primary: #8fb3ff; + --sg-primary-dark: #b7ccff; + --sg-teal: #58d3cc; + --sg-green: #75d8a4; + --sg-amber: #f3bd6a; + --sg-border: rgba(209, 219, 235, 0.18); + --sg-soft: rgba(255, 255, 255, 0.04); + --sg-code-bg: #0b1220; +} + +.sg-product-nav { + align-items: center; + border-bottom: 1px solid var(--sg-border); + display: flex; + justify-content: space-between; + gap: 1rem; + margin: 0 0 1.8rem; + padding: 0.25rem 0 1rem; +} + +.sg-brand { + align-items: center; + color: var(--sg-ink) !important; + display: inline-flex; + font-size: 0.95rem; + font-weight: 800; + gap: 0.55rem; + text-decoration: none !important; +} + +.sg-brand-mark { + align-items: center; + background: var(--sg-primary); + border-radius: 0.35rem; + color: #ffffff; + display: inline-flex; + font-size: 0.72rem; + height: 1.7rem; + justify-content: center; + letter-spacing: 0; + width: 1.7rem; +} + +.sg-nav-links { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.9rem; + justify-content: flex-end; +} + +.sg-nav-links a:not(.github-button) { + color: var(--sg-muted) !important; + font-size: 0.78rem; + font-weight: 700; + text-decoration: none !important; +} + +.sg-nav-links a:hover { + color: var(--sg-primary) !important; +} + .sg-hero { + align-items: center; display: grid; - grid-template-columns: minmax(0, 1.25fr) minmax(300px, 0.75fr); gap: 2rem; - align-items: center; - margin: 1.2rem 0 2.6rem; - padding: 2.2rem 0 1.2rem; + grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr); + margin: 0 0 2rem; + min-height: 430px; } -.sg-hero h2 { - margin: 0 0 0.8rem; - font-weight: 800; +.sg-hero-copy h1 { + color: var(--sg-ink); + font-size: clamp(2.1rem, 5vw, 3.7rem); + font-weight: 850; letter-spacing: 0; - line-height: 1.08; - font-size: clamp(2rem, 5vw, 3.35rem); + line-height: 1.04; + margin: 0 0 1rem; } -.sg-hero p { - color: var(--md-default-fg-color--light); +.sg-lede { + color: var(--sg-muted); font-size: 1.05rem; + line-height: 1.75; + margin: 0; + max-width: 45rem; } .sg-eyebrow { - color: var(--md-primary-fg-color) !important; - font-size: 0.78rem !important; - font-weight: 800; - letter-spacing: 0.06em; - margin-bottom: 0.6rem; + color: var(--sg-teal) !important; + font-size: 0.75rem !important; + font-weight: 850; + letter-spacing: 0.08em; + margin: 0 0 0.65rem; text-transform: uppercase; } @@ -48,109 +130,331 @@ display: flex; flex-wrap: wrap; gap: 0.7rem; - margin-top: 1.2rem; + margin-top: 1.35rem; } .sg-button { - display: inline-flex; align-items: center; border-radius: 0.35rem; - font-weight: 700; + display: inline-flex; + font-size: 0.83rem; + font-weight: 800; + min-height: 2.45rem; padding: 0.68rem 0.9rem; - transition: opacity 120ms ease, transform 120ms ease; + text-decoration: none !important; + transition: border-color 140ms ease, color 140ms ease, transform 140ms ease; } .sg-button:hover { - opacity: 0.88; transform: translateY(-1px); } .sg-button-primary { - background: var(--md-primary-fg-color); - color: var(--md-primary-bg-color) !important; + background: var(--sg-primary); + border: 1px solid var(--sg-primary); + color: #ffffff !important; } .sg-button-secondary { - border: 1px solid var(--md-default-fg-color--lightest); - color: var(--md-default-fg-color) !important; -} - -.sg-panel { - background: color-mix(in srgb, var(--md-primary-fg-color) 8%, transparent); - border: 1px solid color-mix(in srgb, var(--md-primary-fg-color) 28%, transparent); - border-radius: 0.45rem; - padding: 1rem; -} - -.sg-panel-title { - color: var(--md-default-fg-color) !important; - font-size: 0.82rem !important; - font-weight: 800; - margin: 0 0 0.7rem; + background: var(--sg-surface); + border: 1px solid var(--sg-border); + color: var(--sg-ink) !important; } -.sg-panel code { - white-space: nowrap; +.sg-button-secondary:hover { + border-color: var(--sg-primary); + color: var(--sg-primary) !important; } .sg-proof-row { display: flex; flex-wrap: wrap; gap: 0.55rem; - margin-top: 1.3rem; + margin-top: 1.35rem; } .sg-proof-row span { - border: 1px solid var(--md-default-fg-color--lightest); + background: var(--sg-soft); + border: 1px solid var(--sg-border); border-radius: 999px; - color: var(--md-default-fg-color--light); + color: var(--sg-muted); + font-size: 0.72rem; + font-weight: 750; + padding: 0.3rem 0.58rem; +} + +.sg-terminal { + background: var(--sg-code-bg); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 0.5rem; + box-shadow: 0 22px 52px rgba(15, 23, 42, 0.2); + color: #d8e2f3; + overflow: hidden; + padding: 1rem; +} + +.sg-terminal-bar { + display: flex; + gap: 0.38rem; + margin-bottom: 0.9rem; +} + +.sg-terminal-bar span { + border-radius: 50%; + display: block; + height: 0.62rem; + width: 0.62rem; +} + +.sg-terminal-bar span:nth-child(1) { + background: #ef5f57; +} + +.sg-terminal-bar span:nth-child(2) { + background: #f6bd4f; +} + +.sg-terminal-bar span:nth-child(3) { + background: #5fcf7d; +} + +.sg-panel-title { + color: #ffffff !important; + font-size: 0.76rem !important; + font-weight: 850; + letter-spacing: 0.04em; + margin: 0 0 0.7rem; + text-transform: uppercase; +} + +.sg-terminal pre, +.sg-split pre { + background: transparent !important; + border: 0 !important; + box-shadow: none !important; + margin: 0; + padding: 0 !important; +} + +.sg-terminal code, +.sg-split pre code { + background: transparent !important; + color: inherit !important; + display: block; font-size: 0.74rem; + line-height: 1.6; + white-space: pre-wrap; +} + +.sg-muted { + color: var(--sg-muted); + font-size: 0.82rem; + line-height: 1.55; + margin-bottom: 0; +} + +.sg-terminal .sg-muted { + border-top: 1px solid rgba(255, 255, 255, 0.12); + color: #b9c7dc; + margin-top: 1rem; + padding-top: 0.85rem; +} + +.sg-terminal .sg-muted code { + color: #ffffff !important; + display: inline; +} + +.sg-metrics { + border-bottom: 1px solid var(--sg-border); + border-top: 1px solid var(--sg-border); + display: grid; + gap: 0; + grid-template-columns: repeat(4, minmax(0, 1fr)); + margin: 1rem 0 2.7rem; +} + +.sg-metrics div { + border-right: 1px solid var(--sg-border); + padding: 1rem; +} + +.sg-metrics div:last-child { + border-right: 0; +} + +.sg-metrics strong { + color: var(--sg-primary); + display: block; + font-size: 1.35rem; + line-height: 1.2; +} + +.sg-metrics span { + color: var(--sg-muted); + display: block; + font-size: 0.76rem; font-weight: 700; - padding: 0.28rem 0.55rem; + margin-top: 0.2rem; +} + +.sg-section { + margin: 2.7rem 0; +} + +.sg-section-heading { + max-width: 48rem; +} + +.sg-section-heading h2 { + color: var(--sg-ink); + font-size: clamp(1.45rem, 3vw, 2rem); + font-weight: 850; + letter-spacing: 0; + line-height: 1.15; + margin: 0 0 1.15rem; } .sg-card-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; - margin: 1.4rem 0; + grid-template-columns: repeat(3, minmax(0, 1fr)); + margin: 1.2rem 0 0; +} + +.sg-card, +.sg-split article, +.sg-doc-list a { + background: var(--sg-surface); + border: 1px solid var(--sg-border); + border-radius: 0.5rem; } .sg-card { - border: 1px solid var(--md-default-fg-color--lightest); - border-radius: 0.45rem; padding: 1rem; - background: color-mix(in srgb, var(--md-default-bg-color) 92%, var(--md-primary-fg-color) 8%); } -.sg-card h3 { - margin-top: 0; +.sg-card h3, +.sg-split h3 { + color: var(--sg-ink); + font-size: 1rem; + font-weight: 850; + letter-spacing: 0; + line-height: 1.25; + margin: 0 0 0.55rem; +} + +.sg-card p, +.sg-split p { + color: var(--sg-muted); + font-size: 0.84rem; + line-height: 1.65; + margin: 0; } .sg-split { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; - margin: 1.4rem 0; + grid-template-columns: repeat(2, minmax(0, 1fr)); } -.sg-split > div { - border: 1px solid var(--md-default-fg-color--lightest); - border-radius: 0.45rem; +.sg-split article { padding: 1rem; } -.sg-split h3 { - margin-top: 0; +.sg-split pre { + background: var(--sg-code-bg) !important; + border-radius: 0.45rem; + color: #d8e2f3; + margin-top: 0.9rem; + padding: 0.85rem !important; } -@media screen and (max-width: 760px) { - .sg-hero { +.sg-doc-list { + display: grid; + gap: 0.75rem; + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.sg-doc-list a { + display: flex; + flex-direction: column; + gap: 0.3rem; + padding: 0.9rem 1rem; + text-decoration: none !important; + transition: border-color 140ms ease, transform 140ms ease; +} + +.sg-doc-list a:hover { + border-color: var(--sg-primary); + transform: translateY(-1px); +} + +.sg-doc-list span { + color: var(--sg-muted); + font-size: 0.76rem; +} + +.sg-doc-list strong { + color: var(--sg-primary); + font-size: 0.95rem; +} + +@media screen and (max-width: 920px) { + .sg-hero, + .sg-card-grid, + .sg-split, + .sg-doc-list { grid-template-columns: 1fr; - padding-top: 1rem; } - .sg-split { + .sg-hero { + min-height: 0; + } + + .sg-metrics { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .sg-metrics div:nth-child(2) { + border-right: 0; + } +} + +@media screen and (max-width: 640px) { + .sg-product-nav { + align-items: flex-start; + flex-direction: column; + } + + .sg-nav-links { + justify-content: flex-start; + } + + .sg-hero-copy h1 { + font-size: 2rem; + } + + .sg-actions { + flex-direction: column; + } + + .sg-button { + justify-content: center; + width: 100%; + } + + .sg-metrics { grid-template-columns: 1fr; } + + .sg-metrics div, + .sg-metrics div:nth-child(2) { + border-bottom: 1px solid var(--sg-border); + border-right: 0; + } + + .sg-metrics div:last-child { + border-bottom: 0; + } } diff --git a/mkdocs.yml b/mkdocs.yml index d8c4d63..61dbe8f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,7 @@ site_name: SentinelGuard site_description: Security guardrails, LLM gateway controls, and observability for AI applications site_url: https://aitechnav.github.io/Sentinel_Guard/ +use_directory_urls: false repo_url: https://github.com/aitechnav/Sentinel_Guard repo_name: aitechnav/Sentinel_Guard edit_uri: edit/main/docs/