github Python re-analysis due

po4erk91/thread-keeper

v0.17.6
github

Multi-agent shared brain across Claude Code/Desktop, Codex, Gemini, Copilot, VS Code. Cross-session memory, self-improving skill loops, inter-agent signaling — one local MCP server.

maintainer
po4erk91
licence
MIT
first seen
2026-06-09
last seen
2026-09-17
releases · 30d
14
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  2. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  3. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  4. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  5. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  6. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  7. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  8. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  9. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  10. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  11. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  12. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  13. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  14. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  15. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  16. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  17. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  18. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  19. HIGH code analysis flagged dynamic code execution in po4erk91/thread-keeper
  20. HIGH code analysis flagged committed secret ×2, dynamic code execution ×3 in po4erk91/thread-keeper
capabilities 0 tools
transport stdio · http verified reported listed in the official MCP registry counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 089a92a · analyzer v33 · 9h ago

danger signals5

code evidence v0.17.6 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 260

filesystem 105

  • fs (weak) po4erk91-thread-keeper-089a92a/scripts/db_stress.py :16 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/scripts/memory_eval/run.py :50 import shutil
  • fs (weak) po4erk91-thread-keeper-089a92a/scripts/tk_verify_ingest.py :36 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/conftest.py :9 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_adapters.py :16 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_auto_update.py :8 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_backup.py :6 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_candidate_reviewer.py :13 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_config_settings.py :10 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_config_watcher.py :19 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_curator.py :20 import shutil
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_daemon_host_config.py :4 from pathlib import Path
show 28 more
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_daemon_host_integration.py :4 import shutil
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dashboard.py :18 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_db_contention.py :6 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_db_migration_fts.py :6 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_db_schema.py :9 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_feed_tools.py :5 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_miner.py :8 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_observation_resolve.py :5 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_recompute.py :8 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_tier.py :19 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic_validator.py :10 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_eval_harness.py :24 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_applier.py :16 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_apply_2.py :6 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_apply_3.py :17 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_daemon.py :16 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_extract_daemon.py :14 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_github_safety.py :15 "from pathlib import Path\n"
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_host_embed.py :2 import shutil
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_ingest_cursor.py :4 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_ingest_denylist.py :4 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_ingest_secret_redaction.py :3 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_ingest_transactions.py :4 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_lessons.py :14 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_memory_eval.py :19 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_menubar_app.py :4 import shutil
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_notify_daemon.py :9 from pathlib import Path
  • fs (weak) po4erk91-thread-keeper-089a92a/tests/test_nudges.py :18 from pathlib import Path

65 more not shown — this panel samples each group; the count above is the real total.

shell / exec 36

  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_db_contention.py :7 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_db_schema.py :6 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_eval_harness.py :22 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_applier.py :13 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_daemon.py :12 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_host_wedged.py :12 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_memory_eval.py :17 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_memory_guard.py :6 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_menubar_app.py :5 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_model_catalog.py :4 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_spawn_budget.py :9 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_spawn_codex_stdin.py :4 import subprocess
show 24 more
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_spawn_watchdog.py :20 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_spawn_worktree_isolation.py :4 import subprocess
  • shell (weak) po4erk91-thread-keeper-089a92a/tests/test_spawn_wrap.py :22 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/_spawn_wrap.py :37 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/adapters/antigravity.py :20 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/adapters/claude_code.py :12 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/adapters/codex.py :19 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/adapters/copilot.py :34 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/auto_update.py :22 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/evolve_applier.py :58 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/evolve_daemon.py :34 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/github_budget.py :20 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/github_safety.py :17 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/helpers.py :11 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/host.py :10 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/identity.py :9 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/memory_guard.py :15 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/menubar_app.py :13 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/model_catalog.py :8 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/notify.py :33 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/process_health.py :28 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/spawn_budget.py :36 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/tools/dialog.py :10 import subprocess
  • shell po4erk91-thread-keeper-089a92a/threadkeeper/tools/spawn.py :12 import subprocess

