Hi HN, im the author of Skylos. We built it because traditional static analyzers (like Vulture) fall apart on modern, dynamic Python frameworks like FastAPI and Pydantic. Don't get me wrong, vulture is really really good. However, in some frameworks, they either miss a ton of dead code or throw you a lot of false positives.
So.. built a hybrid AST + LLM analyzer. We just benchmarked it against 9 popular open-source libraries to see how the data actually compares in the real world.
This is our github: github.com/duriantaco/skylos and https://github.com/duriantaco/skylos-demo this is to our benchmark. the blog post above is essentially the summary
Happy to answer any questions or hear your critiques on the methodology!
First off, thanks a lot for taking the time to run Skylos against its own repo! Getting those flagged at confidence=60 is why deeper framework awareness is an immediate priority for us.
The 2 pass approach with Swynx is cool! Doing a BFS for file-level reachability first to sidestep the AST dynamic dispatch nightmare makes sense. If the module isnt even in the import graph then the confidence is practically 100%. And great callout on `__getattr__` and `importlib`.. Those dynamic edge cases are really sleeper problems for Python static analysis.
Thanks for the check on the pytest hooks and for sharing the Swynx architecture! It’s great to see how you guys tackled the dynamic nature of Python.
I'll ask them to sketch out a systems architecture in real time for me. Like put the camera on the paper and tell me how the data should flow, what tools are being used etc