tallcyberguy/eksir
GitHub: tallcyberguy/eksir
一款自托管的多租户 AI SOC 工作台,通过确定性分诊与 LLM 多角色调查辅助分析师处理安全告警,所有判定与响应操作须经人类批准。
Stars: 0 | Forks: 0
# EKSIR
**分析师级别的 SOC 工作台:确定性分诊与富化,agent-persona LLM 调查,以及作为唯一被允许提交判定或触发响应操作的人类批准关口。**
[](https://github.com/tallcyberguy/eksir/actions/workflows/ci.yml)
[](https://github.com/tallcyberguy/eksir/actions/workflows/security.yml)
[](./LICENSE)
[](https://www.python.org/)
[](https://nextjs.org/)
EKSIR 自动化警报分诊中确定性的部分(解析、威胁情报富化、相似案例召回、自动关闭),然后运行一系列 LLM 分析师角色(L1 分类 → L2 深度分析 → 可选的追踪 / 取证 →
管理者),并**驻留于人类批准关口**。AI 提出建议;分析师的
**批准**是写入判定或触发实时
遏制操作的唯一动作。它可以在单台机器上自托管,支持 MSSP 使用的多租户,并且
LLM 后端是可替换的(托管 API(如 Claude),或通过 Ollama / vLLM 的完全本地
模型)。
## 目录
- [为何选择 EKSIR](#why-eksir)
- [架构](#architecture)
- [功能亮点](#feature-highlights)
- [快速开始](#quick-start)
- [配置](#configuration)
- [升级](#upgrading)
- [文档](#documentation)
- [设计原则:分析师关口](#design-principle-the-analyst-gate)
- [关于动态恶意软件分析的说明](#a-note-on-dynamic-malware-analysis)
- [贡献](#contributing)
- [安全](#security)
- [许可证](#license)
## 为何选择 EKSIR
大多数“AI SOC”工具要么将分析师淹没在原始警报中,要么悄悄地
自动解决它们。EKSIR 采取了一条深思熟虑的中间路线:
- **确定性优先,LLM 其次。** 富化是通过纯代码完成的(威胁情报,
WHOIS/rDNS,向量相似度,本地 IOC 源,排除项)。一个高置信度关口
(精确匹配 / 多方一致 / 自动关闭规则)直接短路,**完全不调用
LLM**。只有在真正需要人类级别的判断时,LLM 才会运行。
- **AI 建议,分析师提交。** 角色和对话式
管理者只负责构建*提案*。在分析师于关口批准之前,不会写入任何判定,也不会触发任何
EDR 动作。这是在代码中强制执行的,
而不是依靠约定。
- **本地优先且可替换。** 在一台机器上运行。将其指向 Claude,任何
兼容 OpenAI 的 endpoint,或本地模型。Embeddings(bge-m3)与
chat 模型是解耦的。
- **专为 MSSP 打造。** 全面支持多租户,具备每租户凭证
隔离、RBAC、MSSP 汇总仪表板和带有品牌的客户报告。
## 架构

单台主机,单次 `docker compose`:
```
Browser ──▶ Caddy ──▶ Next.js 15 (UI) ──▶ FastAPI orchestrator (:8000) ──▶ ARQ worker
│ │
Postgres · Redis · Qdrant · LiteLLM (:4000) REMnux (docker exec, forensics profile)
```
- **前端** — Next.js 15 (App Router), Tailwind, 三种主题。
- **后端** — FastAPI 协调器 + 一个运行 pipeline 的 ARQ worker。
- **数据** — Postgres(状态),Redis(队列/缓存),Qdrant(向量:
`alerts_v2`, `iocs_v2`, `knowledge_base_v2`)。
- **LLM** — 通过 LiteLLM 代理路由;通过 OpenAI
SDK 实现与提供商无关。默认将深度层级路由到 Claude Sonnet,将快速层级路由到 Claude
Haiku;只需在一个配置文件中替换即可切换至本地模型。
- **取证(可选 profile)** — 一个网络隔离的 REMnux 容器,内置
YARA-Forge 规则,仅由 worker 通过 `docker exec` 驱动。
有关完整状态机,请参阅 [`docs/PIPELINE.md`](docs/PIPELINE.md);
有关设计原理,请参阅 [`docs/DESIGN.md`](docs/DESIGN.md)。
## 功能亮点
| 领域 | 作用 |
|---|---|
| **接入** | OCSF 标准化连接器(Microsoft Defender, Trend Micro Vision One)以及 HMAC 签名的 webhook 和粘贴文本;每租户路由;定时拉取接入和批量/历史导入 |
| **Pipeline** | 确定性解析 → 自动关闭 → 去重 → 富化 → OCSF 实体解析 → 关联 → 决策关口,具有不使用 LLM 的高置信度短路功能 |
| **Agent-persona 综合** | L1 分类 → L2 深度分析(Markdown 报告 + 结构化判定) → 可选的威胁追踪 → 可选的取证推理 → 确定性管理者,停泊在关口 |
| **人类批准关口** | 批准操作提交判定(索引至向量数据库)并仅运行经过分析师检查的响应操作;拒绝操作将重新排队或丢弃;对话式管理者可在批准前修改提案 |
| **富化** | MalwareBazaar / ThreatFox / URLhaus / VirusTotal / AbuseIPDB / OTX, WHOIS, rDNS, 向量相似案例召回 (bge-m3), KB 命中, 分级本地威胁情报评分 |
| **置信度 + 威胁评分** | 每个事件两个融合的 0–100 评分(判定置信度,以及有效威胁 = 固有威胁 × P(恶意))显示在列表和详细视图中 |
| **响应操作** | 感知提供商、分析师把关:**Microsoft Defender**(隔离 / AV 扫描 / 添加指标 / 禁用用户)和 **Trend Micro Vision One**(隔离 / 恢复 / 黑名单 / 收集文件),以及向源警报回写判定 |
| **威胁 IOC** | 每日公共 OSINT 源同步(Emerging Threats, Tor exits, abuse.ch URLhaus / MalwareBazaar / ThreatFox / SSLBL),具有管理员 UI 的排除数据库 |
| **客户案例** | 将事件升级为案例,生成感知区域设置的客户摘要(EN/TR),附加相关事件,预览并通过 SMTP 发送,展示“我们采取的行动” |
| **品牌报告** | 定时或按需生成的每租户 SOC 报告,渲染为 HTML + PDF (WeasyPrint);cron 仅负责草拟,分析师把关的发送操作是唯一的对外步骤 |
| **取证** | 感知文件类型的**静态**分析(PE / Office / PDF / ELF / Mach-O / 脚本 / 归档),结合 YARA-Forge + capa MITRE 映射和 LLM 综合判定 |
| **威胁追踪** | 纯文本 → S1QL / KQL / Sigma 转换,实时 Defender 高级追踪(受把关),已保存的追踪任务 |
| **攻击面 (EASM)** | 外部资产登记 + DNS / SPF-DKIM-DMARC / TLS / WHOIS / nmap 侦测 |
| **MITRE ATT&CK** | 来自确认判定的覆盖热力图 + 每个事件的攻击路径视图 |
| **MSSP / 多租户** | 每租户汇总,一切范围限定于租户,RBAC,每租户 EDR/LLM 凭证隔离(`STRICT_TENANT_CREDS`),BYOK,交接班 |
| **运营** | 调查队列(可认领,按 SLA 排序),SLA 跟踪,团队分析,LLM 成本仪表板,通知,MFA,每事件的 LLM 记录审计 |
## 快速开始
要求:Docker + Docker Compose。对于 RAG 相似案例召回,您还需要主机上的
[Ollama](https://ollama.com);对于本地 GPU 推理,需要 NVIDIA
Container Toolkit。
```
git clone https://github.com/tallcyberguy/eksir.git
cd eksir/deploy
cp .env.example .env
$EDITOR .env # set POSTGRES_PASSWORD, JWT_SECRET, LITELLM_MASTER_KEY,
# INGEST_HMAC_SECRET, a provider key (e.g. ANTHROPIC_API_KEY),
# and SETTINGS_ENCRYPTION_KEY. See "Configuration" below.
# 核心 stack(无 GPU,无 forensics)
docker compose up -d
# 可选:启用 RAG 相似案例 recall(主机端,一次性)
ollama pull bge-m3 # OLLAMA_URL defaults to host.docker.internal:11434
# 可选:+ forensics(REMnux 配合 YARA-Forge — 首次 build 较大)
docker compose --profile forensics up -d --build
# 可选:+ 通过 vLLM 使用本地 GPU 模型
docker compose --profile gpu up -d
```
然后:
- **UI:** http://localhost (Caddy 默认提供 80 端口服务)
- **API 文档 (Swagger):** http://localhost/docs
- **首次登录:** 如果不存在用户,首次启动时将创建引导管理员(`ISOC_BOOTSTRAP_ADMIN_EMAIL` /
`ISOC_BOOTSTRAP_ADMIN_PASSWORD`)。
请立即更改密码。
Postgres 表在启动时自动创建(幂等);公共威胁情报
源将自动填充。
## 配置
所有配置均通过 `deploy/.env` 中的环境变量进行(模板:
[`deploy/.env.example`](deploy/.env.example) 记录了每个选项)。
基本配置:
| 变量 | 内容 | 备注 |
|---|---|---|
| `ISOC_ENV` | `dev` / `staging` / `prod` | `prod`/`staging` 启用失败即关闭的秘密防护 + CORS 锁定 |
| `POSTGRES_PASSWORD`, `DATABASE_URL` | Postgres | 保持两者同步 |
| `JWT_SECRET` | 认证签名密钥 | 使用 `openssl rand -hex 64` 生成 |
| `INGEST_HMAC_SECRET` | Webhook 签名密钥 | `openssl rand -hex 32` |
| `LITELLM_MASTER_KEY` | LiteLLM 管理员密钥 | 即使绑定到环回接口,也要设置强密钥值 |
| `SETTINGS_ENCRYPTION_KEY` | 用于存储 LLM/集成密钥的 Fernet 密钥 | 在生产环境中推荐使用 |
| `ANTHROPIC_API_KEY` (或 `OPENAI_*`) | LLM 提供商密钥 | 至少需要一个提供商(或本地模型) |
| `ISOC_MODEL_DEEP` / `_FAST` | 由 LiteLLM 路由的虚拟模型名称 | `isoc-deep` / `isoc-fast` — 在 `config/litellm.config.yaml` 中更改映射 |
| `OLLAMA_URL` | bge-m3 embeddings endpoint | 主机端;留空则禁用相似案例召回 |
| `VIRUSTOTAL_API_KEY`, `ABUSECH_AUTH_KEY`, ... | TI 富化 | 可选 |
| `V1_*`, `DEFENDER_TOOLS_ENABLED`, `STRICT_TENANT_CREDS` | EDR/XDR 集成 | 可选;默认关闭 |
**将 EKSIR 指向 LLM 的两种方法:**
1. **LiteLLM 代理(默认)。** 编辑 `config/litellm.config.yaml` 以将
虚拟的 `isoc-deep` / `isoc-fast` 名称映射到任何提供商(Claude, OpenAI,
Azure, vLLM)。模型替换只需修改一次 YAML 并重启 LiteLLM。
2. **管理员 → 设置(运行时覆盖)。** 在
UI 中设置 endpoint / 密钥 / 模型;它将在约 60 秒内生效,无需重启(例如本地 Ollama 模型)。
密钥在静态存储时通过 Fernet 加密。
## 升级
**从源码(默认 compose):**
```
cd eksir
git pull
cd deploy
docker compose build backend worker frontend # source is baked into images
docker compose up -d
```
Schema 更改在后端启动时自动应用(幂等的 ALTERs;
版本化更改作为 Alembic 迁移发布在
`backend/migrations/versions/` 下)。更改取证工具后,重新构建
REMnux 镜像:`docker compose --profile forensics build remnux`。
**从固定镜像(`docker-compose.prod.yml`):** 在 `.env` 中设置 `IMAGE_OWNER` 和
`EKSIR_VERSION`,然后 `docker compose -f docker-compose.prod.yml pull
&& docker compose -f docker-compose.prod.yml up -d`。有关
完整的生产环境升级 + 回滚流程,请参阅
[`DEPLOY.md`](DEPLOY.md)。
## 文档
| 文档 | 内容 |
|---|---|
| [`docs/PIPELINE.md`](docs/PIPELINE.md) | 警报状态机、agent personas 和人类关口(权威指南) |
| [`docs/DESIGN.md`](docs/DESIGN.md) | 高级设计和原理 |
| [`docs/DATA-MODEL.md`](docs/DATA-MODEL.md) | 核心数据库表和向量集合 |
| [`docs/API.md`](docs/API.md) | 精选 HTTP API 接口(完整接口请见 `/docs`) |
| [`docs/`](docs/) ADR-0001 … ADR-0008 | 架构决策记录(技术栈,本地 LLM,EDR 集成,连接器框架等) |
| [`DEPLOY.md`](DEPLOY.md) | 生产环境部署、升级和回滚操作手册 |
| [`CHANGELOG.md`](CHANGELOG.md) | 发布历史(Keep a Changelog) |
| [`CONTRIBUTING.md`](
[](https://github.com/tallcyberguy/eksir/actions/workflows/ci.yml)
[](https://github.com/tallcyberguy/eksir/actions/workflows/security.yml)
[](./LICENSE)
[](https://www.python.org/)
[](https://nextjs.org/)
EKSIR 自动化警报分诊中确定性的部分(解析、威胁情报富化、相似案例召回、自动关闭),然后运行一系列 LLM 分析师角色(L1 分类 → L2 深度分析 → 可选的追踪 / 取证 →
管理者),并**驻留于人类批准关口**。AI 提出建议;分析师的
**批准**是写入判定或触发实时
遏制操作的唯一动作。它可以在单台机器上自托管,支持 MSSP 使用的多租户,并且
LLM 后端是可替换的(托管 API(如 Claude),或通过 Ollama / vLLM 的完全本地
模型)。
## 目录
- [为何选择 EKSIR](#why-eksir)
- [架构](#architecture)
- [功能亮点](#feature-highlights)
- [快速开始](#quick-start)
- [配置](#configuration)
- [升级](#upgrading)
- [文档](#documentation)
- [设计原则:分析师关口](#design-principle-the-analyst-gate)
- [关于动态恶意软件分析的说明](#a-note-on-dynamic-malware-analysis)
- [贡献](#contributing)
- [安全](#security)
- [许可证](#license)
## 为何选择 EKSIR
大多数“AI SOC”工具要么将分析师淹没在原始警报中,要么悄悄地
自动解决它们。EKSIR 采取了一条深思熟虑的中间路线:
- **确定性优先,LLM 其次。** 富化是通过纯代码完成的(威胁情报,
WHOIS/rDNS,向量相似度,本地 IOC 源,排除项)。一个高置信度关口
(精确匹配 / 多方一致 / 自动关闭规则)直接短路,**完全不调用
LLM**。只有在真正需要人类级别的判断时,LLM 才会运行。
- **AI 建议,分析师提交。** 角色和对话式
管理者只负责构建*提案*。在分析师于关口批准之前,不会写入任何判定,也不会触发任何
EDR 动作。这是在代码中强制执行的,
而不是依靠约定。
- **本地优先且可替换。** 在一台机器上运行。将其指向 Claude,任何
兼容 OpenAI 的 endpoint,或本地模型。Embeddings(bge-m3)与
chat 模型是解耦的。
- **专为 MSSP 打造。** 全面支持多租户,具备每租户凭证
隔离、RBAC、MSSP 汇总仪表板和带有品牌的客户报告。
## 架构

单台主机,单次 `docker compose`:
```
Browser ──▶ Caddy ──▶ Next.js 15 (UI) ──▶ FastAPI orchestrator (:8000) ──▶ ARQ worker
│ │
Postgres · Redis · Qdrant · LiteLLM (:4000) REMnux (docker exec, forensics profile)
```
- **前端** — Next.js 15 (App Router), Tailwind, 三种主题。
- **后端** — FastAPI 协调器 + 一个运行 pipeline 的 ARQ worker。
- **数据** — Postgres(状态),Redis(队列/缓存),Qdrant(向量:
`alerts_v2`, `iocs_v2`, `knowledge_base_v2`)。
- **LLM** — 通过 LiteLLM 代理路由;通过 OpenAI
SDK 实现与提供商无关。默认将深度层级路由到 Claude Sonnet,将快速层级路由到 Claude
Haiku;只需在一个配置文件中替换即可切换至本地模型。
- **取证(可选 profile)** — 一个网络隔离的 REMnux 容器,内置
YARA-Forge 规则,仅由 worker 通过 `docker exec` 驱动。
有关完整状态机,请参阅 [`docs/PIPELINE.md`](docs/PIPELINE.md);
有关设计原理,请参阅 [`docs/DESIGN.md`](docs/DESIGN.md)。
## 功能亮点
| 领域 | 作用 |
|---|---|
| **接入** | OCSF 标准化连接器(Microsoft Defender, Trend Micro Vision One)以及 HMAC 签名的 webhook 和粘贴文本;每租户路由;定时拉取接入和批量/历史导入 |
| **Pipeline** | 确定性解析 → 自动关闭 → 去重 → 富化 → OCSF 实体解析 → 关联 → 决策关口,具有不使用 LLM 的高置信度短路功能 |
| **Agent-persona 综合** | L1 分类 → L2 深度分析(Markdown 报告 + 结构化判定) → 可选的威胁追踪 → 可选的取证推理 → 确定性管理者,停泊在关口 |
| **人类批准关口** | 批准操作提交判定(索引至向量数据库)并仅运行经过分析师检查的响应操作;拒绝操作将重新排队或丢弃;对话式管理者可在批准前修改提案 |
| **富化** | MalwareBazaar / ThreatFox / URLhaus / VirusTotal / AbuseIPDB / OTX, WHOIS, rDNS, 向量相似案例召回 (bge-m3), KB 命中, 分级本地威胁情报评分 |
| **置信度 + 威胁评分** | 每个事件两个融合的 0–100 评分(判定置信度,以及有效威胁 = 固有威胁 × P(恶意))显示在列表和详细视图中 |
| **响应操作** | 感知提供商、分析师把关:**Microsoft Defender**(隔离 / AV 扫描 / 添加指标 / 禁用用户)和 **Trend Micro Vision One**(隔离 / 恢复 / 黑名单 / 收集文件),以及向源警报回写判定 |
| **威胁 IOC** | 每日公共 OSINT 源同步(Emerging Threats, Tor exits, abuse.ch URLhaus / MalwareBazaar / ThreatFox / SSLBL),具有管理员 UI 的排除数据库 |
| **客户案例** | 将事件升级为案例,生成感知区域设置的客户摘要(EN/TR),附加相关事件,预览并通过 SMTP 发送,展示“我们采取的行动” |
| **品牌报告** | 定时或按需生成的每租户 SOC 报告,渲染为 HTML + PDF (WeasyPrint);cron 仅负责草拟,分析师把关的发送操作是唯一的对外步骤 |
| **取证** | 感知文件类型的**静态**分析(PE / Office / PDF / ELF / Mach-O / 脚本 / 归档),结合 YARA-Forge + capa MITRE 映射和 LLM 综合判定 |
| **威胁追踪** | 纯文本 → S1QL / KQL / Sigma 转换,实时 Defender 高级追踪(受把关),已保存的追踪任务 |
| **攻击面 (EASM)** | 外部资产登记 + DNS / SPF-DKIM-DMARC / TLS / WHOIS / nmap 侦测 |
| **MITRE ATT&CK** | 来自确认判定的覆盖热力图 + 每个事件的攻击路径视图 |
| **MSSP / 多租户** | 每租户汇总,一切范围限定于租户,RBAC,每租户 EDR/LLM 凭证隔离(`STRICT_TENANT_CREDS`),BYOK,交接班 |
| **运营** | 调查队列(可认领,按 SLA 排序),SLA 跟踪,团队分析,LLM 成本仪表板,通知,MFA,每事件的 LLM 记录审计 |
## 快速开始
要求:Docker + Docker Compose。对于 RAG 相似案例召回,您还需要主机上的
[Ollama](https://ollama.com);对于本地 GPU 推理,需要 NVIDIA
Container Toolkit。
```
git clone https://github.com/tallcyberguy/eksir.git
cd eksir/deploy
cp .env.example .env
$EDITOR .env # set POSTGRES_PASSWORD, JWT_SECRET, LITELLM_MASTER_KEY,
# INGEST_HMAC_SECRET, a provider key (e.g. ANTHROPIC_API_KEY),
# and SETTINGS_ENCRYPTION_KEY. See "Configuration" below.
# 核心 stack(无 GPU,无 forensics)
docker compose up -d
# 可选:启用 RAG 相似案例 recall(主机端,一次性)
ollama pull bge-m3 # OLLAMA_URL defaults to host.docker.internal:11434
# 可选:+ forensics(REMnux 配合 YARA-Forge — 首次 build 较大)
docker compose --profile forensics up -d --build
# 可选:+ 通过 vLLM 使用本地 GPU 模型
docker compose --profile gpu up -d
```
然后:
- **UI:** http://localhost (Caddy 默认提供 80 端口服务)
- **API 文档 (Swagger):** http://localhost/docs
- **首次登录:** 如果不存在用户,首次启动时将创建引导管理员(`ISOC_BOOTSTRAP_ADMIN_EMAIL` /
`ISOC_BOOTSTRAP_ADMIN_PASSWORD`)。
请立即更改密码。
Postgres 表在启动时自动创建(幂等);公共威胁情报
源将自动填充。
## 配置
所有配置均通过 `deploy/.env` 中的环境变量进行(模板:
[`deploy/.env.example`](deploy/.env.example) 记录了每个选项)。
基本配置:
| 变量 | 内容 | 备注 |
|---|---|---|
| `ISOC_ENV` | `dev` / `staging` / `prod` | `prod`/`staging` 启用失败即关闭的秘密防护 + CORS 锁定 |
| `POSTGRES_PASSWORD`, `DATABASE_URL` | Postgres | 保持两者同步 |
| `JWT_SECRET` | 认证签名密钥 | 使用 `openssl rand -hex 64` 生成 |
| `INGEST_HMAC_SECRET` | Webhook 签名密钥 | `openssl rand -hex 32` |
| `LITELLM_MASTER_KEY` | LiteLLM 管理员密钥 | 即使绑定到环回接口,也要设置强密钥值 |
| `SETTINGS_ENCRYPTION_KEY` | 用于存储 LLM/集成密钥的 Fernet 密钥 | 在生产环境中推荐使用 |
| `ANTHROPIC_API_KEY` (或 `OPENAI_*`) | LLM 提供商密钥 | 至少需要一个提供商(或本地模型) |
| `ISOC_MODEL_DEEP` / `_FAST` | 由 LiteLLM 路由的虚拟模型名称 | `isoc-deep` / `isoc-fast` — 在 `config/litellm.config.yaml` 中更改映射 |
| `OLLAMA_URL` | bge-m3 embeddings endpoint | 主机端;留空则禁用相似案例召回 |
| `VIRUSTOTAL_API_KEY`, `ABUSECH_AUTH_KEY`, ... | TI 富化 | 可选 |
| `V1_*`, `DEFENDER_TOOLS_ENABLED`, `STRICT_TENANT_CREDS` | EDR/XDR 集成 | 可选;默认关闭 |
**将 EKSIR 指向 LLM 的两种方法:**
1. **LiteLLM 代理(默认)。** 编辑 `config/litellm.config.yaml` 以将
虚拟的 `isoc-deep` / `isoc-fast` 名称映射到任何提供商(Claude, OpenAI,
Azure, vLLM)。模型替换只需修改一次 YAML 并重启 LiteLLM。
2. **管理员 → 设置(运行时覆盖)。** 在
UI 中设置 endpoint / 密钥 / 模型;它将在约 60 秒内生效,无需重启(例如本地 Ollama 模型)。
密钥在静态存储时通过 Fernet 加密。
## 升级
**从源码(默认 compose):**
```
cd eksir
git pull
cd deploy
docker compose build backend worker frontend # source is baked into images
docker compose up -d
```
Schema 更改在后端启动时自动应用(幂等的 ALTERs;
版本化更改作为 Alembic 迁移发布在
`backend/migrations/versions/` 下)。更改取证工具后,重新构建
REMnux 镜像:`docker compose --profile forensics build remnux`。
**从固定镜像(`docker-compose.prod.yml`):** 在 `.env` 中设置 `IMAGE_OWNER` 和
`EKSIR_VERSION`,然后 `docker compose -f docker-compose.prod.yml pull
&& docker compose -f docker-compose.prod.yml up -d`。有关
完整的生产环境升级 + 回滚流程,请参阅
[`DEPLOY.md`](DEPLOY.md)。
## 文档
| 文档 | 内容 |
|---|---|
| [`docs/PIPELINE.md`](docs/PIPELINE.md) | 警报状态机、agent personas 和人类关口(权威指南) |
| [`docs/DESIGN.md`](docs/DESIGN.md) | 高级设计和原理 |
| [`docs/DATA-MODEL.md`](docs/DATA-MODEL.md) | 核心数据库表和向量集合 |
| [`docs/API.md`](docs/API.md) | 精选 HTTP API 接口(完整接口请见 `/docs`) |
| [`docs/`](docs/) ADR-0001 … ADR-0008 | 架构决策记录(技术栈,本地 LLM,EDR 集成,连接器框架等) |
| [`DEPLOY.md`](DEPLOY.md) | 生产环境部署、升级和回滚操作手册 |
| [`CHANGELOG.md`](CHANGELOG.md) | 发布历史(Keep a Changelog) |
| [`CONTRIBUTING.md`](标签:AI风险缓解, DLL 劫持, Python, SOC工作台, 告警分诊, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 搜索引擎查询, 无后门, 版权保护