github Python analyzed d7908e6

lodsb/prax

github

Self-hosted personal knowledge base: bring in what you read, collect and write — papers, manuals, web pages, chats — then search it, ask it, see how it connects, and let your tools and agents work from it. Web UI, browser extension, CLI, MCP

maintainer
lodsb
licence
MIT
first seen
2026-09-13
last seen
2026-09-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 16 tools
transport stdio · http counts 16 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • append_page
  • ask
  • capture_url
  • context
  • documents
  • get
  • get_chunk
  • get_page
  • ingest
  • ingest_file
  • link
  • promote
  • search
  • set_domains
  • traverse
  • write_page
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit d7908e6 · analyzer v33 · 3h ago

skills & prompt files 2

danger signals3

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

code files: 145

filesystem 76

  • fs (weak) lodsb-prax-d7908e6/clients/claude-plugin/scripts/sync.py :20 from pathlib import Path
  • fs lodsb-prax-d7908e6/clients/cli/prax_cli/importing.py :10 from pathlib import Path
  • fs lodsb-prax-d7908e6/clients/cli/prax_cli/library.py :11 from pathlib import Path
  • fs lodsb-prax-d7908e6/clients/cli/prax_cli/out.py :8 import shutil
  • fs lodsb-prax-d7908e6/clients/cli/prax_cli/running.py :11 from pathlib import Path
  • fs lodsb-prax-d7908e6/clients/cli/prax_cli/up.py :7 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/backfill.py :12 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/bench_extractor.py :22 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/build_extension.py :20 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/compare_extractors.py :24 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/eval_ask.py :41 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/eval_retrieval.py :19 from pathlib import Path
show 28 more
  • fs (weak) lodsb-prax-d7908e6/scripts/fetch_model.py :18 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/make_zotero_fixture.py :20 import shutil
  • fs (weak) lodsb-prax-d7908e6/scripts/resolve_entities.py :19 from pathlib import Path
  • fs (weak) lodsb-prax-d7908e6/scripts/work.py :25 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/api.py :16 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/autostart.py :19 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/client.py :12 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/config.py :23 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/evaluation.py :25 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/fetch.py :16 import shutil
  • fs lodsb-prax-d7908e6/src/prax/hostinfo.py :13 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/importers/chats.py :34 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/importers/claude.py :28 from pathlib import Path, PurePosixPath, PureWindowsPath
  • fs lodsb-prax-d7908e6/src/prax/importers/links.py :36 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/importers/project.py :32 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/importers/zotero.py :29 import shutil
  • fs lodsb-prax-d7908e6/src/prax/inbox.py :31 import shutil
  • fs lodsb-prax-d7908e6/src/prax/mcp_server.py :16 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/models.py :46 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/ontology.py :40 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/parsers/__init__.py :59 import shutil
  • fs lodsb-prax-d7908e6/src/prax/parsers/figures.py :334 with pymupdf.open(stream=data, filetype="pdf") as doc:
  • fs lodsb-prax-d7908e6/src/prax/pipeline.py :172 with pymupdf.open(str(path)) as pdf:
  • fs lodsb-prax-d7908e6/src/prax/store/backup.py :29 import shutil
  • fs lodsb-prax-d7908e6/src/prax/store/base.py :20 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/store/retrieval.py :14 from pathlib import Path
  • fs lodsb-prax-d7908e6/src/prax/up.py :37 import shutil
  • fs lodsb-prax-d7908e6/src/prax/vectors.py :25 from pathlib import Path

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

shell / exec 8

  • shell (weak) lodsb-prax-d7908e6/clients/claude-plugin/scripts/sync.py :18 import subprocess
  • shell lodsb-prax-d7908e6/src/prax/autostart.py :17 import subprocess
  • shell lodsb-prax-d7908e6/src/prax/parsers/__init__.py :1147 import subprocess
  • shell lodsb-prax-d7908e6/src/prax/up.py :39 import subprocess
  • shell (weak) lodsb-prax-d7908e6/tests/test_cli.py :8 import subprocess
  • shell (weak) lodsb-prax-d7908e6/tests/test_mcp.py :8 import subprocess
  • shell (weak) lodsb-prax-d7908e6/tests/test_ui_js.py :9 import subprocess
  • shell (weak) lodsb-prax-d7908e6/tests/test_up_failures.py :9 import subprocess

network 16

  • net lodsb-prax-d7908e6/clients/cli/prax_cli/main.py :17 import httpx
  • net lodsb-prax-d7908e6/src/prax/api.py :12 import socket
  • net lodsb-prax-d7908e6/src/prax/client.py :11 import socket
  • net lodsb-prax-d7908e6/src/prax/fetch.py :17 import urllib.error
  • net lodsb-prax-d7908e6/src/prax/importers/citations.py :33 import urllib.error
  • net lodsb-prax-d7908e6/src/prax/importers/github.py :23 import urllib.error
  • net lodsb-prax-d7908e6/src/prax/inbox.py :34 import urllib.error
  • net lodsb-prax-d7908e6/src/prax/mcp_server.py :19 import httpx
  • net lodsb-prax-d7908e6/src/prax/models.py :42 import urllib.error
  • net lodsb-prax-d7908e6/src/prax/parsers/__init__.py :494 import httpx
  • net lodsb-prax-d7908e6/src/prax/pipeline.py :24 import socket
  • net lodsb-prax-d7908e6/src/prax/rerank.py :29 import urllib.request
