Low Risk — Risk Score 15/100
Last scan:2 days ago Rescan
15 /100
LobsterOps
AI Agent Observability & Debug Console - flight recorder and debug console for autonomous AI systems
LobsterOps 是一个合法的 AI Agent 可观测性工具,具有完整的 PII 过滤和本地存储优先设计。存在权限声明不够精确的轻微瑕疵,但不构成安全威胁。
Skill NameLobsterOps
Duration71.1s
Enginepi
Safe to install
可用。建议在文档中更明确声明 filesystem:WRITE(存储后端)和 network:WRITE(Supabase)权限需求。

Findings 5 items

Severity Finding Location
Medium
存储后端需要文件写入权限但未声明
JsonFileStorage 和 SQLiteStorage 需要在 ./lobsterops-data/ 或指定路径创建文件和目录,但 SKILL.md 的 Environment Variable Contract 和 Security & Guardrails 部分均未明确说明需要 filesystem:WRITE 权限。
await fs.mkdir(this.dataDir, { recursive: true });
→ 在 SKILL.md 中添加存储后端需要的文件系统权限说明
src/storage/JsonFileStorage.js:39
Medium
Supabase 存储会向外部服务发送数据
SupabaseStorage 使用 @supabase/supabase-js 向配置的 Supabase URL 发送事件数据。SKILL.md 提到需要 SUPABASE_URL 和 SUPABASE_KEY,但未明确说明这意味着 network:WRITE 权限。
this.supabase = createClient(this.supabaseUrl, this.supabaseKey);
→ 在 SKILL.md Security & Guardrails 部分明确说明 Supabase 配置会导致数据外传到第三方服务
src/storage/SupabaseStorage.js:38
Low
声明了但未使用的依赖
package.json 包含 express 和 express-session,但核心代码中未引用。README.md 提到 examples/dashboard-server.js 使用这些依赖,但该文件不在代码库中。
"express": "^4.22.1"
→ 确认是否需要这些依赖,或从 package.json 中移除
package.json:29
Info
PII 过滤实现完整
PIIFilter 正确实现了 email、phone、ssn、creditCard、ipAddress、apiKey 的正则匹配和替换,默认启用。
apiKey: /(?:sk|pk|key|token|api[_-]?key|bearer)[-_]?(?:[a-zA-Z0-9][-_]?){20,}/gi
→ 无需改进
src/core/PIIFilter.js:35
Info
本地存储优先设计合理
默认使用 JsonFileStorage,数据保存在本地目录。只有显式配置 Supabase 才会外传数据。
return new JsonFileStorage(config);
→ 无需改进
src/storage/StorageFactory.js:65
ResourceDeclaredInferredStatusEvidence
Filesystem NONE WRITE ✗ Violation src/storage/JsonFileStorage.js:39-43 创建 ./lobsterops-data/ 目录
Network NONE WRITE ✗ Violation src/storage/SupabaseStorage.js:38 使用 @supabase/supabase-js 向外部服务发送数据
Shell NONE NONE 无 subprocess/child_process 使用
Environment READ READ ✓ Aligned src/storage/StorageFactory.js:50 读取 LOBSTER_STORAGE/STORAGE_TYPE 环境变量,SKILL.md 已…
Skill Invoke NONE NONE 无动态 skill 调用
15 findings
🔗
Medium External URL 外部 URL
https://img.shields.io/npm/v/lobsterops.svg
README.md:6
🔗
Medium External URL 外部 URL
https://www.npmjs.com/package/lobsterops
README.md:6
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/License-MIT-yellow.svg
README.md:7
🔗
Medium External URL 外部 URL
https://opensource.org/licenses/MIT
README.md:7
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/built%20by-an%20AI%20agent-e8263a
README.md:8
🔗
Medium External URL 外部 URL
https://x.com/lobsteractual
README.md:8
🔗
Medium External URL 外部 URL
https://lobsterops.dev
README.md:10
🔗
Medium External URL 外部 URL
https://lobsterops.dev/demo
README.md:10
🔗
Medium External URL 外部 URL
https://replit.com/badge/github/noeldelisle/LobsterOps
README.md:43
🔗
Medium External URL 外部 URL
https://replit.com/new/github/noeldelisle/LobsterOps
README.md:43
🔗
Medium External URL 外部 URL
https://openclaw.ai
README.md:242
🔗
Medium External URL 外部 URL
https://claude.ai/code
README.md:370
🔗
Medium External URL 外部 URL
https://x.com/noeldelisle
README.md:370
🔗
Medium External URL 外部 URL
https://your-project.supabase.co
SKILL.md:76
📧
Info Email 邮箱地址
[email protected]
tests/LobsterOps.test.js:503

