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.1.tar.gz (224.8 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.1-py3-none-any.whl (163.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: blindsight-0.1.1.tar.gz
  • Upload date:
  • Size: 224.8 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.1.tar.gz
Algorithm Hash digest
SHA256 bfccd259050c40293bfa6444d03d1a4abc0516472fe7a02a8fdffc6bb01a7a38
MD5 203e17573885553030404d30f23fec55
BLAKE2b-256 073c24ceee14b55ab896caf740ac3159ac3c33f624c3a3dbd6aeb847057ba125

See more details on using hashes here.

Provenance

The following attestation bundles were made for blindsight-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: blindsight-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 163.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b16173e480bb6515182eb166959cf7e4d4ba2a181d25efa89131d0f320c9c6b
MD5 c72dda6118a4f2c95d110458e29d4b8b
BLAKE2b-256 4d70752066b2ecb0478f152a223e09fb5b458f512c8926420fc0dc55c947353c

See more details on using hashes here.

Provenance

The following attestation bundles were made for blindsight-0.1.1-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