network 12

  • net (weak) po4erk91-thread-keeper-089a92a/scripts/memory_eval/run.py :55 import urllib.request
  • net (weak) po4erk91-thread-keeper-089a92a/tests/test_auto_update.py :10 from urllib.error import HTTPError
  • net (weak) po4erk91-thread-keeper-089a92a/tests/test_evolve_applier.py :1869 import socket
  • net (weak) po4erk91-thread-keeper-089a92a/tests/test_sync_transport.py :9 import urllib.error
  • net po4erk91-thread-keeper-089a92a/threadkeeper/auto_update.py :27 from urllib.error import HTTPError, URLError
  • net po4erk91-thread-keeper-089a92a/threadkeeper/backup.py :13 from urllib.parse import quote
  • net po4erk91-thread-keeper-089a92a/threadkeeper/eval/harness.py :62 import urllib.request
  • net po4erk91-thread-keeper-089a92a/threadkeeper/evolve_applier.py :64 from urllib.parse import urlsplit
  • net po4erk91-thread-keeper-089a92a/threadkeeper/host_embed.py :18 import socket
  • net po4erk91-thread-keeper-089a92a/threadkeeper/model_catalog.py :10 import urllib.error
  • net po4erk91-thread-keeper-089a92a/threadkeeper/skill_updater.py :25 from urllib import request
  • net po4erk91-thread-keeper-089a92a/threadkeeper/sync/daemon.py :19 import urllib.request

secrets 3

  • secrets (weak) po4erk91-thread-keeper-089a92a/scripts/memory_eval/run.py :351 api_key = os.environ.get("ANTHROPIC_API_KEY", "")
  • secrets po4erk91-thread-keeper-089a92a/threadkeeper/eval/harness.py :514 api_key = os.environ.get("ANTHROPIC_API_KEY", "")
  • secrets po4erk91-thread-keeper-089a92a/threadkeeper/github_budget.py :86 os.environ.get("GH_TOKEN", "").strip()

database 77

  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_adapters.py :12 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_backup.py :3 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_config_settings.py :8 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_db_migration_fts.py :4 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_db_runtime.py :4 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_db_schema.py :5 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_dialectic.py :10 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_single_flight_prompt_prefixes.py :5 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_sync_capture.py :83 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_sync_migrate.py :9 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_sync_protocol.py :7 import sqlite3
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_sync_reset_node.py :11 import sqlite3
show 28 more
  • db (weak) po4erk91-thread-keeper-089a92a/tests/test_verify_ingest.py :10 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/_spawn_wrap.py :36 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/adapters/copilot.py :33 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/backup.py :9 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/brief.py :15 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/candidate_reviewer.py :39 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/config.py :1136 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/config_watcher.py :67 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/curator.py :60 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/curator_snapshots.py :14 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/daemon_state.py :20 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/db.py :9 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/dialectic_miner.py :13 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/dialectic_validator.py :16 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/embeddings.py :17 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/evolve_applier.py :57 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/evolve_daemon.py :33 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/extract_daemon.py :33 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/forget.py :9 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/github_budget.py :19 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/harvest.py :10 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/helpers.py :10 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/identity.py :7 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/ingest.py :10 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/lessons.py :34 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/link_health.py :7 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/migrate_embeddings.py :27 import sqlite3
  • db po4erk91-thread-keeper-089a92a/threadkeeper/notify.py :32 import sqlite3

37 more not shown — this panel samples each group; the count above is the real total.

declared dependencies 13

  • mcp@>=1.10.0,<2
  • pydantic@>=2.13.4
  • pydantic-settings@>=2.14.2
  • pyyaml@>=6.0.3
  • fastembed@>=0.8,<0.9
  • huggingface-hub@>=0.20
  • numpy@>=1.24.0
  • sqlite-vec@>=0.1.9
  • sentence-transformers@>=2.2.0
  • pytest@>=9.1.1
  • pytest-cov@>=7.1.0
  • pytest-forked@>=1.6
show 1 more
  • pytest-xdist@>=3.5