File Tree

21 files · 159.8 KB · 5256 lines
JavaScript 17f · 4681L Markdown 3f · 542L JSON 1f · 33L
├─ 📁 src
│ ├─ 📁 core
│ │ ├─ 📜 AlertManager.js JavaScript 252L · 6.7 KB
│ │ ├─ 📜 Analytics.js JavaScript 229L · 6.9 KB
│ │ ├─ 📜 DebugConsole.js JavaScript 268L · 6.8 KB
│ │ ├─ 📜 Exporter.js JavaScript 151L · 4.4 KB
│ │ ├─ 📜 LobsterOps.js JavaScript 501L · 13.7 KB
│ │ ├─ 📜 OpenClawInstrumentation.js JavaScript 225L · 7.2 KB
│ │ └─ 📜 PIIFilter.js JavaScript 79L · 2.3 KB
│ └─ 📁 storage
│ ├─ 📜 JsonFileStorage.js JavaScript 415L · 12.8 KB
│ ├─ 📜 MemoryStorage.js JavaScript 252L · 7.3 KB
│ ├─ 📜 SQLiteStorage.js JavaScript 487L · 14.2 KB
│ ├─ 📜 StorageAdapter.js JavaScript 88L · 2.6 KB
│ ├─ 📜 StorageFactory.js JavaScript 73L · 2.5 KB
│ └─ 📜 SupabaseStorage.js JavaScript 471L · 13.9 KB
├─ 📁 tests
│ └─ 📜 LobsterOps.test.js JavaScript 967L · 32.0 KB
├─ 📝 CONTRIBUTING.md Markdown 72L · 2.3 KB
├─ 📜 example.js JavaScript 191L · 6.9 KB
├─ 📜 index.js JavaScript 27L · 985 B
├─ 📜 jest.config.js JavaScript 5L · 89 B
├─ 📋 package.json JSON 33L · 888 B
├─ 📝 README.md Markdown 374L · 11.8 KB
└─ 📝 SKILL.md Markdown 96L · 3.7 KB

Dependencies 6 items

PackageVersionSourceKnown VulnsNotes
@supabase/supabase-js ^2.99.2 npm No Supabase 客户端,用于云存储
express ^4.22.1 npm No 声明但未在核心代码中使用,README 提及用于 dashboard-server.js
express-session ^1.19.0 npm No 声明但未在核心代码中使用,README 提及用于 dashboard-server.js
sqlite3 ^6.0.1 npm No SQLite 驱动,用于 SQLite 存储后端
uuid ^9.0.1 npm No 唯一 ID 生成,用于事件 ID
jest ^29.7.0 npm No 测试框架,仅 devDependencies

Security Positives

✓ PII 过滤实现完整,支持 6 种敏感数据类型(email、phone、ssn、creditCard、ipAddress、apiKey)
✓ 默认使用本地存储(JsonFileStorage),不会自动外传数据
✓ Supabase 需要显式配置和凭据,不会自动发现或推断
✓ 代码结构清晰,使用适配器模式实现多种存储后端
✓ 包含完整的单元测试(tests/LobsterOps.test.js)
✓ 无恶意行为证据:无 eval、child_process、敏感路径遍历或数据外泄代码
✓ 支持事件保留策略自动清理旧数据