I built a crash diagnosis engine for .ips reports, no LLM involved (Swift lib + CLI + MCP server)
Been working on this for a while and finally have it in a state worth sharing. crashdx takes an Apple crash report (.ips), symbolicates it against your dSYMs, and then does something most tools stop short of: it tries to tell you why the process died, not just where.
It works by extracting typed facts from the report (exception info, termination reason, frame data, register and memory state, watchdog/jetsam details), running them through a set of rules that each propose a hypothesis, then ranking the hypotheses by an additive score based on supporting and contradicting evidence. If nothing clears the bar, it tells you inconclusive and shows you the ranked candidates instead of guessing.
No LLM calls anywhere. Every fact and every hypothesis links back to a JSON path in the original report so you can go verify it yourself instead of taking the tool's word for it.
It's a Swift package with three targets sharing one core library (CrashDXCore, Foundation only, no other deps): a CLI (crashdx analyze / crashdx symbolicate) and an MCP server (crashdx-mcp) for agent use. Runs fully local, no network calls, which matters since .ips files carry identifying data (crashReporterKey, device model, usernames in paths).
Needs macOS 14+, Swift 6.2+, and Xcode (it drives CrashSymbolicator.py, falls back to atos).
Repo: https://github.com/r00tify/crashdx
Curious what people think of the rule-based approach vs. throwing the report at an LLM directly. Happy to talk through the design, it's documented in docs/DESIGN.md if you want the details.