Diligence

macOSPythonFastAPIClaudedue diligencedesktop app

Diligence is a native macOS app I built to do the grind of pre-investment scrubbing: cross-checking what a pitch deck claims against what the data room can actually prove.

What it does

Point it at a deck and a data-room folder, and it runs a four-step pipeline:

  1. Extract claims. Claude reads the deck and pulls out ~40–100 atomic, checkable claims — ARR, customer names, dates, growth rates, capabilities.
  2. Fan out. One Claude subagent per top-level data-room folder runs in parallel. Each walks its folder, opens the files it needs, and checks the claims against the evidence.
  3. Find the gaps. Each subagent reports contradictions (deck says X, the data says Y) and gaps (a claim with no supporting document), with claim numbers and verbatim quotes.
  4. Report. Everything is aggregated into a PDF and CSV, ranked by severity (Critical → High → Medium → Low).

It reads PDF, DOCX, PPTX, XLSX, EML, and TXT, so it handles a real data room as-is.

How it’s built

  • BackendFastAPI + uvicorn, streaming progress over Server-Sent Events so you watch each folder get scanned live.
  • Agent loop — a tool-use loop over the Anthropic Messages API; subagents get a read_file / list_dir toolset scoped to their folder.
  • Reports — generated with reportlab (PDF) and a matching CSV.
  • Desktop shell — a Python entry point launches the server in a background thread and opens it in a native macOS WKWebView window via pywebview, with native file/folder pickers. Packaged into a standalone .app with PyInstaller.

Get it & set up

The code is on GitHub — use the Source link above. It ships with my code, not my credentials — you bring your own API key.

1. Build the app.

git clone https://github.com/stephenhefekta/diligence.git
cd diligence
bash build.sh        # produces dist/Diligence.app

Drag Diligence.app to your Applications folder. It isn’t notarised by Apple, so on first launch right-click it → OpenOpen.

2. Add your Anthropic key. Create a file at ~/Developer/diligence/.env with:

ANTHROPIC_API_KEY=your-claude-key   # console.anthropic.com

The key stays on your machine and is sent only to Anthropic’s API. You pay your own usage.

Why I made it

Diligence is pattern-matching at scale — exactly the kind of work that’s tedious for a person and natural for a model. Surfacing the handful of places a deck and its data room disagree, with the receipts attached, turns a day of cross-referencing into a few minutes of review.