JYFF Agent 是一套 Agent for InfoSec 的解决方案,提供基于 pi agent 的可拓展、可持续化的 CTF 自动解题调度和基于 codex-security 的代码审计。
Caution
免责声明
JYFF Agent 仅用于经授权的安全研究、教学、内部验证和 CTF 环境。不要在未获得明确授权的系统上使用 JYFF Agent。使用者需自行确保遵守适用法律法规、授权范围、测试规则和第三方服务条款。JYFF Agent 的作者和贡献者不对因使用或滥用本项目造成的未授权访问、服务中断、数据丢失、法律后果或其它损害负责。JYFF Agent 可能执行由模型驱动的工具和 shell 命令;请在采取行动前审查目标、命令、输出和生成的 artifacts。
![]() 比赛概览 |
![]() 配置界面 |
![]() 赛题概览 |
![]() 解题界面 |
![]() 代码审计 |
![]() Clanker Father |
| 层 | 技术 |
|---|---|
| 语言与运行时 | TypeScript、ESM、Node.js >=22.19.0 |
| 工作区与构建 | pnpm 11.20.0、Vite+ 0.2.8、Vite/Rolldown、Oxfmt/Oxlint |
| 后端 | Hono、@hono/node-server、Node sqlite、SSE |
| 前端 | React 19、React Router 7、Tailwind CSS 4、Radix UI、dnd-kit、Iconify |
| Agent | Pi Agent Core、Pi AI、Pi Coding Agent |
| 执行隔离 | Docker Engine、独立 Solver 工具镜像 |
| 平台 | CTFd REST API、GZCTF API、可验证 PlatformPlugin 扩展 |
- Node.js
>=22.19.0 - pnpm
11.20.0 - Docker Engine 或 Docker Desktop,并允许当前用户运行 Docker CLI
首次安装并启动:
vp install
vp run build:sandbox
vp run webui这样你就可以启动 JYFF Agent 的 webui 体验完整功能了,我们也推荐你通过 docker compose 来快速、稳定地部署我们的 Agent
vp run build:sandbox
docker compose up --build -d默认只启动 WebUI,ShellPoop 反弹 Shell 服务是可选功能,不需要准备外部 ../shellpoop 仓库。如果需要启用它:
docker compose --profile shellpoop up --build -dShellPoop 默认从 ../shellpoop 构建,也可以通过 SHELLPOOP_BUILD_CONTEXT 指定服务仓库路径。
全局设置中的“GitHub 源码更新”默认只检查版本。要启用本地源码 staging、构建、systemd 重启和健康检查,需要在独立进程中启动 Update Worker,并把相同的随机 Token 配置给 WebUI:
CTF_AGENT_UPDATE_ROOT=/opt/ctf-agent \
CTF_AGENT_REPOSITORY=JNSEC-OpenSource-Community/jyff-agent \
CTF_AGENT_SERVICE_NAME=ctf-agent.service \
CTF_AGENT_UPDATE_WORKER_TOKEN='<随机长密钥>' \
CTF_AGENT_UPDATE_ALLOW_APPLY=1 \
vp run update-workerWebUI 进程还需要设置 CTF_AGENT_UPDATE_WORKER_URL=http://127.0.0.1:5460 和同名
CTF_AGENT_UPDATE_WORKER_TOKEN。Worker 只接受固定仓库和固定 Git SHA,不接受 shell 或任意 Docker 参数;Compose 部署暂不使用该本地 symlink Worker,详见 GitHub 源码更新插件设计。
ShellPoop 是可选的反弹 Shell 管理服务,仅用于已获授权的 CTF、渗透测试或红队环境。
准备上游仓库并启动服务:
git clone https://github.com/fressive/shellpoop.git ../shellpoop
# 必须填写目标主机能够访问到的 IP 或域名;公网/NAT 场景不要留空。
SHELLPOOP_ADVERTISE_HOST=ctf.example.com \
docker compose --profile shellpoop up --build -d需要 API 密钥时,在项目根目录的 .env(不要提交)中加入 SHELLPOOP_API_KEY=<随机长密钥>,或在启动命令前导出该环境变量。
如果仓库不在 ../shellpoop,通过 SHELLPOOP_BUILD_CONTEXT=/path/to/shellpoop 指定构建目录。Compose 默认提供以下网络:
- WebUI 容器访问 ShellPoop:
http://shellpoop:8000。 - 宿主机访问 REST API:
http://127.0.0.1:8000。 - 反弹 Shell 监听端口:
20000-21000,目标主机和防火墙必须允许回连这些端口。
在 WebUI 的“全局设置 → ShellPoop”中配置并保存:
- 启用:打开插件。
- 服务地址(baseUrl):Compose 部署填写
http://shellpoop:8000;WebUI 和 ShellPoop 都运行在宿主机时填写http://127.0.0.1:8000。容器内不要将127.0.0.1误填为 ShellPoop 地址。 - 请求超时:单位为毫秒,默认
15000,最大600000。 - API 密钥:如果 ShellPoop 设置了
SHELLPOOP_API_KEY,这里必须填写同一个值。密钥只保存到 CTF Agent 的 SecretStore,不会显示在配置快照中。
| 路径 | 作用 |
|---|---|
apps/backend/src/main.ts |
初始化 SecretStore、模型池、ControlPlane、Scheduler、Father 并启动服务 |
apps/backend/src/http/app.ts |
组装鉴权、全局/Project 路由、SSE 和前端静态资源 |
apps/backend/src/http/routes/ |
Project、Scheduler、Challenge、Run、Model、Father 等 API |
apps/frontend/src/main.tsx |
React Router、鉴权初始化和页面懒加载入口 |
packages/core/src/control-plane/ |
Project 注册表、SecretStore 和多 Project 生命周期 |
packages/core/src/project/ |
单 Project、workspace、远程环境和 Solver 装配 |
packages/core/src/orchestration/ |
ContestScheduler、ContestRunner 和退出/重试策略 |
packages/core/src/persistence/run-store.ts |
SQLite schema、Run、队列、黑板、公告和快照 |
packages/agents/src/ |
BaseAgent、Solver、SubAgent、Father 和工具 |
packages/platform/src/ |
PlatformPlugin 契约、CTFd、GZCTF、注册表和验证器 |
packages/sandbox/src/ |
DockerSandbox 和容器内 ExecutionEnv |
packages/web-access/src/ |
搜索、页面读取、GitHub/PDF/视频内容提取 |
packages/shellpoop/src/ |
反弹 shell 管理(ShellPoop REST API 的 Agent 工具) |
packages/prompts/src/ |
Solver、SubAgent、Father、TLDR 和 compaction 提示词 |





