Stratos sits on top of your existing tools (Datadog, Jira, PagerDuty etc.) and gives your support team a unified 10-layer incident view.
1. Connect tools (Section A)2. Configure layers (Section B)3. Open Dashboard tab4. Open Incidents and correlate a ticket or live alert
Stratos Configuration
Connect your tools (preset or custom), then configure each of the 10 dashboard layers (0–9). Credentials saved locally only.
A — Tool Connections 8 categories
B — Layer Configuration 10 layers (0–9)
Each layer has its own data sources. Some come automatically from connected tools (L1, L6). Others need customer-specific inputs (L2, L4, L5, L7, L9).
Monitoring Aggregator
When multiple monitoring tools observe the same services, Stratos reconciles them into a unified status. Side-by-side view with consensus column.
Admin — team & data
Manage who can use Stratos in your company, and archive your configuration and knowledge base.
Stratos Guide
What Stratos does, why each connection exists, and how to read the dashboard. Pick the view that matches what you're here to do.
This is the setup reference for whoever connects tools and configures Stratos. Viewers on your team don't need any of this — send them the "Viewer" tab above instead.
What Stratos actually does
Stratos pulls data from your monitoring, ticketing, code, and knowledge tools, maps it onto your business flow (login → cart → payment → fulfilment, etc.), and when something breaks, it correlates alerts/tickets/deploys down to a single most-likely root-cause component with a confidence score — then suggests the matching runbook and shows the blast radius across business → application → infrastructure layers.
Setup order (do this first, top to bottom)
#
Category
Purpose
Status
1
Monitoring (Grafana etc.)
Live alerts — the primary signal an incident is happening
LIVE
2
Ticketing (Jira)
Tickets as an alternate incident trigger; auto-creates/updates tickets
LIVE
3
CI/CD (GitHub)
Recent commits/deploys as extra root-cause evidence ("deployed 12m before the incident")
LIVE
4
Knowledge (Confluence / Docs / KB)
Past-incident history + matched runbook steps
LIVE
5
Layer Configuration (Section B)
Your business stages, service dependencies, apps, on-call, SLAs
manual
6
On-call / Comms / Logs / Infra
Paging, Slack posting, Splunk log search, CMDB
partial/mock
—
AI Providers (Gemini/ChatGPT/Claude/Proxy)
Root-cause verification + multi-LLM comparison — not set here, see below
centralized
Category-by-category
📡 Monitoring & Observability — Grafana
Why: This is the primary trigger — live firing alerts are what a real incident looks like.
Open your Grafana instance in a browser (e.g. https://yourstack.grafana.net for Grafana Cloud, or your self-hosted URL) and log in.
Go to Administration → Users and access → Service accounts (left sidebar).
Click Add service account. Give it a name (e.g. "stratos"), set Role to Viewer (read-only — never grant more than needed).
Open the new service account → Add service account token → click Generate token → copy it now (it's shown only once, looks like glsa_xxxxxxxxxxxx).
In Stratos: Configuration → 📡 Monitoring & Observability → click the Grafana card to expand it.
Paste your Grafana URL into Grafana URL, and the token into Service account token.
If Grafana Cloud (most setups): also fill CORS proxy with your deployed proxy.php URL, or run node stratos-proxy.js locally and use http://localhost:8787 — Grafana Cloud doesn't allow the browser to call it directly otherwise.
Click Test connection — watch the log box for ✓ health: database=ok · version=....
Click Extract dashboards & alerts to pull in your current firing alerts.
This only ever reads (Viewer role) — Stratos never writes to Grafana.
🎫 Ticketing — Jira
Why: Lets a support ticket (not just a Grafana alert) trigger an incident, auto-creates a Jira ticket when Stratos detects one, and posts runbook comments back to it.
Go to id.atlassian.com → sign in with the account you want Stratos to act as.
Click Security (left sidebar) → API tokens.
Click Create API token (the plain one, not "with scopes" — Jira's classic endpoints need the classic token type). Name it "stratos", set an expiry, click Create, then copy the token (shown once).
In Stratos: Configuration → 🎫 Ticketing & Incident Management → click the Jira card.
Fill: Jira URL (e.g. https://yourteam.atlassian.net), Email (the same account's login email), API Token (paste it), Project Key (the short code before ticket numbers, e.g. OPS in OPS-123).
Fill CORS Proxy with your deployed proxy.php or local stratos-proxy.js URL — same reason as Grafana, Atlassian blocks direct browser calls.
Click Test connection — the log should say ✓ Authenticated as <your name>.
Click Save Configuration at the bottom of the page.
Read-only by default; auto-ticket-creation is a separate checkbox you can leave off if you don't want Stratos writing to Jira.
🔀 Code Repository & CI/CD — GitHub
Why: A commit or deploy shortly before an incident is one of the strongest real-world root-cause signals — Stratos checks the 90 minutes before each incident for a matching commit and boosts confidence if it finds one.
Go to github.com → click your profile photo (top right) → Settings.
Left sidebar, scroll down → Developer settings → Personal access tokens → Fine-grained tokens.
Click Generate new token. Name it "stratos".
Under Repository access, choose Only select repositories → pick the exact repo that backs the service you're monitoring (not a random/unrelated one).
Under Permissions → Repository permissions, find Contents → set to Read-only. (Optional: also set Actions → Read-only if you want GitHub Actions workflow-run data too.)
Click Generate token → copy it (starts with github_pat_).
In Stratos: Configuration → 🔀 Code Repository & CI/CD → click the GitHub card.
Fill Org / Owner (your GitHub username or org name), Repository (exact repo name, case-sensitive), Personal Access Token (paste it). No CORS proxy needed — GitHub's API allows direct browser calls.
Click Test connection, then Extract commits & deploys.
Gotcha: a 404 on the repo check while otherwise authenticated almost always means the token isn't scoped to see that (private) repo — go back and check step 4.
💬 Communications — Slack (OAuth pilot)
Why: A one-click "Sign in with Slack" is faster and safer to hand to a customer than asking them to mint and paste a Bot Token — this is a pilot of that pattern, on the one category not yet wired to a real tool. The catch, up front: Slack (like almost every OAuth provider) requires a Client Secret to exchange the login code for a real token, and a Client Secret can never sit in browser JavaScript — anyone could read it from page source. So OAuth needs one small server-side file to hold that secret. A companion file, oauth-slack.php, is included for this — deploy it anywhere PHP + cURL runs (same place as proxy.php).
Go to api.slack.com/apps → Create New App → From scratch. Name it "Stratos", pick your workspace.
OAuth & Permissions (left sidebar) → Redirect URLs → add the exact URL where index.html is hosted, e.g. https://yourdomain.com/index.html.
Still on that page, under Scopes → Bot Token Scopes, add: channels:read, chat:write, users:read.
Basic Information → App Credentials → copy the Client ID and Client Secret.
Upload oauth-slack.php next to index.html on your hosting; open it and paste the Client Secret (and Client ID) into the two variables at the top — never into the app itself.
In Stratos: Configuration → 💬 Communications → Slack card → paste the Client ID (safe to put here, it's public) and the URL to your deployed oauth-slack.php into OAuth Backend URL.
Click Connect with Slack (OAuth) — you'll land on Slack's own authorize screen, approve, and land back here already connected. No token was ever typed or copied.
No backend deployed yet? You can still use Slack today by skipping OAuth entirely — create a Bot Token the normal way (api.slack.com/apps → OAuth & Permissions → Install to Workspace → copy Bot User OAuth Token) and paste it into the Bot Token (manual) field instead. "Failed to fetch" on Test connection? Some networks/browsers block a direct call to slack.com from a page. Fill the CORS Proxy field with your deployed proxy.php URL (same file used for Grafana/Jira) and press Test connection again — proxy.php already allows slack.com.
📚 Knowledge — Docs/Links/API, Confluence, Notion
Why: Feeds two separate things — "similar past incident" history on Layer 0, and matched remediation steps on Layer 8. Where the buttons actually are: all import actions (URL/API, Jira past tickets, ServiceNow incidents, Confluence runbooks) live inside the Docs / Links / API card's panel — not on the Confluence card. The Confluence card is just where you optionally set separate Confluence credentials. To pull past Jira tickets into history (once Jira above is connected): Configuration → 📚 Knowledge → open Docs / Links / API → click Jira past tickets. To pull Confluence pages as runbooks:
First make sure Jira (above) is connected and saved — Confluence reuses it by default.
Open a Confluence page you want imported, confirm it's published (not a draft).
In Stratos: Knowledge → Docs / Links / API → click Confluence runbooks.
If you get HTTP 401: your Jira token isn't scoped for Confluence. Go to id.atlassian.com → Security → API tokens → Create API token with scopes → under "Select app" choose Confluence → under "Select scopes" pick the read scopes (e.g. read:content:confluence, read:page:confluence) → Create token → copy it.
Go back to the Confluence card itself (not Jira) → fill its own Confluence URL, Account email, API Token (the new scoped one) → this card's fields override Jira's for Confluence calls only, so your working Jira token stays untouched.
Retry Confluence runbooks from the Docs/Links/API card.
To pull anything else (a webpage, a Google Doc, a JSON API): paste its link into the Docs / Links / API card's KB link or API endpoint field → click Import from URL/API above. A Google Doc link auto-converts to plain text; a raw PDF link will fail (copy its text into the paste box below instead). KB entries vs Runbooks: Jira/ServiceNow/pasted-text imports → KB entries (history matching only, Layer 0). Confluence import → Runbooks (actionable steps, Layer 8). Notion: not built — roadmap only, the card does nothing yet.
🔍 Log Analysis — Splunk
Why: Runs a log search for the root-cause component on every incident and reinforces confidence if matching log lines turn up.
In Splunk: go to Settings → Tokens (or ask your Splunk admin to enable HEC/token auth if it's off).
Create a token for a read-only search user, copy it.
In Stratos: Configuration → 🔍 Log Analysis & SIEM → Splunk card → fill the REST URL (note the port — Splunk Cloud uses :8089, e.g. https://yourstack.splunkcloud.com:8089) and the token.
Click Test connection.
🎫 ServiceNow (importing past incidents)
In Stratos: Configuration → 🎫 Ticketing → ServiceNow card → fill Instance URL, Username, Password (a read-only ITSM user is enough).
Click Test connection.
Then go to Knowledge → Docs/Links/API → click ServiceNow incidents to pull resolved incidents into KB history.
✨ AI Providers — Gemini / ChatGPT / Claude / Shared Proxy
This changed: the CORS proxy, Gemini RCA Cloud Function, and the optional OpenAI/Claude comparison keys are no longer set inside this Configuration tab — there used to be input fields here, but they're gone. These four values are now centrally managed in a separate admin panel, careers.html, so every Stratos install on your Firebase project shares one configuration instead of each responder's browser needing its own copy. Why: API keys typed into a per-install Configuration tab meant every new deployment (or every browser, before cloud sync) needed its own copy pasted in by hand, and rotating a key meant updating it everywhere. One central source fixes that.
Open careers.html (your admin panel) and sign in as a platform admin.
Switch the product switcher at the top to 🛰️ Stratos.
Click the 🔌 APIs tab (next to Enterprise Licenses).
Fill in: proxy.php URL (Shared CORS Proxy), Gemini Cloud Function URL + optional shared secret (deploy it first — see gemini-rca-fn/README.md), and optionally OpenAI/Claude API keys + models for the multi-LLM comparison panel.
Click 💾 Save API Configuration.
Every Stratos user picks this up automatically the next time they load or refresh the app — no redeploy, no per-browser setup. If Root Cause Analysis (Layer 8) shows an alert saying a provider "is not configured centrally yet," that's this panel — nothing is broken, it just hasn't been filled in (or saved) yet. One-time backend step: this reads a Firestore document (platform/stratos_ai_config) — a read rule needs to exist for that path in your Firebase project's security rules, or every Stratos browser will silently fail to load it and fall back to whatever was last cached locally. See gemini-rca-fn/README.md for the exact rule.
📞 💬 🖥 On-call, Communication, Infrastructure — not live yet
PagerDuty/Opsgenie, Slack/Teams/WhatsApp, and the Infrastructure providers (AWS/GCP/Azure/VMware/etc.) currently have config cards but no live API wiring — their "Test connection" is a simulated pass/fail, and Slack posting is copy-to-clipboard only. Filling these in doesn't break anything, it just won't actually connect. Ask me if you want any of these made live.
Layer Configuration (Section B)
L0 Executive Summary (auto) · L1 Monitoring Signals (auto) · L2 Business Process Stages — define your customer journey and map each stage to technical services, this is what makes root-cause map back to a business step · L3 Service Dependency Graph — who depends on whom, drives "origin node vs symptom" reasoning · L4 Business Applications inventory · L5 Technical Architecture · L6 Infrastructure (auto) · L7 User + Financial Impact — SLA minutes, revenue/min, user counts · L8 Actions/runbooks · L9 External Dependencies.
Common errors, plain meaning
HTTP 401 = your credentials are wrong, expired, or don't have access/scope to this specific product. HTTP 403 = authenticated fine, but not permitted for this specific action/permission. HTTP 404 on a repo/site check while otherwise authenticated = usually a scope/visibility issue, not a wrong name. "Failed to fetch" / instant network error = CORS block — the tool (Grafana/Atlassian) doesn't allow direct browser calls; you need the CORS proxy field pointed at your deployed proxy.php. "…is not configured centrally yet" = that provider (Gemini/OpenAI/Claude/proxy) hasn't been set in careers.html → 🛰️ Stratos → 🔌 APIs yet — see the AI Providers entry above.
This is for anyone who just needs to look at incidents — no setup, no credentials, nothing to configure.
What you're looking at
Stratos watches your company's tools and, when something breaks, builds a single "One View" incident page instead of you having to check five different dashboards. It tells you: what's broken, why (its best guess, with a confidence %), who's affected, what's being done about it, and what to do next.
Where to go
Tab
What it's for
🎫 Incidents
Your team's open P1/P2 queue. Click any ticket to open its live One View.
📊 One View Dashboard
The full incident page for whichever ticket/alert is currently active.
🔄 Monitoring Aggregator
A reconciled "who's actually broken" view when multiple monitoring tools disagree.
Reading the One View Dashboard, top to bottom
Headline + confidence % — the one-line summary and how sure Stratos is about the root cause. 🎯 Probable root causes — ranked list; the top one is "most probable," with the evidence backing it (alerts, ticket links, and a recent-deploy link if one exists) shown underneath. 🕮 Historical memory — past tickets that looked similar, and how long they took to fix. 🔎 5 Whys / 🐟 Fishbone — auto-generated cause-analysis views, same underlying root cause, different formats. ✅ Recommendation — the highest-confidence fix, plus matched runbook steps. Action buttons (Start runbook, Page on-call, Status page, Slack, Mark resolved) — every click is logged in the Action Log at the bottom.
What you can't do here
The Configuration tab is hidden for viewer accounts — you can't add/change connected tools or credentials. If a connection needs updating, or a new tool needs adding, ask your Stratos admin (see the Admin guide tab above, or your team's Admin panel for who that is).
Incidents — open & in-progress P1 / P2
Your team's live queue from Jira & ServiceNow. Click any ticket to trigger its read-only One View. Anyone on the team can open any ticket.
⚡ Live triggers real Grafana alerts & Jira tickets
Correlate directly from what is firing right now, without picking a queue row.