Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 24 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
c3_agent
-
c3_artifacts
-
c3_bitbucket
-
c3_ci
-
c3_credentials
-
c3_delegate
-
c3_edit
-
c3_edits
-
c3_filter
-
c3_impact
-
c3_jira
-
c3_locks
-
c3_memory
-
c3_override
-
c3_project
-
c3_read
-
c3_search
-
c3_session
-
c3_shell
-
c3_shell_job
-
c3_status
-
c3_task
-
c3_validate
-
tool
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 9955a79 · analyzer v33 · 1d ago
skills & prompt files 3
danger signals6
- dynamic code execution eval()/exec() drknowhow-code-context-control-9955a79/tests/test_background_service.py :145
exec(compile(src, "oracle_start.py", "exec"), ns) - dynamic code execution __import__ sink drknowhow-code-context-control-9955a79/tests/test_delegate_auto.py :208
env = {**__import__("os").environ, "HOME": str(tmp_path / "home"), "USERPROFILE": str(tmp_path / "home")} - committed secret private key drknowhow-code-context-control-9955a79/CHANGELOG.md :2811
PEM private key block (redacted) - committed secret private key drknowhow-code-context-control-9955a79/tests/test_credentials_routes.py :248
PEM private key block (redacted) - committed secret private key drknowhow-code-context-control-9955a79/tests/test_credentials_tool.py :289
PEM private key block (redacted) - committed secret private key drknowhow-code-context-control-9955a79/tests/test_env_parser.py :7
PEM private key block (redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 628
filesystem 372
- fs drknowhow-code-context-control-9955a79/cli/_hook_utils.py :15
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/_shell_writes.py :23
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/c3.py :43
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/commands/common.py :8
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_access_guard.py :18
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_agent_model.py :17
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_artifact.py :16
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_auto_snapshot.py :12
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_c3_signal.py :25
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_c3read.py :16
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_codex_lifecycle.py :4
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_dispatch.py :42
from pathlib import Path
show 28 more
- fs drknowhow-code-context-control-9955a79/cli/hook_edit_ledger.py :15
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_edit_unlock.py :16
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_filter.py :17
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_ghost_files.py :18
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_pretool_enforce.py :42
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_prompt_recall.py :16
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_read.py :16
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_session_end.py :38
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_session_open.py :51
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_session_stats.py :35
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hook_terse_advisor.py :21
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/hub_server.py :18
import shutil - fs drknowhow-code-context-control-9955a79/cli/mcp_proxy.py :19
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/mcp_server.py :18
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/server.py :19
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/_helpers.py :3
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/agent.py :6
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/artifacts.py :3
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/compress.py :11
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/credentials.py :216
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/delegate.py :13
import shutil - fs drknowhow-code-context-control-9955a79/cli/tools/edit.py :23
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/edit_verify.py :43
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/filter.py :11
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/impact.py :10
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/jira.py :9
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/project.py :14
from pathlib import Path - fs drknowhow-code-context-control-9955a79/cli/tools/read.py :6
from pathlib import Path
332 more not shown — this panel samples each group; the count above is the real total.
shell / exec 64
- shell drknowhow-code-context-control-9955a79/cli/c3.py :36
import subprocess - shell drknowhow-code-context-control-9955a79/cli/hub_server.py :20
import subprocess - shell drknowhow-code-context-control-9955a79/cli/mcp_proxy.py :99
import subprocess - shell drknowhow-code-context-control-9955a79/cli/server.py :14
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/agent.py :202
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/delegate.py :14
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/impact.py :8
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/search.py :8
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/shell.py :25
import subprocess - shell drknowhow-code-context-control-9955a79/cli/tools/validate.py :7
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/scripts/screenshots/demo_world.py :22
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/scripts/screenshots/run.py :26
import subprocess
show 28 more
- shell drknowhow-code-context-control-9955a79/services/background_service.py :43
import subprocess - shell drknowhow-code-context-control-9955a79/services/bench/delegate_write_eval.py :36
import subprocess - shell drknowhow-code-context-control-9955a79/services/bench/external/aider_polyglot.py :37
import subprocess - shell drknowhow-code-context-control-9955a79/services/bench/external/swe_bench.py :44
import subprocess - shell drknowhow-code-context-control-9955a79/services/ci_act.py :42
import subprocess - shell drknowhow-code-context-control-9955a79/services/ci_cache.py :43
import subprocess - shell drknowhow-code-context-control-9955a79/services/ci_github.py :29
import subprocess - shell drknowhow-code-context-control-9955a79/services/ci_impact.py :29
import subprocess - shell drknowhow-code-context-control-9955a79/services/ci_runner.py :22
`subprocess.run(shell=True, timeout=...)` hangs forever on Windows. - shell drknowhow-code-context-control-9955a79/services/ci_workflow.py :431
import subprocess - shell drknowhow-code-context-control-9955a79/services/codex_integration.py :4
import subprocess - shell drknowhow-code-context-control-9955a79/services/e2e_benchmark.py :17
import subprocess - shell drknowhow-code-context-control-9955a79/services/e2e_evaluator.py :18
import subprocess - shell drknowhow-code-context-control-9955a79/services/edit_ledger.py :12
import subprocess - shell drknowhow-code-context-control-9955a79/services/git_context.py :16
import subprocess - shell drknowhow-code-context-control-9955a79/services/grok_integration.py :13
import subprocess - shell drknowhow-code-context-control-9955a79/services/override_wake.py :51
import subprocess - shell drknowhow-code-context-control-9955a79/services/parser.py :792
import subprocess as _subprocess - shell drknowhow-code-context-control-9955a79/services/project_manager.py :7
import subprocess - shell drknowhow-code-context-control-9955a79/services/repo_map.py :21
import subprocess - shell drknowhow-code-context-control-9955a79/services/shell_jobs.py :86
import subprocess - shell drknowhow-code-context-control-9955a79/services/shell_output.py :70
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_bitbucket_cli_smoke.py :7
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_c3_shell.py :17
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_ci_act.py :13
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_ci_cache.py :13
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_ci_impact.py :21
import subprocess - shell (weak) drknowhow-code-context-control-9955a79/tests/test_ci_intel.py :13
import subprocess
24 more not shown — this panel samples each group; the count above is the real total.
network 29
- net drknowhow-code-context-control-9955a79/cli/c3.py :8173
import urllib.error - net drknowhow-code-context-control-9955a79/cli/hook_auto_snapshot.py :13
from urllib.error import URLError - net drknowhow-code-context-control-9955a79/cli/hub_server.py :19
import socket - net drknowhow-code-context-control-9955a79/cli/server.py :98
import socket - net drknowhow-code-context-control-9955a79/core/web_security.py :42
from urllib.parse import urlsplit - net drknowhow-code-context-control-9955a79/oracle/oracle_server.py :6
import socket - net drknowhow-code-context-control-9955a79/oracle/services/chat_engine.py :8
import urllib.error - net drknowhow-code-context-control-9955a79/oracle/services/mobile_api.py :3041
import urllib.request - net drknowhow-code-context-control-9955a79/oracle/services/project_scanner.py :7
import urllib.error - net (weak) drknowhow-code-context-control-9955a79/scripts/screenshots/run.py :29
import urllib.error - net (weak) drknowhow-code-context-control-9955a79/scripts/screenshots/seed.py :18
import urllib.error - net drknowhow-code-context-control-9955a79/services/agents.py :1680
import urllib.request
show 17 more
- net drknowhow-code-context-control-9955a79/services/background_service.py :42
import socket - net drknowhow-code-context-control-9955a79/services/bitbucket_client.py :3
Stdlib-only HTTP via urllib.request, Bearer-token (PAT) auth. - net drknowhow-code-context-control-9955a79/services/ci_act.py :279
import socket - net drknowhow-code-context-control-9955a79/services/jira_client.py :18
import urllib.error - net drknowhow-code-context-control-9955a79/services/ollama_bridge.py :13
import urllib.error - net drknowhow-code-context-control-9955a79/services/ollama_client.py :10
import urllib.error - net drknowhow-code-context-control-9955a79/services/oracle_service.py :25
import urllib.request - net drknowhow-code-context-control-9955a79/services/project_manager.py :6
import socket - net (weak) drknowhow-code-context-control-9955a79/tests/test_background_service.py :143
with mock.patch("urllib.request.urlopen", fake_urlopen): - net (weak) drknowhow-code-context-control-9955a79/tests/test_bitbucket_client.py :3
Mocks ``urllib.request.urlopen`` with a context-manager stub so we can - net (weak) drknowhow-code-context-control-9955a79/tests/test_hub_oracle_service_routes.py :175
mock.patch("urllib.request.urlopen", - net (weak) drknowhow-code-context-control-9955a79/tests/test_jira_client.py :3
All transport goes through ``services.jira_client.urllib.request.urlopen`` — - net (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_chat_engine.py :15
import urllib.error - net (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_health_probe.py :43
with mock.patch("urllib.request.urlopen") as urlopen: - net (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_loopback.py :15
import socket - net (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_ollama_bridge.py :4
urllib.request.urlopen is monkeypatched at the module level — no network. - net drknowhow-code-context-control-9955a79/tui/screens/stats.py :2
import socket
secrets 22
- secrets drknowhow-code-context-control-9955a79/cli/c3.py :829
if os.environ.get("OLLAMA_API_KEY"): - secrets drknowhow-code-context-control-9955a79/cli/commands/parser.py :432
bb_logout = bb_subs.add_parser("logout", help="Remove a Bitbucket account from keyring + config") - secrets drknowhow-code-context-control-9955a79/oracle/services/api_auth.py :28
import keyring # type: ignore[import-untyped] - secrets drknowhow-code-context-control-9955a79/services/access_guard.py :432
import keyring # noqa: PLC0415 — lazy: access_guard is stdlib-only on - secrets drknowhow-code-context-control-9955a79/services/bitbucket_credentials.py :25
import keyring # type: ignore[import-untyped] - secrets drknowhow-code-context-control-9955a79/services/credential_store.py :62
import keyring # type: ignore[import-untyped] - secrets drknowhow-code-context-control-9955a79/services/jira_credentials.py :34
import keyring # type: ignore[import-untyped] - secrets drknowhow-code-context-control-9955a79/services/ollama_bridge.py :91
self.api_key = api_key or os.environ.get("OLLAMA_API_KEY", "") - secrets drknowhow-code-context-control-9955a79/services/ollama_credentials.py :30
import keyring # type: ignore[import-untyped] - secrets drknowhow-code-context-control-9955a79/services/shell_output.py :62
import getpass - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_memory_distiller.py :158
os.environ["OLLAMA_API_KEY"] = old - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_api.py :28
os.environ["C3_ORACLE_API_KEY"] = "mobile-test-key"
show 10 more
- secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_clients.py :198
self._prior_key = os.environ.get("C3_ORACLE_API_KEY") - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_extras.py :30
os.environ["C3_ORACLE_API_KEY"] = "mobile-extras-key" - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_jobs_ci.py :34
os.environ["C3_ORACLE_API_KEY"] = "mobile-jobs-key" - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_override_costs.py :73
self.auth = {"Authorization": "Bearer " + os.environ["C3_ORACLE_API_KEY"]} - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_override_routes.py :101
self.auth = {"Authorization": "Bearer " + os.environ["C3_ORACLE_API_KEY"]} - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_mobile_security_api.py :144
self.auth = {"Authorization": "Bearer " + os.environ["C3_ORACLE_API_KEY"]} - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_discovery_api.py :17
os.environ["C3_ORACLE_API_KEY"] = "test-secret-key" - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_local_auth.py :29
os.environ["C3_ORACLE_API_KEY"] = "test-secret-key" - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_loopback.py :232
os.environ["C3_ORACLE_API_KEY"] = "loopback-test-key" - secrets (weak) drknowhow-code-context-control-9955a79/tests/test_oracle_security_fixes.py :24
os.environ["C3_ORACLE_API_KEY"] = "test-secret-key"
database 3
- db drknowhow-code-context-control-9955a79/services/index_store.py :33
import sqlite3 - db drknowhow-code-context-control-9955a79/services/lexical_index.py :27
import sqlite3 - db (weak) drknowhow-code-context-control-9955a79/tests/fixtures/search_eval_repo/src/ledgerlite/storage/sqlite_store.py :2
import sqlite3
tool registrations 24
- c3_search drknowhow-code-context-control-9955a79/cli/mcp_server.py :660
- c3_session drknowhow-code-context-control-9955a79/cli/mcp_server.py :694
- c3_memory drknowhow-code-context-control-9955a79/cli/mcp_server.py :711
- c3_read drknowhow-code-context-control-9955a79/cli/mcp_server.py :748
- c3_validate drknowhow-code-context-control-9955a79/cli/mcp_server.py :777
- c3_filter drknowhow-code-context-control-9955a79/cli/mcp_server.py :792
- c3_status drknowhow-code-context-control-9955a79/cli/mcp_server.py :811
- c3_delegate drknowhow-code-context-control-9955a79/cli/mcp_server.py :824
- c3_agent drknowhow-code-context-control-9955a79/cli/mcp_server.py :863
- c3_edit drknowhow-code-context-control-9955a79/cli/mcp_server.py :887
- c3_edits drknowhow-code-context-control-9955a79/cli/mcp_server.py :912
- c3_locks drknowhow-code-context-control-9955a79/cli/mcp_server.py :937
show 12 more
- c3_ci drknowhow-code-context-control-9955a79/cli/mcp_server.py :955
- c3_override drknowhow-code-context-control-9955a79/cli/mcp_server.py :1007
- c3_impact drknowhow-code-context-control-9955a79/cli/mcp_server.py :1031
- c3_shell drknowhow-code-context-control-9955a79/cli/mcp_server.py :1045
- c3_shell_job drknowhow-code-context-control-9955a79/cli/mcp_server.py :1096
- c3_bitbucket drknowhow-code-context-control-9955a79/cli/mcp_server.py :1132
- c3_jira drknowhow-code-context-control-9955a79/cli/mcp_server.py :1194
- c3_credentials drknowhow-code-context-control-9955a79/cli/mcp_server.py :1271
- c3_project drknowhow-code-context-control-9955a79/cli/mcp_server.py :1338
- c3_task drknowhow-code-context-control-9955a79/cli/mcp_server.py :1407
- c3_artifacts drknowhow-code-context-control-9955a79/cli/mcp_server.py :1464
- tool drknowhow-code-context-control-9955a79/oracle/mcp_oracle.py :76
declared dependencies 31
- fastmcp@>=2.0.0
- tiktoken@>=0.7.0
- tomlkit@>=0.13.2
- watchdog@>=4.0.0
- tree-sitter@>=0.22.0
- tree-sitter-python@>=0.21.0
- tree-sitter-javascript@>=0.21.0
- tree-sitter-typescript@>=0.21.0
- tree-sitter-html@>=0.21.0
- tree-sitter-markdown@>=0.3.2
- tree-sitter-css@>=0.21.0
- tree-sitter-go@>=0.21.0
show 19 more
- tree-sitter-rust@>=0.21.0
- tree-sitter-json@>=0.21.0
- tree-sitter-yaml@>=0.6.0
- flask@>=3.0.0
- rich@>=13.0.0
- click@>=8.0.0
- pyyaml@>=6.0.0
- keyring@>=24.0
- scikit-learn@>=1.3.0
- numpy@>=1.24.0
- chromadb@>=0.4.24
- flashrank@>=0.2.10
- textual@>=0.50.0
- sentry-sdk@>=2.0.0
- pytest@>=7.0.0
- pyright@>=1.1.350
- ruff@>=0.6.0
- build@>=1.0.0
- twine@>=5.0.0