VJakoby/pragma-workbench
GitHub: VJakoby/pragma-workbench
PRAGMA 是一款专为渗透测试项目和 CTF 竞赛设计的本地操作工作台,将结构化笔记、知识库搜索与证据捕获整合在同一视图中,解决渗透测试过程中笔记散落、上下文频繁切换的问题。
Stars: 1 | Forks: 0
**PRAGMA** 是一款专为渗透测试项目和 CTF 构建的操作工作台应用——集成本地与在线 KB(知识库)并支持项目进行时的实时笔记记录,完全在本地运行。
其核心是:一个围绕会话和目标组织的、专注的 Markdown 编辑器,带有右侧上下文面板,可在不影响你工作流的情况下呈现你的 KB、战术和搜索结果。证据和战利品的捕获是首要功能,而非后续的强行附加。
## ⚠️ 注意事项
PRAGMA 是一款用于安全测试的文档和工作流工具。
它不直接与目标交互,但仅限于在经过授权的环境中使用,例如专业项目、实验室环境和 CTF 平台。
你有责任确保你的工作符合适用的法律法规和交战规则。
## 🚩 解决的问题
渗透测试工作需要专注,但现有工具并不支持这一点。笔记散落在一处,发现位于另一处,方法参考则在完全不同的地方。通用编辑器没有“项目”的概念。报告平台是为输出而构建的,而非为过程。
PRAGMA 将所有内容保持在同一视图中——结构化足以发挥作用,本地化足以赢得信任。
## ❌ 它不是什么
- **不是报告工具** —— 笔记仅用于操作目的,只是草稿而非最终交付物
- **不是团队平台** —— 单操作员,设计上本地优先
- **不是漏洞利用框架** —— 它不会对你的目标发起攻击
- **不依赖云端** —— 所有内容都在你的机器上本地运行,不会发生任何数据外传
## ✅ 它是什么
- **本地 Web 应用** —— PRAGMA 完全在你的机器上运行,结合了结构化笔记与可搜索的知识库
- **工作流工作台** —— 旨在支持渗透测试的自然流程,从初始访问到后渗透及发现,全程保持专注不中断
- **知识集成界面** —— 内置本地 KB 搜索,可选集成 ENGRAM,以便在应用内搜索索引的外部源
## 截图
以下是一些可快速展示该平台外观的截图。它们有助于展示工作流的形态,但真正的价值在于直接使用它,并体验在实际工作中各个视图是如何协同运作的。
|
|
|
| Main View — central workbench for active engagement notes and context |
Sessions — organize multiple engagements within a single workbench |
Encryption — client-side encrypted storage for workbench data |
|
|
|
|
Command Palette — quick-open search across notes, KB, tactics, and commands
|
KB Cards — browse services, tactics, and KB sections in a card layout
|
Indexed Search — ENGRAM-powered results inside the workbench
|
## 👤 适用人群
PRAGMA 之所以存在,是因为这正是我自己想要的工作流。
它无意解决其他所有人的笔记、报告或项目管理问题。它是坚定的、本地优先的,并且是围绕我在评估期间偏好的工作方式构建的。如果这符合你的操作方式,请使用它。如果不符,则不用。
这是有意为之。目标不是成为通用工具。目标是提供结构更好的工作流。
## 🗂️ 工作区模型
PRAGMA 在结构上分为三个层级:
- **工作台** —— 你机器上的本地工作区。一个工作台可以包含多个会话。
- **会话** —— 一个项目、工程、机器集或工作上下文。一个会话可以包含一个或多个目标。
- **目标** —— 会话内具体的 IP、域名或标记的主机条目。
这意味着 PRAGMA 不会强制规定单一工作流:
- 一个工作台可以容纳多个并行的项目
- 一个会话可以代表一台单独的机器
- 一个会话也可以代表包含多个目标的更广泛的项目
标题和笔记内容保持灵活,同时通过会话分配和目标分配提供明确的结构。
## 🎯 焦点模型
PRAGMA 围绕一个简单的交互规则构建:
- **项目笔记是主要的工作区**
- **知识库、战术、搜索和快速日志是辅助工具**
- 辅助视图应帮助你检索上下文,而不是不必要地将你从笔记记录流中拉出
在实践中,这意味着应用程序对保持操作性有着坚定的立场:
- 笔记是当前项目上下文存在的地方
- 服务、战术和索引的 KB 内容是为了支持当前的笔记/工作,而不是取代它
- 在可能的情况下,辅助内容应在当前笔记旁边打开,而不是强制进行完全的上下文切换
有关在项目期间如何使用该应用程序的实际操作演示,请参阅 [USAGE.md](./USAGE.md)。
## 🧱 技术栈
| 区域 | 技术 | 备注 |
|---|---|---|
| 运行环境 | Node.js | 应用服务器和本地运行时 |
| 后端 | Express | API 路由、静态资源及 EJS 视图服务 |
| 模板 | EJS | 服务器端渲染的应用外壳和局部视图 |
| 前端 | Vanilla JavaScript | 位于 `public/app/` 下的模块化浏览器脚本 |
| 编辑器 | CodeMirror 6 | 用于笔记和 KB 内容的 Markdown 编辑 |
| Markdown 渲染 | `marked` | KB 及服务器端 Markdown 渲染 |
| 搜索 | Fuse.js | 本地模糊搜索和 KB 相关性评分 |
| 加密 | Web Crypto API | 客户端 AES-256-GCM + PBKDF2-SHA-512 |
| 存储 | 基于文件的 JSON + Markdown | 磁盘上的会话/工作台状态,KB 为 `.md` 文件 |
| 容器化 | Docker / Docker Compose | 可选的本地容器运行时 |
## 🏷️ 功能
**会话和目标**
- 带有多目标跟踪(IP、域名、标签)的命名会话
- 会话级别的攻击者 IP 字段,用于回调/反向 shell 样式的占位符
- 活动目标在复制时自动注入到 KB 和战术中的所有代码块
- 会话状态跟踪(Active / Paused / Complete),带有时间线视图
- 将会话导出/导入为 JSON 以实现可移植性;会话导出还支持结构化的 Markdown 捆绑包和统一的 Markdown 导出
**加密**
- 完整的工作台加密(AES-256-GCM,PBKDF2-SHA-512,600k 次迭代)——仅在客户端进行
- 服务器存储密文;密码永远不会触及磁盘、localStorage 或网络
- 工作台文件是可移植的——迁移到另一台机器只需复制文件
**笔记**
- 带有结构化 Markdown 模板的类型化笔记——见下方的 [Note Templates](#-note-templates)
- 笔记模板支持按模板区分的变体,因此一个模板类型可以暴露多个预定义的工作流或笔记布局
**快速日志 (`Ctrl+L`)**
可从顶部栏访问的持久性会话内捕获工具:
- **端口** —— 手动记录开放端口和服务,或通过粘贴来自 `nmap`、`rustscan` 或 `masscan` 的原始输出来记录。自动解析为结构化行(端口、协议、服务、版本、备注)
- **路径** —— 记录来自目录和虚拟主机枚举的 Web 路径。接受来自 `gobuster`、`ffuf` 和 `dirbuster` 的原始输出,或带有可选 HTTP 状态代码的手动输入
- **战利品** —— 记录在项目期间发现的凭证、哈希、token 和密钥。每个条目都有一个类型标签(Cleartext / Hash / Token / Key / Other)、一个主机字段(从活动目标自动填充)和一个上下文备注。凭证支持点击复制
端口、路径和战利品与会话一起持久保存。端口和凭证还可以同步到结构化笔记中,如 `Network Enumeration` 和 `Credentials`,从而减少重复捕获。
**待办**
一个会话级别的复选框列表,用于记录下一步操作,与会话一同保存,以便未完成的任务在重新加载和稍后重新打开时仍然存在。
**证据**
PRAGMA 还包含一个专用的证据工作流,用于直接从会话笔记中保留证明,而不是将其重新输入到第二个表格中。
- **选择驱动的捕获** —— 在笔记编辑器中选择命令、行或 Markdown 块,然后使用 **Add as Evidence**
- **类型化证据条目** —— 支持的类别包括 Enumeration、Initial Access、Execution、Persistence、Privilege Escalation、Credential Access、Discovery、Lateral Movement、Pivoting、Collection、Exfiltration、Cleanup 和 Proof
- **源链接跟踪** —— 每个证据条目都保持链接到原始笔记,并支持跳转回确切的标记源块
- **可选的战利品创建** —— 在添加证据时,你还可以从相同的选区创建一个战利品条目,并选择性地将明文/哈希材料同步到 `Credentials` 笔记中
- **证据管理** —— 证据面板支持按类型和目标进行过滤、内联编辑和取消标记,同时保留原始笔记内容
- **整洁的 Markdown 导出** —— 证据标记在笔记内部使用,但会从导出的 Markdown/会话导出中剥离,从而使生成的文件保持可读性
这使得证据成为从笔记中保留证明的主要工作流,而战利品仍然是凭证、token、密钥及类似材料的专用结构化存储库。
**知识库和战术**
- 索引来自 `knowledge_base/` 的本地 `.md` 文件,具有三个不同的呈现面:`knowledge_base/services/` 提供给 Services 视图,`knowledge_base/tactics/` 提供给 Tactics 视图,其他顶级文件夹成为独立的 KB 分区
- 代码库随附的真实 KB 语料库。每位用户需将 PRAGMA 指向自己的本地知识库内容
- 可在 UI 中编辑,并带有实时磁盘回写和更改时自动重新索引
- 每个代码块和内联反引号跨度都支持点击复制,并注入目标 IP
- 全文搜索具有加权相关性评分、模糊匹配和按结果划分的匹配类型(exact / fuzzy / partial)
- 本地/远程范围过滤器、源过滤器和结果中的查询词片段高亮显示
- 如果 ENGRAM 处于离线状态,会优雅降级,并提供一键可达性检查
- 本地 KB 预览支持在同一类别/文件夹下的相邻笔记之间快速切换
**工作台可靠性**
- 原子写入——每次保存首先写入临时文件,然后重命名到原位,防止因崩溃或断电导致的数据损坏
- 滚动备份——自动保留工作台的最后 5 个版本于 `sessions/backup/` 中
- 自动回退恢复——如果实时工作台文件损坏或丢失,PRAGMA 会静默加载最近的有效备份
- 启动完整性检查——在每次启动时,PRAGMA 会记录工作台状态、备份计数以及检测到的任何问题
**界面**
- 命令面板 (`⌘K`),所有主要操作的键盘快捷键,深色/浅色模式
- 快速日志 (`Ctrl+L`) —— 见上文
## 📝 笔记模板
PRAGMA 支持内置的笔记模板。每个模板打开时都带有预先构建的 Markdown 正文、相关的默认标签和标题前缀,以保持跨项目笔记的一致性。
一些自动化依赖于特定模板的存在。例如,快速日志端口/路径同步会创建并更新一个 `network-enumeration` 笔记,而 战利品 → 凭证 同步需要一个 `credentials` 笔记。如果你从 `note-templates.json` 中删除这些模板,自动创建的文档将不再出现。模板可以非常简单;它们只需要匹配的表格标题,以便同步可以找到它们。
模板还可以定义**变体**。单一模板类型可以在新建笔记流程中暴露多个可选择的版本,每个版本都有自己的标题前缀、默认标签和 Markdown 正文。当一个笔记类别需要多种操作模式时,这非常有用,例如:
- 带有独立 `Exam Target`、`Practice` 和 `AD Workflow` 变体的 OSCP 模板
- 带有用于常规凭证与 AD 凭证不同布局的凭证模板
- 带有针对 Web、网络或云侦察不同结构的侦察模板
| 模板 | 图标 | 默认标签 | 用途 |
|---|---|---|---|
| **General** | 📋 | — | 带有 Overview / Notes / References 部分的自由格式笔记 |
| **Credentials** | 🔑 | `creds` | 凭证表、密码喷洒笔记、有效会话 |
| **Recon** | 🔭 | `recon` | 目标概览、开放端口、Web 端点、DNS、用户 |
| **Network Enumeration** | 🌐 | `network` | 按目标划分的目标概览及同步的开放端口和服务 |
| **PrivEsc** | ⬆ | `privesc` | 系统信息、枚举清单、尝试的向量、提权路径 |
| **Loot** | 💰 | `loot` | 窃取的文件、发现的凭证、Flag/证明 |
| **Exploit** | 💥 | `exploit` | CVE/CVSS 元数据、payload、步骤、结果、清理 |
### 自定义模板 (`note-templates.json`)
你可以通过编辑 `server.js` 旁边的 `note-templates.json` 来扩展或完全替换内置模板。PRAGMA 在应用的 `Configuration -> Note Templates` 下直接暴露了这一点,并在启动时加载同一文件作为模板源。
**Schema:**
```
{
"templates": [
{
"id": "tunneling",
"label": "Tunneling",
"icon": "🕳️",
"title_prefix": "Tunnel",
"default_tags": ["tunneling", "pivot"],
"body_lines": [
"## Setup",
"",
"## Listeners",
"",
"## Routes",
""
],
"variants": [
{
"id": "ligolo",
"label": "Ligolo",
"title_prefix": "Tunnel",
"default_tags": ["tunneling", "pivot", "ligolo"],
"body_lines": [
"## Listener",
"",
"## Agent",
""
]
}
]
}
]
}
```
| 字段 | 必填 | 描述 |
|---|---|---|
| `id` | ✅ | 唯一标识符,小写,无空格 |
| `label` ✅ | 在模板选择器中显示的名称 |
| `icon` | — | 在笔记类型徽章上显示的 Emoji |
| `title_prefix` | — | 创建时附加在笔记标题前 |
| `default_tags` | — | 自动应用于笔记的标签数组 |
| `body` | — | 作为单个 JSON 字符串的笔记正文初始 Markdown 内容 |
| `body_lines` | — | 作为字符串数组的多行模板正文;加载时以 `\n` 连接 |
| `variants` | — | 可选模板变体数组。每个变体可以定义自己的 `id`、`label`、`icon`、`title_prefix`、`default_tags`、`body` 或 `body_lines` |
使用 `body` 或 `body_lines`。对于较长的 Markdown 模板,`body_lines` 更易于阅读和维护。
如果存在 `variants`,PRAGMA 会在笔记创建流程中显示第二个选择步骤。选定的变体将成为笔记的起始布局,并可以覆盖父模板的默认值。
自定义模板在选取器中带有紫色边框和 **Custom** 标题,以区别于内置模板。如果文件缺失、格式错误或为空,PRAGMA 会静默回退到内置模板。
### 笔记中的图像
笔记还支持粘贴和拖放截图/图像。
- 使用 `Ctrl+V` 将复制的截图直接粘贴到编辑器中
- 将本地图像文件拖动到编辑器中
- PRAGMA 将图像存储为笔记附件,并自动插入标准 Markdown 图像语法:
```

```
这使得图像处理与正常的 Markdown 预览/渲染保持兼容,同时仍使用 PRAGMA 的笔记范围附件存储。
## 🔐 安全性
PRAGMA 是一款单操作员、localhost 优先的工具。它专为在受控机器上使用而设计,理想情况下是一台专用的渗透测试虚拟机。
高级安全立场:
- 默认绑定到 `127.0.0.1`
- 支持使用客户端 AES-256-GCM 的加密工作台存储
- 将导入的/会话的/Markdown 内容视为不受信任的输入
- 不适用于敌对的面向互联网的多用户部署
有关实际的威胁模型、缓解措施、已验证的检查及剩余的审查区域,请参阅 [SECURITY.md](./SECURITY.md)。
## 🎯 目标注入参考
当会话设置了活动目标时,PRAGMA 会自动将 KB 文档和战术中的占位符变量替换为目标 IP 和域——在渲染时以黄色高亮显示,并在复制时代码块中注入。
使用下面任何支持的占位符样式编写你的 KB 文档。
### IP / 主机 → 活动目标 IP
| 样式 | 支持的占位符 |
|---|---|
| 尖括号 | `` `` `` `` `` `` `` `` `` `` |
| Shell 变量 | `$IP` `$RHOST` `$TARGET` `$TARGET_IP` `$HOST` |
| 花括号 | `{IP}` `{ip}` `{RHOST}` `{rhost}` `{TARGET}` `{HOST}` `{host}` |
| 双花括号 | `{{ip}}` `{{IP}}` `{{target}}` `{{rhost}}` `{{host}}` `{{HOST}}` |
| 裸词 | `TARGET_IP` `TARGET_IP_ADDRESS` `RHOST` `TARGET` `MACHINE_IP` |
| HTB 风格字面量 | `10.10.10.X` `10.10.X.X` |
| 仅限反引号范围 | \`IP\` \`HOST\` —— **仅在内联代码中**注入,不在纯文本中 |
### 域名 / FQDN → 活动目标域名
| 样式 | 支持的占位符 |
|---|---|
| 尖括号 | `` `` `` `` `` `` `` `` |
| Shell 变量 | `$DOMAIN` `$FQDN` `$DC` |
| 花括号 | `{DOMAIN}` `{domain}` `{FQDN}` |
| 双花括号 | `{{domain}}` |
| 裸词 | `TARGET_DOMAIN` `DOMAIN` `WORKGROUP` |
## 可选模块
PRAGMA 可独立运行。可选模块扩展了工作台,但核心的笔记/会话工作流并不需要它们。
### ENGRAM // 索引搜索
ENGRAM 是一个可选的伴随服务,用于支持 PRAGMA 的 KB 搜索。启用时,PRAGMA 查询 ENGRAM 以获取索引结果;禁用时,该模块保持离线状态,搜索仅回退到本地内容。
- 仓库:[ENGRAM // Indexed Search](https://github.com/VJakoby/engram)
- 用途:索引并提供 KB 内容,以便在 PRAGMA 内进行快速、排名的搜索结果展示
- 集成模型:ENGRAM 作为其自己的本地服务运行,PRAGMA 通过 `SEARCH_URL` 指向它
将 ENGRAM 作为独立容器启动:
```
cd ~/engram
docker compose build --no-cache
docker compose up -d
```
验证其是否可达:
```
curl http://127.0.0.1:3002/healthz
```
在 PRAGMA 中启用它:
```
SEARCH_URL=http://127.0.0.1:3002
```
然后重启 PRAGMA。如果 ENGRAM 处于在线状态,`KB Search` 将显示索引结果。
### PRAGMA // 工具箱
PRAGMA // Toolbox 是一个可选的伴随服务,可协助执行选定的被动侦察和主动枚举工作流。启用时,它作为 `Toolbox` 模块暴露在 PRAGMA 内部。
- 仓库:[PRAGMA // Toolbox](https://github.com/VJakoby/matrix-toolbox)
- 用途:提供 API 支持的辅助工作流,如被动侦察、Nmap 枚举和 Masscan 枚举,而无需将 PRAGMA 本身转变为扫描平台
- 集成模型:PRAGMA // Toolbox 作为其自己的本地服务运行,PRAGMA 通过可选的 Toolbox 代理路由与其通信
详细的 PRAGMA // Toolbox 设置如下方快速启动部分所示。
## 🛠️ 需求
- Node.js 20+
- **可选:**
- Docker 和 `docker compose`
有关完整的项目目录结构、卷挂载以及如何通过共享的 Docker 网络使用外部 ENGRAM 实例运行 PRAGMA,请参阅 [DOCKER.md](./DOCKER.md)。
## 🚀 快速开始
有关完整的 Docker 说明,请参阅 [DOCKER.md](./DOCKER.md)。
推荐的 Docker 工作流:
```
# 1. 创建本地 env 文件
cp .example.env .env
# 2. 编辑 .env 并将 PRAGMA_KB_PATH 指向您的本地知识库
# (如果您想将运行时数据存放到其他位置,请同时修改 PRAGMA_SESSIONS_PATH)
# 3. 选择是否启用 PDF 导出
# PDF_EXPORT_ENABLED=true -> 启用 PDF 导出并将 Chromium 包含在镜像中
# PDF_EXPORT_ENABLED=false -> 禁用 PDF 导出并在重新构建时省略 Chromium
# 4. 构建并启动
docker compose up -d --build
# 5. 访问地址
http://localhost:3000
```
### PRAGMA // 工具箱
PRAGMA // Toolbox 是一个可选的伴随服务,可协助执行选定的被动侦察和主动枚举工作流。启用时,它作为 `Toolbox` 模块暴露在 PRAGMA 内部。
- 仓库:[PRAGMA // Toolbox](https://github.com/VJakoby/matrix-toolbox)
- 用途:提供 API 支持的辅助工作流,如被动侦察、Nmap 枚举和 Masscan 枚举,而无需将 PRAGMA 本身转变为扫描平台
- 集成模型:PRAGMA // Toolbox 作为其自己的本地服务运行,PRAGMA 通过可选的 Toolbox 代理路由与其通信
将 PRAGMA // Toolbox 作为独立容器启动:
```
cd ~/matrix-toolbox
docker compose build --no-cache
docker compose up -d
```
验证其是否可达:
```
curl http://127.0.0.1:3003/healthz
```
在 PRAGMA 中启用它:
```
TOOLBOX_ENABLED=true
TOOLBOX_URL=http://127.0.0.1:3003
```
或使用备用 URL:
```
TOOLBOX_ENABLED=true
TOOLBOX_URLS=http://matrix:3003,http://host.docker.internal:3003,http://127.0.0.1:3003
```
然后重启 PRAGMA。如果启用,`Toolbox` 将出现在侧边栏。如果禁用,该模块将完全隐藏。
兼容性说明:
- `TOOLBOX_*` 现在是首选的配置接口
- 旧版的 `MATRIX_*` 变量仍被接受,作为现有设置的备用方案
简而言之:
1. 将 PRAGMA // Toolbox 作为独立的服务/容器构建并启动
2. 将 PRAGMA 指向 PRAGMA // Toolbox API
3. 启用 `TOOLBOX_ENABLED=true`
4. 重启 PRAGMA
常见的 `.env` 值包括:
- `TOOLBOX_ENABLED`
- `TOOLBOX_URL`
- `TOOLBOX_URLS`
- `PRAGMA_KB_PATH`
- `PRAGMA_SESSIONS_PATH`
- `PDF_EXPORT_ENABLED`
- `PRAGMA_UID`
- `PRAGMA_GID`
- `SEARCH_URL`
`PDF_EXPORT_ENABLED` 现在是唯一的与 PDF 相关的设置:
- `true` 启用 PDF 导出并将 Chromium 构建到映像中
- `false` 禁用 PDF 导出,并在重新构建后从映像中省略 Chromium
为什么这是一个单一设置:
- 大多数用户不需要单独控制“PDF 功能开/关”和“是否安装 Chromium”
- 如果禁用 PDF 导出,安装 Chromium 就是不必要的映像臃肿
- 单一开关使选择与用户的实际需求保持一致:PDF 支持或更小的映像
实际的大小影响:
- `PDF_EXPORT_ENABLED=true`:映像大小约 `941MB`
- `PDF_EXPORT_ENABLED=false`:映像大小约 `290MB`
如果你更改了 `PDF_EXPORT_ENABLED`,请重新构建映像。
如果你在主机上编辑了 `note-templates.json`,并希望在不重新构建的情况下在 Docker 内部反映这些更改,请按照 [DOCKER.md](./DOCKER.md) 中的说明为该文件添加绑定挂载。
### 使用 Node.js 手动运行
```
# 1. 安装依赖
npm install
# 2. 启动服务器
# npm start 现在会自动读取 `.env`,因此对于本地运行,PDF_EXPORT_ENABLED
# 的行为也与 Docker Compose 保持一致。
npm start
# 3. 在浏览器中打开
http://localhost:3000
```
## 前端布局
实时 UI 由 [views/app.ejs](./views/app.ejs) 渲染。较旧的 [public/app.html](./public/app.html) 作为静态镜像/参考页保留,但应用程序实际提供服务的是服务器端渲染的 EJS 视图。
前端现在已拆分为 [public/app](./public/app) 下的较小浏览器模块:
- `shell.js` —— 主题、侧边栏状态、应用引导、全局快捷键、视图切换
- `content-panel.js` —— KB/战术预览渲染、复制助手、源预览面板
- `editor-theme.js` —— 共享编辑器状态和语法主题处理
- `note-editor.js` —— 笔记编辑器初始化和预览布局行为
- `kb-editor.js` —— 就地 KB/战术编辑逻辑
- `workbench.js` —— 工作台/会话存储、加密流程、模板加载
- `notes.js` —— 笔记 CRUD、过滤器、标签、目标、导出
- `quick-log.js` —— 端口、路径、战利品和顶部栏快速日志弹出窗口
- `timeline.js` —— 时间线视图、按时间顺序渲染、Toast 助手、共享时间线助手
- `kb.js`、`search.js`、`targets.js` —— KB 浏览、搜索集成、目标管理
- `app.js` —— 剩余的应用协调逻辑、命令面板和模态助手
这意味着大多数新的前端工作应针对这些专注的模块之一,而不是让 `app.js` 重新膨胀成一个巨石应用。
## 许可证和声明
PRAGMA Workbench 在 AGPL-3.0-or-later 下获得许可。第三方许可证声明列在 [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md) 中。
## 🛣️ 路线图
项目的方向、明确的非目标以及功能边界决策在路线图中单独跟踪。
参见 [ROADMAP.md](./ROADMAP.md)。
## 🤝 贡献
如果你发现了新的想法、功能提议、Bug 或其他问题,非常欢迎提交 Issue。带有修复或改进的 Pull Request 同样非常受欢迎。
由 VJakoby + 🤖 创建 | 在 AGPL-3.0-or-later 下许可 | [查看 AI 与架构披露](./AI-DISCLOSURE.md)标签:Markdown编辑器, MITM代理, OPA, Ruby, TGT, Windows内核, 单机版, 安全工程师, 安全测试, 工作流, 工具软件, 报告辅助, 攻击性安全, 攻防演练, 本地应用, 漏洞分析, 白帽子, 知识库, 离线, 笔记, 网络安全, 自定义脚本, 请求拦截, 路径探测, 隐私保护, 靶场