show 4 more
  • net lodsb-prax-d7908e6/src/prax/store/jobs.py :44 import socket
  • net lodsb-prax-d7908e6/src/prax/up.py :43 import urllib.error
  • net (weak) lodsb-prax-d7908e6/tests/test_citations.py :9 from urllib.parse import unquote
  • net (weak) lodsb-prax-d7908e6/tests/test_models.py :253 import urllib.error

secrets 7

  • secrets lodsb-prax-d7908e6/clients/cli/prax_cli/main.py :68 default=os.environ.get("PRAX_TOKEN") or None,
  • secrets lodsb-prax-d7908e6/clients/cli/prax_cli/running.py :687 bool(os.environ.get("ANTHROPIC_API_KEY")),
  • secrets (weak) lodsb-prax-d7908e6/scripts/eval_ask.py :360 door = Door(a.door, token=os.environ.get("PRAX_TOKEN") or None, name="eval-ask")
  • secrets (weak) lodsb-prax-d7908e6/scripts/work.py :37 ap.add_argument("--token", default=os.environ.get("PRAX_TOKEN") or None)
  • secrets lodsb-prax-d7908e6/src/prax/auth.py :36 value = os.environ.get("PRAX_TOKEN", "").strip()
  • secrets lodsb-prax-d7908e6/src/prax/fetch.py :86 token = os.environ.get("HF_TOKEN")
  • secrets lodsb-prax-d7908e6/src/prax/mcp_server.py :42 token=token if token is not None else os.environ.get("PRAX_TOKEN"),

database 57

  • db (weak) lodsb-prax-d7908e6/scripts/make_zotero_fixture.py :21 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/ask.py :32 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/evaluation.py :22 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/extraction.py :25 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/importers/citations.py :30 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/importers/zotero.py :30 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/inbox.py :32 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/parsers/queue.py :23 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/pipeline.py :25 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/resolution.py :25 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/review.py :21 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/__init__.py :31 import sqlite3 # noqa: F401 - callers type against store.sqlite3
show 28 more
  • db lodsb-prax-d7908e6/src/prax/store/backup.py :30 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/base.py :16 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/documents.py :15 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/graph.py :12 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/jobs.py :10 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/maintain.py :28 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/pages.py :13 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/repair.py :30 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/retrieval.py :13 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/store/summary.py :10 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/surf.py :37 import sqlite3
  • db lodsb-prax-d7908e6/src/prax/work.py :39 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_acronyms.py :5 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_ask.py :6 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_chunking.py :5 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_citations.py :7 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_delta_index.py :6 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_domains.py :7 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_door_jobs.py :7 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_embeddings.py :10 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_eval.py :8 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_extraction.py :7 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_figures.py :8 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_formulas.py :7 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_glyphs.py :6 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_heal.py :6 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_inbox.py :9 import sqlite3
  • db (weak) lodsb-prax-d7908e6/tests/test_indexes.py :5 import sqlite3

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

tool registrations 16

  • search lodsb-prax-d7908e6/src/prax/mcp_server.py :69
  • get_chunk lodsb-prax-d7908e6/src/prax/mcp_server.py :106
  • get lodsb-prax-d7908e6/src/prax/mcp_server.py :116
  • traverse lodsb-prax-d7908e6/src/prax/mcp_server.py :130
  • link lodsb-prax-d7908e6/src/prax/mcp_server.py :138
  • ask lodsb-prax-d7908e6/src/prax/mcp_server.py :169
  • set_domains lodsb-prax-d7908e6/src/prax/mcp_server.py :203
  • promote lodsb-prax-d7908e6/src/prax/mcp_server.py :216
  • context lodsb-prax-d7908e6/src/prax/mcp_server.py :237
  • documents lodsb-prax-d7908e6/src/prax/mcp_server.py :276
  • get_page lodsb-prax-d7908e6/src/prax/mcp_server.py :321
  • write_page lodsb-prax-d7908e6/src/prax/mcp_server.py :328
show 4 more
  • append_page lodsb-prax-d7908e6/src/prax/mcp_server.py :359
  • ingest lodsb-prax-d7908e6/src/prax/mcp_server.py :373
  • capture_url lodsb-prax-d7908e6/src/prax/mcp_server.py :385
  • ingest_file lodsb-prax-d7908e6/src/prax/mcp_server.py :400

declared dependencies 23

  • mcp@>=2,<3
  • fastapi@>=0.115
  • uvicorn@>=0.30
  • pydantic@>=2.7
  • python-multipart@>=0.0.9
  • pyyaml@>=6
  • anthropic@>=1
  • httpx@>=0.27
  • pymupdf4llm@*
  • rapidocr@*
  • python-bidi@>=0.6
  • trafilatura@*
show 11 more
  • magika@*
  • striprtf@*
  • pillow@*
  • docling@*
  • usearch@>=2.12
  • onnxruntime@*
  • tokenizers@*
  • numpy@*
  • prax@*
  • pytest@>=8
  • ruff@*

clipboard 1

  • clipboard shell call lodsb-prax-d7908e6/clients/cli/prax_cli/main.py :171 " pbpaste | prax add - --title 'a thought'"