๐ต๏ธ Repo-Inspector helps developers and reviewers quickly understand a Python repository. It produces a concise static analysis report and โ optionally โ deeper runtime inspection output by integrating with LibInspector.
Key outcomes:
- A static Markdown report summarizing modules, APIs, and structure.
- Per-file AST summaries for quick browsing.
- Optional dynamic inspection (LibInspector) with per-target reports and a merged, deduplicated dynamic report (Markdown + optional HTML).
# Clone the repository
git clone https://github.com/MaybeBio/Repo-Inspector.git
cd Repo-Inspector
# Install in editable mode (installs dependencies & CLI tool)
pip install -e .โฏ repo-inspector --help
Usage: repo-inspector [OPTIONS] PATH
Analyze a local Python project folder statically, with optional dynamic analysis bridge.
โญโ Arguments โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ * path TEXT Path to the local folder (or git cloned repo) [required] โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ Options โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ --output -o TEXT Output Markdown file path [default: report.md] โ
โ --dynamic -d Enable dynamic analysis using LibInspector (requires installation). โ
โ --install-completion Install completion for the current shell. โ
โ --show-completion Show completion for the current shell, to copy it or customize the installation. โ
โ --help Show this message and exit. โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏWe recommend writing outputs into a dedicated directory, for example /path/PROJECT_REPORT_DIR/.
Pass the desired Markdown file path with -o; e.g. -o /path/PROJECT_REPORT_DIR/project_report.md.
Repo-Inspector will create the output directory if it does not exist and will place generated artifacts under a reports/ subfolder next to your output (you will find the main Markdown report and a reports/ folder containing AST summaries and any dynamic outputs).
Generate a static report:
repo-inspector /path/to/repo -o ./reports/project_report.mdRun dynamic inspection (requires LibInspector):
repo-inspector /path/to/repo -o ./reports/project_report.md -dWhat you get (when -d is used):
reports/INDEX.mdโ repository index and AST summariesreports/dynamic/โ per-target LibInspector reports (Markdown + HTML)reports/dynamic/<base>_merged_dynamic.mdโ merged & deduplicated dynamic report- When LibInspector is importable, HTML renderings are produced alongside the Markdown files
Dynamic analysis depends on LibInspector. Install it when you want runtime inspection:
pip install git+https://github.com/MaybeBio/LibInspector.gitor check my page for detailed installation guidance: LibInspector
If LibInspector is not installed, Repo-Inspector will still produce the static report and AST summaries.
The tool produces three primary artifacts: the top-level Markdown report (e.g. ./reports/project_report.md); the INDEX.md inside a same-named folder (e.g. ./reports/project_report/INDEX.md) containing the repo index and AST summaries; and the merged dynamic report inside that folderโs dynamic/ subfolder (e.g. ./reports/project_report/dynamic/project_report_merged_dynamic.md). The top-level report includes relative links to these files and their HTML renditions when available for quick review.
- Run the static scan to get a quick overview.
- Set "-d" parameter to run dynamic inspection for package entry-points, CLI scripts, examples or tests (these are auto-detected by Repo-Inspector). For optimal results, we strongly recommend
installing LibInspectorin advance andinstalling the target packagedirectly from the repository you intend to inspect. - Review the inspection markdown output with a focus on the three primary artifacts highlighted above (see
Output & Linkssection). Alternatively, use the generated HTML report for a more intuitive, interactive viewing experience.
โฏ repo-inspector ../TensorVis/ -d -o ./test/Tensorvis.md
๐ [Static] Scanning directory: ../TensorVis/ ...
๐ [Static] Found 5 modules.
โ
Report saved to: ./test/Tensorvis.md
๐ [Dynamic] Initiating LibInspector Bridge...
๐ [Dynamic] Building repo index and AST summaries...
๐ [Dynamic] Detecting runtime targets (entry points, scripts, CLIs)...
โถ [Dynamic] Running LibInspector on tensorvis (hint=module) -> test/Tensorvis/dynamic/Tensorvis_dynamic_1_module_tensorvis.md
๐ Target Resolution: Input='tensorvis' -> Import='tensorvis' (Type: module)
๐ Running candidate 1/1: tensorvis -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_1_module_tensorvis_candidate_1_tensorvis.md
๐ Target Resolution: Input='tensorvis' -> Import='tensorvis' (Type: module)
โ Error: Unable to import any candidate modules for target 'tensorvis'.
โถ [Dynamic] Running LibInspector on ../TensorVis/TensorVis/vis.py (hint=file) -> test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py.md
๐ Target Resolution: Input='../TensorVis/TensorVis/vis.py' -> Import='vis' (Type: file)
๐ Running candidate 1/3: TensorVis.vis -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py_candidate_1_TensorVis.vis.md
๐ Target Resolution: Input='TensorVis.vis' -> Import='TensorVis.vis' (Type: module)
โ Error: Unable to import any candidate modules for target 'TensorVis.vis'.
๐ Running candidate 2/3: vis -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py_candidate_2_vis.md
๐ Target Resolution: Input='vis' -> Import='vis' (Type: module)
โ Error: Unable to import any candidate modules for target 'vis'.
๐ Running candidate 3/3: /data2/TensorVis/TensorVis/vis.py -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py_candidate_3_vis.py.md
๐ Target Resolution: Input='/data2/TensorVis/TensorVis/vis.py' -> Import='vis' (Type: file)
๐ Analyzing dependencies for 'TensorVis.vis' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py_candidate_3_vis.py.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_2_file_.._TensorVis_TensorVis_vis.py_candidate_3_vis.py.html
(Open the HTML file in your browser to see rendered charts)
โถ [Dynamic] Running LibInspector on ../TensorVis/TensorVis/cli.py (hint=file) -> test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py.md
๐ Target Resolution: Input='../TensorVis/TensorVis/cli.py' -> Import='cli' (Type: file)
๐ Running candidate 1/3: TensorVis.cli -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_1_TensorVis.cli.md
๐ Target Resolution: Input='TensorVis.cli' -> Import='TensorVis.cli' (Type: module)
๐ Analyzing dependencies for 'TensorVis.cli' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_1_TensorVis.cli.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_1_TensorVis.cli.html
(Open the HTML file in your browser to see rendered charts)
๐ Running candidate 2/3: cli -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_2_cli.md
๐ Target Resolution: Input='cli' -> Import='cli' (Type: module)
โ Error: Unable to import any candidate modules for target 'cli'.
๐ Running candidate 3/3: /data2/TensorVis/TensorVis/cli.py -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_3_cli.py.md
๐ Target Resolution: Input='/data2/TensorVis/TensorVis/cli.py' -> Import='cli' (Type: file)
๐ Analyzing dependencies for 'TensorVis.cli' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_3_cli.py.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_3_file_.._TensorVis_TensorVis_cli.py_candidate_3_cli.py.html
(Open the HTML file in your browser to see rendered charts)
โถ [Dynamic] Running LibInspector on ../TensorVis/TensorVis/op_viz.py (hint=file) -> test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py.md
๐ Target Resolution: Input='../TensorVis/TensorVis/op_viz.py' -> Import='op_viz' (Type: file)
๐ Running candidate 1/3: TensorVis.op_viz -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_1_TensorVis.op_viz.md
๐ Target Resolution: Input='TensorVis.op_viz' -> Import='TensorVis.op_viz' (Type: module)
๐ Analyzing dependencies for 'TensorVis.op_viz' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_1_TensorVis.op_viz.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_1_TensorVis.op_viz.html
(Open the HTML file in your browser to see rendered charts)
๐ Running candidate 2/3: op_viz -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_2_op_viz.md
๐ Target Resolution: Input='op_viz' -> Import='op_viz' (Type: module)
๐ Analyzing dependencies for 'op_viz' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_2_op_viz.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_2_op_viz.html
(Open the HTML file in your browser to see rendered charts)
๐ Running candidate 3/3: /data2/TensorVis/TensorVis/op_viz.py -> output=./test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_3_op_viz.py.md
๐ Target Resolution: Input='/data2/TensorVis/TensorVis/op_viz.py' -> Import='op_viz' (Type: file)
๐ Analyzing dependencies for 'TensorVis.op_viz' (Network Analysis Phase)...
โ
Markdown report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_3_op_viz.py.md
๐ Interactive HTML report saved to: /data2/Repo-Inspector/test/Tensorvis/dynamic/Tensorvis_dynamic_4_file_.._TensorVis_TensorVis_op_viz.py_candidate_3_op_viz.py.html
(Open the HTML file in your browser to see rendered charts)
๐ [Dynamic] Merging and deduplicating dynamic reports...
โ
Merged dynamic reports -> test/Tensorvis/dynamic/Tensorvis_merged_dynamic.md (6 files included)
โ
Rendered HTML index -> test/Tensorvis/INDEX.html
โ
Rendered merged dynamic HTML -> test/Tensorvis/dynamic/Tensorvis_merged_dynamic.html
โ
Rendered main static HTML -> test/Tensorvis.htmlyou can check the result in Test case for Tensorvis repo
- LibInspector: https://github.com/MaybeBio/LibInspector
- For LLM support, DeepWiKi is also a good choice