Integrations

Fits the way your team already works.

Findings go where your team already looks. Alerts go where they already talk. Everything is available over the API.

  • Connected tools: Jira (Two-way), Slack (Out), Splunk (Out), PagerDuty (Out), GitHub Actions (Out), AWS (Read-only), Okta (Read-only).
  • 26 Oct 22:09:14 UTC, sent: retest.passed, PR-0917 verified fixed · PLT-412 closed.
  • 25 Oct 23:40:52 UTC, received from Jira: jira:issue_updated, PLT-412 moved to Done · retest queued.
  • 25 Oct 09:12:10 UTC, received from Jira: jira:issue_updated, PLT-412 moved to In Progress · PT.
  • 24 Oct 22:28:04 UTC, sent: finding.routed, PLT-412 created · #sec-platform.
  • 24 Oct 22:27:40 UTC, sent: finding.verified, PR-0917 · critical · heat 91.
  • Return path: Ticket closed → retest.

01Works with

Ticketing

Findings become tickets with owner, heat and evidence attached. Closing the ticket triggers a retest.

  • finding.verified → ticket
  • ticket closed → retest
  • Jira
  • ServiceNow
  • Linear
  • GitHub Issues
Receivesfinding.verifiedfinding.routedretest.passed
02Routing rules

Findings route themselves.

A rule reads like a sentence: when a finding is verified, if it is hot and belongs to Platform, create the ticket, tell the channel and retest when the ticket closes. You write the rules once. The platform runs them on every finding, and logs every action it takes.

  • Rule 1, Hot findings to Platform (on): when a finding is verified, if Heat ≥ 80 and Owner is Platform, then Create a Jira ticket, Notify #sec-platform in Slack, Retest when the ticket closes.
  • Rule 2, Critical findings page on-call (on): when a finding is verified, if Severity is Critical and Outside working hours, then Page the on-call engineer in PagerDuty, Post to #sec-oncall in Microsoft Teams.
  • Rule 3, Surface changes to the SIEM (on): when the surface changes, if Zone is Harbour Fleet or Partner connections, then Send surface.changed to Splunk, Open a Linear issue for Vendor management.
  • Rule 4, Gate releases on open hot findings (off): when a pipeline runs, if Repository owns an asset with heat ≥ 70 and Finding is open, then Fail the GitHub Actions check, Trigger a retest on merge.
03Use ours. Use yours. Or both.

Remediation lives where your team does.

Every verified finding arrives in Resolve with an owner, a heat-ranked priority and a fix plan Saluki writes for it: what to change, where, and how to confirm it. Run remediation entirely in the platform, connect the tools you already use, or do both. Close the ticket in Jira and Saluki retests. Mark it fixed in Saluki and the ticket closes. The finding keeps one timeline either way.

Ours
Owner, priority, fix plan and retest, all inside Resolve.
Yours
The same finding as a Jira or ServiceNow ticket, a Slack or Teams thread, a PagerDuty page.
Both
Status flows both ways, so nobody updates two systems and nothing closes until the retest passes.
  • PR-0917, Admin panel reachable from the internet: verified fixed. Mean time to fix 3.2 d; this finding 1 d 23 h from verification to fix.
  • Fix plan: Require the administrator role before /admin renders on vpn-02. Stop trusting the upstream role header; take the role from the session. Add the administration console to the SSO group policy for Platform. Retest passed 26 Oct · 22:09.
  • 26 Oct · 22:09, to Jira: Status Done · retest evidence attached (Saluki).
  • 25 Oct · 23:40, from Jira: Moved to Done · Pursuit retest queued (PT).
  • 25 Oct · 09:12, from Jira: Moved to In Progress (PT).
  • 24 Oct · 22:31, to Jira: Comment: evidence attached (AK).
  • 24 Oct · 22:28, to Jira: PLT-412 created · Priority Highest (Saluki).
04The flow

Events go out. Closure comes back.

Every verified finding leaves the platform as an event and lands in the tool that owns the next step. When that tool closes the ticket, the platform hears it, retests the finding and only then calls it fixed, in Saluki and in the ticket.

  • Sent to Jira 26 Oct · 22:09:14 UTC: retest.passed, Comment with retest evidence · resolve PLT-412.
  • Sent to Jira 24 Oct · 22:28:04 UTC: finding.routed, Create PLT-412 · Highest · Platform team.
  • Received from Jira 25 Oct · 23:40:52 UTC: PLT-412 moved to Done.
  • Received from Jira 25 Oct · 09:12:10 UTC: PLT-412 moved to In Progress by PT.
  • Ticket closed → retest: Pursuit retests from a clean session, then verifies.
05API & webhooks

Every event, on the wire.

Six event types cover the loop end to end. Subscribe a webhook, or pull anything in the platform over the API.

  1. finding.verifiedPursuit reproduced a finding and an operator cleared it.
  2. finding.routedA ticket was raised and an owner assigned.
  3. finding.fixedA retest passed and the finding closed.
  4. surface.changedSight found, lost or re-classified an asset.
  5. operation.startedA red team operation, campaign or retest batch began.
  6. retest.passedA retest ran from a clean session and the path no longer works.
Live
POSThttps://hooks.brackwell.example/salukiActive6 of 6 events
Payloadfinding.verified
X-Saluki-Event
finding.verified
X-Saluki-Delivery
evt_01JB8Q2K7MXV4D
X-Saluki-Signature
sha256=
{  "event": "finding.verified",  "heat": 91,  "severity": "critical",  "title": "Admin panel reachable from the internet",  "asset": "vpn-02.brackwell.example",  "owner": "Platform team",  "evidence": "https://app.saluki.example/f/PR-0917"}
DeliveriesLast 3 days
  1. 26 Oct · 22:09:14retest.passed20091 ms
  2. 26 Oct · 22:09:14finding.fixed20088 ms
  3. 24 Oct · 22:28:04finding.routed20079 ms
  4. 24 Oct · 22:27:40finding.verified20084 ms
  5. 24 Oct · 22:00:00operation.started20076 ms

See it run against your estate.

Book a demo and we will map your surface live, then show you the first path that matters. Or start with a domain.