Skip to main content

Agentic incident investigation framework that separates what the evidence suggests from what the data can verify.

Project description

Blindsight

Coverage-aware incident investigation through MCP.

Blindsight helps incident responders answer scope, containment, and impact questions by querying existing telemetry systems in place. It normalizes evidence from multiple domains into a common model, tracks what can and cannot be verified through explicit coverage reports, and produces reproducible case records with analyst-ready reports.

How it works

Blindsight runs bounded investigations across evidence domains (identity, application) through MCP tool interfaces. Each investigation:

  1. Queries domain servers for entities, events, relationships, and coverage
  2. Correlates evidence across domains in a persistent case store
  3. Scores likelihood and confidence separately -- likelihood reflects the evidence pattern, confidence reflects what the available data can verify
  4. Classifies coverage gaps by relevance to the specific hypothesis
  5. Generates a structured incident report from the saved case

The system is read-only against upstream telemetry. It queries systems already in place rather than building a new log platform.

Architecture

Four MCP servers:

Server Role
Identity MCP Evidence domain: account lifecycle, credentials, privilege events
App MCP Evidence domain: user activity, transactions, application events
Investigation MCP Orchestration: runs investigations, generates reports, follow-up queries
Case MCP Persistence: DuckDB-backed case store with correlation queries

Evidence domains are replay-backed, reading from NDJSON fixture files. The same domain contract supports live integrations without changing the investigation pipeline.

Evaluation

Testing uses replay scenarios with known outcomes. Each scenario family includes a baseline and degraded variants (retention gaps, missing fields, missing sources) that verify the system correctly reduces confidence when evidence is incomplete.

Documentation

See docs/index.md for specifications, architecture decisions, and implementation details.

Quick start

pipx install blindsight
blindsight install

blindsight install writes the investigation MCP server into your Claude Code config (~/.claude/settings.json by default; pass --project to use ./.mcp.json instead) and seeds ~/.blindsight/cases/ for case storage. Restart Claude Code to pick up the change.

The bundled replay scenarios are available immediately. Override the scenarios directory with BLINDSIGHT_SCENARIOS_DIR and the case store with BLINDSIGHT_CASES_DIR. LLM-driven investigations need ANTHROPIC_API_KEY in the environment.

CLI usage:

blindsight describe-scenario                              # list bundled scenarios
blindsight describe-scenario credential_change_baseline   # describe one
blindsight run-investigation credential_change_baseline   # run an investigation
blindsight generate-report <case-id>                      # render a Markdown report

Development setup

git clone https://github.com/willstull/blindsight
cd blindsight
poetry install
poetry run pytest -q

The investigation MCP server is wired up in this repo's .mcp.json for local dev — no separate blindsight install step needed when working from the source tree.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blindsight-0.1.0.tar.gz (223.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

blindsight-0.1.0-py3-none-any.whl (162.4 kB view details)

Uploaded Python 3

File details

Details for the file blindsight-0.1.0.tar.gz.

File metadata

  • Download URL: blindsight-0.1.0.tar.gz
  • Upload date:
  • Size: 223.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for blindsight-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1f8712e885c1eb643ab77e7b88c4ab086723d143a266be1786a57834e97b5273
MD5 766acb2744dad84bb71af95ea7f46602
BLAKE2b-256 108c6d1ee40315907db2fe6d62c3f87a4bbe0e98559f3be42c092e67f37058d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for blindsight-0.1.0.tar.gz:

Publisher: publish.yml on willstull/blindsight

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file blindsight-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: blindsight-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 162.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for blindsight-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 388ffac45bee658b0c17c8515ee1529f6e644e59147c25f78424c33fc0481236
MD5 0d8c224708af0a6b09f7a9c91a567235
BLAKE2b-256 50ca5fb212271e975e9d2f63d46838ec5495e062367d7dbeacafdcbb4c010056

See more details on using hashes here.

Provenance

The following attestation bundles were made for blindsight-0.1.0-py3-none-any.whl:

Publisher: publish.yml on willstull/blindsight

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page