作者:Kevin Backhouse
排版:Alan Wang
宣布 GitHub Security Lab Taskflow Agent——一个面向安全研究的开源协作框架,结合 AI 使用。
自 2019 年成立以来,GitHub Security Lab 的主要目标一直只有一个:社区驱动的安全。我们相信,提升软件安全性的最佳方式是分享知识和工具,并使用开源软件,使每个人都能审计代码并报告发现的漏洞。
六年过去了,现在出现了一个将社区驱动安全提升到新高度的新机会。借助 AI,我们现在可以使用自然语言来编码、共享和扩展我们的安全知识,这将使构建和分享新安全工具变得更加容易。而在底层,我们可以使用 Model Context Protocol (MCP)接口,在现有安全工具(如 CodeQL)之上进行扩展。
作为一个社区,如果我们分享发现漏洞的方法,就能更快地消除软件漏洞。基于这一目标,我们团队一直在尝试一个名为 GitHub Security Lab Taskflow Agent的智能体框架。我们已在内部使用一段时间,并最近向 GitHub Secure Open Source Fund的参与者分享了它。虽然它仍处于实验阶段,但已经可以供其他人使用。
2019 年成立
https://github.blog/changelog/2019-11-14-security-lab/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Model Context Protocol (MCP)
https://modelcontextprotocol.io/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
CodeQL
https://codeql.github.com/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
GitHub Security Lab Taskflow Agent
https://github.com/GitHubSecurityLab/seclab-taskflow-agent?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
GitHub Secure Open Source Fund
https://github.com/open-source/github-secure-open-source-fund?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Demo:变体分析
使用 seclab-taskflow-agent入门只需几个步骤:
创建个人访问令牌。
添加 Codespace 秘钥。
启动 Codespace。
用一行命令运行 taskflow。
请跟随演示并尝试操作!
注意:运行演示会消耗一些令牌配额,如果你使用的是免费 GitHub 账户,可能会遇到速率限制。不过我已设计 Demo 使其在免费账户下也能运行。如果触发速率限制,配额将在一天后刷新。
创建细粒度个人访问令牌
进入你的开发者设置页面,创建个人访问令牌(PAT)。
向下滚动,添加 “models” 权限:
开发者设置页面
https://github.com/settings/personal-access-tokens/new?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
添加 Codespaces 秘钥
出于安全考虑,不建议将刚创建的 PAT 保存到磁盘文件中。建议将其作为 Codespace Secret保存,这样在启动 Codespace 时,它会作为环境变量提供。
在 Codespaces 设置中创建一个名为 GH_TOKEN的 Secret。
在 “Repository access” 下添加 GitHubSecurityLab/seclab-taskflows 仓库,这是我们将启动 Codespace 的仓库。
返回 Codespaces 设置,创建第二个 SecretAI_API_TOKEN,可使用同一个 PAT。
我们使用两个 Secret 的目的是:GH_TOKEN用于访问 GitHub API,例如读取代码等操作,而 AI_API_TOKEN用于访问 AI API。这个演示只需要一个 PAT,因为它使用的是 GitHub Models API,但该框架也支持使用其他(非 GitHub)的 API 来处理 AI 请求。
Codespaces 设置
https://github.com/settings/codespaces/secrets/new?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
GitHubSecurityLab/seclab-taskflows
https://github.com/GitHubSecurityLab/seclab-taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Codespaces 设置
https://github.com/settings/codespaces/secrets/new?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
启动 Codespace
进入 seclab-taskflows 仓库并启动 Codespace:
在 Codespace 启动后,等待几分钟,直到你看到类似这样的提示:
看到提示前带有 (.venv) 非常重要,因为这表示 Python 虚拟环境已经创建完成。
seclab-taskflows 仓库
https://github.com/GitHubSecurityLab/seclab-taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Python 虚拟环境
https://docs.python.org/3/library/venv.html?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
用一行命令运行 Taskflow
在 Codespace 终端中输入以下命令运行变体分析演示 taskflow:
安全公告
https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/about-repository-security-advisories?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
cmark-gfm
https://github.com/github/cmark-gfm?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
GHSA-c944-cv5f-hpvr
https://github.com/github/cmark-gfm/security/advisories/GHSA-c944-cv5f-hpvr?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
其他运行方式
我建议使用 Codespace,因为它是一个快速且可靠的入门方式。同时,它也是一个沙箱环境,对安全性有利。但如果你愿意,也有其他方式可以运行这个框架。
在 Linux 终端中运行
以下是在 Linux 系统上本地安装并运行该演示的命令:
这些命令会从 PyPI下载我们的最新发布版本。请注意,框架中包含的一些工具箱可能无法通过这种方式开箱即用,因为它们依赖于其他软件的安装。例如,CodeQL 工具箱依赖于已安装的 CodeQL。你可以从我们用于构建 Codespaces 环境的 devcontainer 配置中复制安装说明。
PyPI
https://pypi.org/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
CodeQL 工具箱
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/src/seclab_taskflow_agent/toolboxes/codeql.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
CodeQL
https://codeql.github.com/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
devcontainer 配置
https://github.com/GitHubSecurityLab/seclab-taskflows/tree/v0.0.3/.devcontainer?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
在 Docker 中运行
我们发布了一个预装了 CodeQL 等工具的 Docker 镜像。你可以使用这个脚本来运行它。请注意,该 Docker 镜像仅包含 seclab-taskflow-agent。我们计划在未来发布第二个“全套工具”镜像,其中也会包含 seclab-taskflows。注意:我将在“协作模型”部分解释 seclab-taskflow-agent与 seclab-taskflows之间的关系。
Docker 镜像
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/pkgs/container/seclab-taskflow-agent?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
这个脚本
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/docker/run.sh?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflow-agent
https://github.com/GitHubSecurityLab/seclab-taskflow-agent?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflows
https://github.com/GitHubSecurityLab/seclab-taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Taskflows
Taskflow 是一个 YAML 文件,包含一系列供框架执行的任务。让我们来看一下我演示用的 taskflow(来源):
globals:repo:ghsa:
taskflow:- task:must_complete: trueagents:- seclab_taskflow_agent.personalities.assistanttoolboxes:- seclab_taskflow_agent.toolboxes.memcacheuser_prompt: |Clear the memory cache.
- task:must_complete: trueagents:- seclab_taskflow_agent.personalities.assistanttoolboxes:- seclab_taskflows.toolboxes.ghsa- seclab_taskflows.toolboxes.gh_file_viewer- seclab_taskflow_agent.toolboxes.memcacheuser_prompt: |Fetch the details of the GHSA {{ GLOBALS_ghsa }} of the repo {{ GLOBALS_repo }}....
你可以看到,它的结构与 GitHub Actions 工作流非常相似。顶部是头部(header),下面是主体(body),其中包含一系列任务。任务由智能体框架逐一完成。让我们逐个部分进行讲解,重点关注最关键的内容:
来源
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/taskflows/audit/ghsa_variant_analysis_demo.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Header
Header 的第一部分定义了文件类型。最常用的文件类型包括:
taskflow:描述框架要执行的一系列任务。
personality:在执行任务时,通常需要指定某种特定角色。例如,我们有一个 action_expert角色,用于审核 Actions 工作流。
toolbox:包含运行 MCP 服务器的指令。例如,本演示使用 gh_file_viewer工具箱从 GitHub 下载源代码文件。
globals部分定义了名为 repo和 ghsa的全局变量,这些变量通过命令行参数 -g repo=github/cmark-gfm和 -g ghsa=GHSA-c944-cv5f-hpvr初始化。这是一种粗略的任务流参数化方式。
action_expert
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/personalities/action_expert.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
gh_file_viewer
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/toolboxes/gh_file_viewer.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Task 1
任务总是指定一个要使用的 “personality”。对于非专业化任务,我们通常只使用 assistant角色。
每个任务从一个全新的上下文开始,因此从一个任务传递结果到下一个任务的唯一方式是通过工具箱作为中介。在本演示中,我使用了 memcache工具箱,它是一个简单的键值存储。我们发现这种方法更适合调试,因为它允许在测试时以一致的输入重新运行单个任务。
此任务还演示了工具箱可以在执行潜在破坏性操作前请求确认,这是防止提示注入攻击的重要保护措施。
assistant
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/src/seclab_taskflow_agent/personalities/assistant.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
memcache
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/src/seclab_taskflow_agent/toolboxes/memcache.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
请求确认
提示注入
https://genai.owasp.org/llmrisk/llm01-prompt-injection/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Task 2
该任务使用 ghsa工具箱从仓库下载安全公告,并使用 gh_file_viewer工具箱查找公告中提到的源文件。它创建摘要,并使用 memcache工具箱将结果传递给下一个任务。
ghsa
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/toolboxes/ghsa.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
gh_file_viewer
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/toolboxes/gh_file_viewer.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
memcache
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/src/seclab_taskflow_agent/toolboxes/memcache.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Task 3
该任务使用 memcache工具箱获取上一个任务的结果,并使用 gh_file_viewer工具箱下载源代码并进行审核。
通常,提示词的措辞比看起来更微妙,这个第三个任务就是一个例子。之前版本的任务尝试一次分析整个源文件,消耗了过多的 token。因此第二段要求分析“文件的一小部分”,对于任务的成功执行非常重要。
memcache
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/src/seclab_taskflow_agent/toolboxes/memcache.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
gh_file_viewer
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/src/seclab_taskflows/toolboxes/gh_file_viewer.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
Taskflows 总结
希望这个演示能让你对任务流有一个初步了解。你可以在 README.md和 GRAMMAR.md中找到更详细的文档。你还可以在 seclab-taskflow-agent和 seclab-taskflows的子目录中找到更多示例。
README.md
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/README.md?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
GRAMMAR.md
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/blob/v0.0.9/doc/GRAMMAR.md?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflow-agent
https://github.com/GitHubSecurityLab/seclab-taskflow-agent/tree/v0.0.9/examples/taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflows
https://github.com/GitHubSecurityLab/seclab-taskflows/tree/v0.0.3/src/seclab_taskflows/taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
协作模型
我们希望社区成员能够发布自己的任务流套件。为了方便协作,我们构建在 Python 的打包生态之上。我们自己的两个仓库已发布为 PyPI包:
seclab-taskflow-agent:任务流框架的实现。
seclab-taskflows:我们团队编写的一套任务流。
我们之所以有两个仓库,是希望将“引擎”与使用它的任务流套件分离。同时,seclab-taskflows旨在作为一个易于复制的模板,供任何希望发布自己任务流套件的人使用。开始创建你的包时,我们建议使用 hatch new命令来创建初始项目结构。它会生成 pyproject.toml等文件,你在上传到 PyPI 时需要用到。接下来,我们建议创建一个类似的目录结构,为任务流、工具箱等创建子目录。你也可以复制 seclab-taskflows的其他部分,比如 publish-to-pypi.yaml工作流,它会在你推送类似 “v1.0.0” 的标签时自动上传你的包到 PyPI。
协作模型的一个重要特点是共享 MCP 服务器也很方便。例如,查看 seclab-taskflows 包中包含的 MCP 服务器。每个 MCP 服务器都有一个对应的工具箱 YAML 文件(在 toolboxes 目录中),其中包含运行该服务器的指令。
PyPI
https://pypi.org/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflow-agent
https://pypi.org/project/seclab-taskflow-agent/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
seclab-taskflows
https://pypi.org/project/seclab-taskflows/?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
hatch new
类似的目录结构
https://github.com/GitHubSecurityLab/seclab-taskflows/tree/v0.0.3/src/seclab_taskflows?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
publish-to-pypi.yaml
https://github.com/GitHubSecurityLab/seclab-taskflows/blob/v0.0.3/.github/workflows/publish-to-pypi.yaml?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
导入系统
任务流经常需要引用其他文件,比如 personalities 或工具箱。为了让协作模型良好运作,我们希望你能够重用来自其他包的 personalities 和工具箱。我们利用 Python 的 importlib来方便引用其他包的文件。举例来说,seclab-taskflows使用 seclab-taskflow-agent的工具箱:
实现方法是将名称 seclab_taskflow_agent.toolboxes.memcache拆分为目录(seclab_taskflow_agent.toolboxes)和文件名(memcache)。然后使用 Python 的 importlib.resources.files定位目录,并加载该目录下名为 memcache.yaml的文件。这个系统唯一的特别之处是名称必须至少有两部分,这意味着你的文件必须至少存放在一个子目录中。但除此之外,我们直接使用 Python 的导入系统,这也意味着网上有大量文档和建议可供参考。
importlib
https://docs.python.org/3/library/importlib.html?utm_campaign=cli-sdk-jan-2026&utm_source=blog-announcement-cli-sdk/?wt.mc_id=3reg_webpage_reactor
举例
实现方法
importlib.resources.files
项目愿景
我们有两个主要目标。首先是鼓励社区驱动的安全。当前涌现的许多智能化安全工具是闭源的黑盒子,这与我们团队的理念完全相反。我们希望人们能够“掀开引擎盖”查看任务流的工作原理,也希望人们能够轻松创建和分享自己的任务流。作为社区,如果共享发现漏洞的方法,我们就能更快地消除软件漏洞。我们希望任务流能够成为实现这一目标的有效工具。
第二是创建一个我们自己想使用的工具。作为研究团队,我们希望工具适合快速实验。我们需要能够快速创建新的安全规则并进行测试。基于此,我们并不追求打造世界上最精美或最高效的工具,而是希望它易于修改。