skylos
AI时代的代码守门员:pip install skylos 一键扫描死代码、安全漏洞、密钥泄漏及AI
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI时代的代码守门员:pip install skylos 一键扫描死代码、安全漏洞、密钥泄漏及AI
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:团队刚刚完成一次密集的 AI 辅助重构,上百个文件被修改,开发者信心满满地提了 PR。然而代码合并之后,测试开始报错了——原因是一个从未被调用过的辅助函数在重构中被意外删除,而没有人注意到它其实是某个边缘路径的兜底逻辑。这种"看起来没问题"的回归 Bug,在 AI 编程工具广泛普及的今天,正变得越来越常见。
Skylos 正是为解决这个痛点而生。它是一个开源、本地优先的静态代码分析工具,能够在代码合并之前发现死代码、安全漏洞、硬编码密钥、代码质量退化,以及 AI 生成代码中的常见错误——比如虚构的包 API、不可能存在的依赖版本、被意外禁用的安全控制等。
Skylos 由独立开发者 Aaron Oh(GitHub: duriantaco)发起,仓库地址为 duriantaco/skylos。作者在项目中明确标注了联系邮箱 founder@skylos.dev,并提供了完整的 Apache-2.0 开源许可证。与许多依赖大型组织维护的安全工具不同,Skylos 的迭代速度非常快,截至分析时已发布至 v4.25.0 版本,支持 Python、TypeScript/JavaScript、Java、Go、Kotlin、PHP、Rust、Dart、C# 和 Shell 等 10 种编程语言。
这个项目的诞生有明确的时代背景:随着 GitHub Copilot、Cursor 等 AI 编程工具的普及,开发者越来越依赖 AI 生成代码,但 AI 生成的内容存在几类典型陷阱:
Skylos 的设计目标就是成为 AI 编程时代的"代码守门员",在每一行代码进入主干之前完成多维度检查。
Skylos 的功能体系可以划分为以下几个层次:
这是 Skylos 最核心的功能,也是项目名称"Skylos"(源自希腊语 σκύλος,意为"警惕的守护者")的由来。与传统死代码检测工具(如 Vulture)不同,Skylos 对主流 Web 框架有深入的理解:
此外,Skylos 支持智能追踪模式(Smart Tracing),通过运行时 traces 来减少动态代码的误报。对于大型代码库,这是一项非常实用的功能——既保证了检测的准确性,又避免了因动态导入、反射等机制导致的漏报。
Skylos 内置了覆盖 10 种语言的安全规则,覆盖以下高危漏洞类型:
在基准测试中,Skylos 的安全回归套件(56 个案例)实现了 TP=35、FP=0、FN=0 的表现,远超 Bandit(得分 47.14)。OWASP Java 安全基准测试中,Skylos 也取得了 94.37 分(TP=105, FP=0)。
Skylos 能检测 GitHub Actions secrets、API tokens、高熵字符串等敏感信息泄漏。这项功能对 CI/CD 安全尤为重要——很多团队在 GitHub Actions 的 workflow 文件中硬编码了访问令牌,Skylos 可以直接在 PR 层面捕获这类问题。
Skylos 对 GitHub Actions 和 GitLab CI 的配置文件有专项检测能力,覆盖:
pull_request_target)这是 Skylos 区别于传统 linter 的最独特功能,专门检测 AI 编程助手的常见失误:
| 错误类型 | 描述 |
|---|---|
| Phantom security calls | 调用了看似安全但实际不存在或无防护的 API |
| Missing decorators | 遗漏了关键装饰器(如认证、权限) |
| Unfinished stubs | 未完成的条件分支和占位代码 |
| Disabled controls | 被注释或删除的安全控制代码 |
| Invented package APIs | 调用了不存在的包的 API |
| Impossible dependency versions | 引用了不兼容的包版本 |
Skylos 提供了 skylos defend 命令,专门针对 LLM 应用的安全护栏检查,映射到 OWASP LLM Top 10 风险:
通过 skylos cicd init,Skylos 可以自动生成 GitHub Actions workflow,将上述所有检查集成到 PR 门控流程中。当检测到问题超过阈值时,PR 自动失败并给出详细注释,直接在 GitHub PR 页面展示问题位置和严重级别。
Skylos 的代码架构具有清晰的分层设计,主目录包含:
analysis/:核心分析引擎,处理 AST 遍历和规则匹配security/:安全规则库和 taint analysis 实现deadcode/:死代码检测的专用模块,集成框架感知逻辑agents/:AI agent 相关功能,支持 LLM 辅助的代码审查llm/:LLM 集成层,支持可选的 AI 辅助分析defend/:LLM 应用安全护栏检查模块engines/:多语言分析引擎,其中 engines/go/ 使用 Go 语言实现了一个独立的 Go 代码分析工具 skylos-gocli.py:命令行入口点,暴露 skylos 命令pipeline.py:分析管道的编排逻辑,将各个模块串联起来值得注意的是,Dockerfile 中采用了多阶段构建(multi-stage build)策略,第一阶段用 Go 1.22 编译 skylos-go 引擎,第二阶段用 Python 3.12 slim 安装核心工具。这说明项目采用了多语言混合架构:Python 负责核心 CLI 和大多数分析逻辑,Go 负责高性能的 Go 语言专项分析引擎。
项目还包含了完整的 MCP(Model Context Protocol)服务器实现,允许 Claude、Cursor 等 AI 编码助手通过 MCP 协议直接调用 Skylos 的 verify_change 工具,实现"边写边检查"的 AI 编程工作流。
Skylos 的安装极为简单:
# 核心静态分析(无需 API key)
pip install skylos
# 启用 AI agent 功能
pip install "skylos[llm]"
# 安装全部可选依赖
pip install "skylos[all]"
核心分析功能完全本地运行,不需要云端上传或 LLM 调用。只有在启用 skylos agent 和 skylos defend 时,才需要配置 OpenAI API key 或兼容的 LLM 端点。
Docker 用户可以直接拉取镜像:
docker pull ghcr.io/duriantaco/skylos:latest
docker run --rm -v "$PWD":/work -w /work ghcr.io/duriantaco/skylos:latest . --json
GitHub Actions 用户通过一行命令即可配置 PR 门控:
skylos cicd init
# 自动生成 .github/workflows/skylos.yml
Skylos 并非纸上谈兵,它已经帮助多个知名 Python 开源项目完成了死代码清理,并被成功合并:
作者还主动进行了 Star 真实性审计,使用 Astronomer 的 StarGuard 工具对 420 个 Star 进行分析,结论为整体信任度 A 级,低虚假 Star 风险,体现了对项目透明度的追求。
Skylos 作为一款快速迭代的个人项目,仍有一些局限性值得注意:
Skylos 的出现不是一个偶然。它代表了 2024-2025 年间 AI 编程工具大规模普及后,社区对"代码质量谁来负责"这个根本问题的回应。传统 SAST 工具(如 Bandit、Semgrep)诞生于 AI 编程普及之前,它们的规则库面向人类程序员的典型错误,无法覆盖 AI 生成的独特代码味道。
Skylos 的核心洞察是:AI 生成代码的错误模式与人类代码不同,需要专门的检测机制。 无论是 phantom functions、invented dependencies 还是 disabled controls,这些都是 AI 模型在"追求语法正确"时容易引入的微妙陷阱,传统工具很难察觉。
从增长数据看,项目在 Star 达到 458 的体量下已有 24 个 Fork 和 458 个 Watcher,且被 Black、Optuna、mitmproxy 等知名项目实际采用,说明其技术成熟度已达到生产可用级别。随着 AI 编程工具的持续渗透,这类"AI 代码质量守门员"工具的价值将进一步凸显。
如果你正在使用 AI 辅助编程,或者管理一个有多人使用 AI 工具的开发团队,Skylos 值得成为 CI/CD 流水线中的标准环节——它用一次 pip install 的成本,换来的是代码质量的自动化保障。