zilliztech/memsearch
A persistent, unified memory layer for all your AI agents (e.g. Claude Code, Codex, DSH), backed by Markdown and Milvus.
- Repository: https://github.com/zilliztech/memsearch
- Commit:
3e296a379cbd4605debde8571b2c7f61f27399a5 - Generated: 2026-11-14T00:16:19+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 22 | explicit | 95% | 100% |
| Code quality | 64 | weak | 90% | 100% |
| Security | 45 | poor | 85% | 100% |
AI provenance
Explicit AI attribution on 22% of first-party code added; an estimated 22% including velocity signals.
- Explicitly attributed share (lower bound): 22.5%
- Unattributed share in AI-consistent velocity bursts: 10.8%
- Estimated AI-generated share: 22.5%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 138 | 3,853 |
| OpenAI Codex | 23 | 6,650 |
| GitHub Copilot coding agent | 3 | 80 |
- AI tooling configured in repo: claude-code
Current source lines last changed by AI-attributed commits: 5,403 of 20,178.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 2.406 | 1.286 | 1.87x |
| Security | 3.887 | 0.948 | 4.1x |
- Stylometry index: 0.20 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 8). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-02 | 5,205 | 59% |
| 2026-03 | 4,309 | 9% |
| 2026-04 | 2,118 | 2% |
| 2026-05 | 6,174 | 0% |
| 2026-06 | 4,819 | 2% |
| 2026-07 | 3,505 | 6% |
| 2026-08 | 6,565 | 5% |
| 2026-09 | 6,230 | 0% |
| 2026-10 | 6,506 | 85% |
| 2026-11 | 1,675 | 55% |
Evidence
- OpenAI Codex: PR branch 'codex/workbuddy-integration' (0f1ff2c119f4)
- Claude Code: PR description attribution (d4ce83feb16b)
- OpenAI Codex: PR branch 'codex/opencode-windows-runtime' (c7137ca5c03a)
- OpenAI Codex: PR branch 'codex/dsh-headless-credential-guide' (67633f539718)
- OpenAI Codex: PR branch 'codex/refresh-readme-demo' (e9e2a0713875)
- OpenAI Codex: PR branch 'codex/dsh-recall-hint' (5e51b46ed8ae)
- OpenAI Codex: PR branch 'codex/dsh-web-route-auth' (c1383ff28cb1)
- OpenAI Codex: PR branch 'codex/codex-macos-tempfile' (60e847035735)
- OpenAI Codex: PR branch 'codex/dsh-windows-runtime' (64e507599ac0)
- OpenAI Codex: PR branch 'codex/release-v0.4.22' (ed124cc37d4c)
- OpenAI Codex: PR branch 'codex/fix-claude-stop-root' (e4e9a02fd2e3)
- OpenAI Codex: PR branch 'codex/docs-embedding-defaults' (de29d724ce87)
- OpenAI Codex: PR branch 'codex/dsh-onnx-default' (ebd3d3721960)
- Claude Code: PR description attribution (c0501d81c2e3)
- OpenAI Codex: PR branch 'codex/fix-opencode-scan-cache' (85fb877572fd)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is weak: test-to-source ratio 0.86, CI runs tests; 17% of function code in complex or long functions; 24% duplicated lines. Weakest area: type safety.
| Area | Score |
|---|---|
| Complexity (lizard) | 59 |
| Duplication | 24 |
| Code smells (Opengrep) | 55 |
| Tests and CI | 100 |
| Documentation | 80 |
| Type safety | 8 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 832; mean complexity 4.3, 90th percentile 10; 28 complex and 4 long functions
- Duplicated lines: 23.6% of 15,460 compared
- Tests: 17,399 test lines for 20,178 source lines (ratio 0.86); CI test commands: pytest, npm test, npm run test; 66% of recent source commits also change tests
- Docs missing or thin: changelog
Most complex functions:
- main in evaluation/rerank_evaluate.py: complexity 52, 172 lines
- renderMarkdown in plugins/dsh/client.js: complexity 30, 86 lines
- status in plugins/opencode/scripts/opencode_turns.py: complexity 29, 36 lines
- _parse_workbuddy in src/memsearch/transcript.py: complexity 29, 43 lines
- read in plugins/openclaw/index.js: complexity 28, 54 lines
Security
Security posture is poor: 177 known vulnerabilities in 26 dependencies; 28 high-severity SAST findings; 43 high-severity workflow issues. Weakest area: ci actions.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 65 |
| Vulnerable dependencies (OSV) | 3 |
| CI workflows (zizmor) | 0 |
| Posture (policy, updates, signing, lockfiles) | 20 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 177 in 26 packages (critical 12, high 96, medium 59, low 9)
-
Posture checks passed: signed commits; missing: security policy, dependency updates, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| critical | osv/GHSA-63hf-3vf5-4wqf: aiohttp@3.13.3 (PyPI) is affected by PYSEC-2026-2102, GHSA-63hf-3vf5-4wqf |
uv.lock |
| critical | osv/GHSA-82r6-8w77-94w6: anyio@4.12.1 (PyPI) is affected by PYSEC-2026-4025, GHSA-82r6-8w77-94w6 |
uv.lock |
| critical | osv/GHSA-6q48-6c7w-9gw2: certifi@2026.1.4 (PyPI) is affected by PYSEC-2026-4320, GHSA-6q48-6c7w-9gw2 |
uv.lock |
| critical | osv/GHSA-p423-j2cm-9vmq: cryptography@46.0.4 (PyPI) is affected by PYSEC-2026-36, GHSA-p423-j2cm-9vmq |
uv.lock |
| critical | osv/GHSA-5x8w-8jj5-q52h: pillow@12.1.0 (PyPI) is affected by PYSEC-2026-4330, GHSA-5x8w-8jj5-q52h |
uv.lock |
| critical | osv/GHSA-8g5g-8vmr-9782: pillow@12.1.0 (PyPI) is affected by PYSEC-2026-4332, GHSA-8g5g-8vmr-9782 |
uv.lock |
| critical | osv/GHSA-v9pv-5gc8-w2m6: pillow@12.1.0 (PyPI) is affected by PYSEC-2026-4339, GHSA-v9pv-5gc8-w2m6 |
uv.lock |
| critical | osv/GHSA-xvh5-g6gv-559v: pillow@12.1.0 (PyPI) is affected by PYSEC-2026-4363, GHSA-xvh5-g6gv-559v |
uv.lock |
| critical | osv/GHSA-332p-7hrc-92wf: pillow@12.1.0 (PyPI) is affected by GHSA-332p-7hrc-92wf |
uv.lock |
| critical | osv/GHSA-w889-685w-c8fh: pillow@12.1.0 (PyPI) is affected by GHSA-w889-685w-c8fh |
uv.lock |
| critical | osv/GHSA-jhr6-gm9c-rqjv: sentence-transformers@5.2.2 (PyPI) is affected by PYSEC-2026-4164, GHSA-jhr6-gm9c-rqjv |
uv.lock |
| critical | osv/GHSA-fgcw-684q-jj6r: transformers@4.57.6 (PyPI) is affected by PYSEC-2026-2290, GHSA-fgcw-684q-jj6r |
uv.lock |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/_shared/scripts/maintenance-runner.py:32 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/_shared/scripts/maintenance-runner.py:105 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
plugins/_shared/scripts/maintenance-runner.py:106 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/claude-code/scripts/maintenance-runner.py:32 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/claude-code/scripts/maintenance-runner.py:105 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
plugins/claude-code/scripts/maintenance-runner.py:106 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/codex/scripts/maintenance-runner.py:32 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/codex/scripts/maintenance-runner.py:105 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
plugins/codex/scripts/maintenance-runner.py:106 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/dsh/scripts/maintenance-runner.py:32 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/dsh/scripts/maintenance-runner.py:105 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
plugins/dsh/scripts/maintenance-runner.py:106 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
plugins/dsh/scripts/parse-transcript.py:63 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Repository profile
- Source lines: 20,178; test lines: 17,399
| Language | Lines |
|---|---|
| Python | 24,872 |
| JavaScript | 5,710 |
| Shell | 3,651 |
| TypeScript | 3,344 |