Local-first personal knowledge management and agent memory for MCP-aware coding agents
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 9 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
get_mail_thread
-
get_memories
-
get_project_context
-
propose_memory
-
record_context_feedback
-
retrieve_context
-
search_knowledge
-
search_mail
-
write_agent_session
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 4257979 · analyzer v33 · 2w ago
skills & prompt files 4
- skill peterwang998-pkm-brain-4257979/claude-marketplace/plugins/pkm-brain-memory/skills/brain-memory/SKILL.md
- skill peterwang998-pkm-brain-4257979/claude-marketplace/plugins/teachme/skills/teachme/SKILL.md
- skill peterwang998-pkm-brain-4257979/skills/brain-memory/SKILL.md
- skill peterwang998-pkm-brain-4257979/skills/teachme/SKILL.md
danger signals8
- over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/src/pkm_brain/google_routes.py :15
"https://mail.google.com/mail/u/" - over-broad OAuth scope gmail.modify peterwang998-pkm-brain-4257979/tests/test_google_api.py :169
"https://www.googleapis.com/auth/gmail.modify" - over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/tests/test_google_sources.py :898
"https://mail.google.com/mail/u/peter@example.com/#all/abc%2F123" - over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/tests/test_mcp_mail.py :232
assert result["results"][0]["gmail_url"].startswith("https://mail.google.com/") - over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/tests/test_operational_briefing.py :266
"https://mail.google.com/" - over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/tests/test_operational_today.py :48
"provider_route": "https://mail.google.com/mail/u/0/#all/thread-1", - over-broad OAuth scope gmail.modify peterwang998-pkm-brain-4257979/tests/test_shadow_setup.py :182
"https://www.googleapis.com/auth/gmail.modify" - over-broad OAuth scope https://mail.google.com/ peterwang998-pkm-brain-4257979/tests/test_shadow_trial.py :381
"https://mail.google.com/"
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 407
filesystem 245
- fs (weak) peterwang998-pkm-brain-4257979/app/Tests/Fixtures/fake_brain_daemon.py :9
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_gmail_temporal_frontier.py :18
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_gmail_temporal_holdout.py :25
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_gmail_temporal_public_gold.py :29
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_gmail_temporal_runner.py :17
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_gmail_temporal_shadow_canary.py :32
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/audit_v12_runtime.py :10
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/author_gmail_temporal_retrieval_queries.py :26
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_fact_parity_cohort.py :25
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_candidate_run_manifest.py :20
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_holdout.py :18
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_public_challenge_v3.py :23
from pathlib import Path
show 28 more
- fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_public_scale_fixture.py :17
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_retrieval_source_authority.py :24
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_synthetic_benchmark.py :9
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/diagnose_gmail_temporal_event_identity.py :11
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_fact_parity.py :25
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_temporal_candidate_ensemble.py :21
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_temporal_candidate_gold.py :11
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_temporal_retrieval_holdout.py :39
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_temporal_synthetic_benchmark.py :6
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/export_gmail_fact_parity_admissions.py :29
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/finalize_gmail_temporal_holdout_labels.py :19
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/freeze_gmail_temporal_development_baseline.py :27
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/gmail_brain_benchmark.py :22
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/gmail_fact_parity_production_adapter.py :17
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/prepare_gmail_fact_parity_evaluation.py :19
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/prepare_gmail_temporal_holdout_candidate_gold.py :21
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_fact_parity.py :30
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_temporal_holdout_external.py :38
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_temporal_public_challenge.py :30
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_temporal_retrieval.py :21
import shutil - fs (weak) peterwang998-pkm-brain-4257979/scripts/score_gmail_temporal_holdout.py :25
from pathlib import Path - fs (weak) peterwang998-pkm-brain-4257979/scripts/smoke_gmail_temporal_ledger_public.py :27
from pathlib import Path - fs peterwang998-pkm-brain-4257979/src/pkm_brain/app_migration.py :5
import shutil - fs peterwang998-pkm-brain-4257979/src/pkm_brain/automation.py :9
import shutil - fs peterwang998-pkm-brain-4257979/src/pkm_brain/capture.py :7
import shutil - fs peterwang998-pkm-brain-4257979/src/pkm_brain/cli.py :4
import shutil - fs peterwang998-pkm-brain-4257979/src/pkm_brain/connector_auth.py :16
from pathlib import Path - fs peterwang998-pkm-brain-4257979/src/pkm_brain/connectors.py :5
from pathlib import Path
205 more not shown — this panel samples each group; the count above is the real total.
shell / exec 32
- shell (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_fact_parity.py :21
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/evaluate_gmail_temporal_retrieval_holdout.py :41
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/gmail_brain_benchmark.py :26
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/gmail_fact_parity_production_adapter.py :434
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_fact_parity.py :26
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_temporal_holdout_external.py :31
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/scripts/smoke_gmail_temporal_ledger_public.py :24
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/app_migration.py :7
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/automation.py :10
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/connector_auth.py :9
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/daemon.py :10
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_archive.py :13
import subprocess
show 20 more
- shell peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_llm.py :8
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/llm.py :6
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/maintenance.py :4
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :5
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/scheduler/launchd.py :5
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/scheduler_worker.py :7
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/sync_connection.py :5
import subprocess - shell peterwang998-pkm-brain-4257979/src/pkm_brain/sync_ssh.py :3
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_app_migration.py :6
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_daemon.py :8
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_archive.py :8
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_fact_parity_production_adapter_script.py :8
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_fact_parity_script.py :8
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_contextual_lifecycle_public_script.py :5
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_event_identity_diagnostic_script.py :5
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_ledger_public_smoke_script.py :6
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_owner_audit_script.py :9
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_public_v20_script.py :5
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_retrieval_holdout_script.py :7
import subprocess - shell (weak) peterwang998-pkm-brain-4257979/tests/test_sync_ssh.py :4
import subprocess
network 15
- net (weak) peterwang998-pkm-brain-4257979/scripts/gmail_brain_benchmark.py :24
import socket - net peterwang998-pkm-brain-4257979/src/pkm_brain/connector_auth.py :18
from urllib.error import HTTPError, URLError - net peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_archive_source.py :6
import urllib.parse - net peterwang998-pkm-brain-4257979/src/pkm_brain/google_api.py :7
import urllib.error - net peterwang998-pkm-brain-4257979/src/pkm_brain/google_routes.py :4
import urllib.parse - net peterwang998-pkm-brain-4257979/src/pkm_brain/google_sources.py :5
import urllib.parse - net peterwang998-pkm-brain-4257979/src/pkm_brain/llm.py :9
import urllib.error - net peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :6
import urllib.error - net peterwang998-pkm-brain-4257979/src/pkm_brain/operational_briefing.py :8
from urllib.parse import urlencode - net peterwang998-pkm-brain-4257979/src/pkm_brain/paths.py :4
import socket - net peterwang998-pkm-brain-4257979/src/pkm_brain/ui_server.py :15
from urllib.parse import parse_qs, urlparse - net (weak) peterwang998-pkm-brain-4257979/tests/test_connectors.py :12
from urllib.parse import parse_qs, urlparse
show 3 more
- net (weak) peterwang998-pkm-brain-4257979/tests/test_google_api.py :4
import urllib.parse - net (weak) peterwang998-pkm-brain-4257979/tests/test_mcp_proxy.py :6
import urllib.error - net (weak) peterwang998-pkm-brain-4257979/tests/test_shadow_trial.py :7
from urllib.parse import parse_qs, urlsplit
secrets 2
- secrets peterwang998-pkm-brain-4257979/src/pkm_brain/llm.py :105
self.api_key = os.environ.get("OPENAI_API_KEY") - secrets (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_archive.py :197
"import getpass,sys; "
database 39
- db (weak) peterwang998-pkm-brain-4257979/scripts/audit_v12_runtime.py :8
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/scripts/author_gmail_temporal_retrieval_queries.py :27
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/scripts/build_gmail_temporal_retrieval_source_authority.py :25
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/scripts/freeze_gmail_temporal_development_baseline.py :23
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/scripts/gmail_brain_benchmark.py :23
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/scripts/run_gmail_temporal_retrieval.py :22
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/capture.py :8
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/db.py :4
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_archive.py :11
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_mirror.py :6
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/gmail_temporal_persistence.py :6
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_tools.py :7
import sqlite3
show 27 more
- db peterwang998-pkm-brain-4257979/src/pkm_brain/migrations.py :5
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/operational_db.py :4
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/operational_migrations.py :3
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/operational_shadow.py :5
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/operational_state.py :6
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/recovery.py :7
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/regeneration.py :5
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/retrieval_telemetry.py :3
import sqlite3 - db peterwang998-pkm-brain-4257979/src/pkm_brain/sync_acceptance.py :3
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_capture.py :7
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_connectors.py :6
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_core.py :4
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_cos.py :5164
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_db.py :3
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_archive.py :7
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_knowledge.py :4
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_mirror.py :4
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_persistence.py :5
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_retrieval_query_authoring_script.py :8
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_gmail_temporal_retrieval_runner_script.py :7
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_migrations.py :4
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_operational_db.py :4
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_operational_state.py :5
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_policy_reconciliation.py :5
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_recovery.py :5
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_regeneration.py :5
import sqlite3 - db (weak) peterwang998-pkm-brain-4257979/tests/test_ui_endpoints.py :5
import sqlite3
tool registrations 16
- search_knowledge peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :148
- retrieve_context peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :153
- record_context_feedback peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :177
- get_memories peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :194
- propose_memory peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :205
- write_agent_session peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :224
- get_project_context peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :243
- search_mail peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :248
- get_mail_thread peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_proxy.py :279
- search_knowledge peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :16
- retrieve_context peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :23
- record_context_feedback peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :48
show 4 more
- get_memories peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :66
- propose_memory peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :78
- write_agent_session peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :98
- get_project_context peterwang998-pkm-brain-4257979/src/pkm_brain/mcp_server.py :118
declared dependencies 8
- mcp@>=1.27.0
- cryptography@>=48.0.0
- lancedb@>=0.30.2
- pyyaml@>=6.0.3
- rich@>=15.0.0
- typer@>=0.25.1
- sentence-transformers@>=5.4.1
- github.com/swiftlang/swift-markdown@0.8.0