Skip to main content

amagi-vaultgraph

Turn a folder of markdown notes (an Obsidian vault, a Claude Code memory folder, a Foam or Logseq export) into one 3D graph you can open in a browser, plus a list of orphan notes, broken links, and links you probably meant to write.

vaultgraph run on the sample vault

the 3D graph it writes, recorded in a browser

Install

pipx install amagi-vaultgraph

Python 3.9 or newer. No dependencies.

Usage

vaultgraph path/to/vault

That writes vaultgraph.html and prints a report. Open the HTML file in a browser. Each note is a dot, each [[wikilink]] is a line, colour shows the note's type or folder, and size shows how many links it has. Drag to rotate, scroll to zoom, click a note to fly to it, type in the search box to find one.

This repo ships a made-up vault for a small software studio in examples/sample-vault: 53 notes, with a few problems left in on purpose. Real output:

$ vaultgraph sample-vault -o graph.html --limit 5
53 notes, 77 links, 5 orphans, 3 dangling links, 10 suggested links (coloured by type, 9 groups)
wrote graph.html (1.4 MB, 3d force, offline, names only)

HUBS  most-linked notes
   16  MEMORY (Studio Memory Index)
   13  projects/tidepool-api
   11  projects/lighthouse-app
    7  projects/driftwood-cli
    6  concepts/retry-with-backoff

ORPHANS (5)  no links in or out
  concepts/semantic-versioning
  inbox/release-versioning-notes
  inbox/untitled-2
  inbox/webhook-signing-idea
  reference/regex-snippets

DANGLING LINKS (3)  [[target]] matches no note
  concepts/retry-with-backoff -> [[rate-limitting]]  did you mean "concepts/rate-limiting"?
  daily/2026-09-17 -> [[q3-roadmap]]
  projects/beacon-newsletter -> [[q3-roadmap]]

SUGGESTED LINKS (10)
  inbox/webhook-signing-idea -> concepts/webhooks  similar name (0.29)
  projects/driftwood-cli -> concepts/semantic-versioning  mentions "Semantic Versioning"
  reference/release-checklist -> concepts/semantic-versioning  mentions "Semantic Versioning"
  concepts/caching-strategy -> concepts/observability  mentions "Observability"
  concepts/webhooks -> concepts/idempotency-keys  mentions "Idempotency Keys"
  ... 5 more (full list: --report FILE)

Orphans have no links in or out. A dangling link points at a note that doesn't exist; if a note name is close, you get a "did you mean".

Suggested links come from names alone. mentions means the source note's text contains the target's title, file name, or alias, but the two notes aren't linked. similar name means an orphan shares uncommon words with another note's name. Suggestions that would connect an orphan come first.

Nothing here uses an LLM or the network. The suggestions are plain string matching, so treat them as leads and check each one before you add the link.

What the HTML file contains

The HTML file holds note names, folder paths, link counts, and colour groups. It does not hold any note text, so you can post a screenshot or send the file to someone without sending your notes. The report and the JSON export name notes too, and never quote them.

If you want hover previews for your own use, --with-excerpts adds the first ~280 characters of each note to the tooltips. It prints a warning when you do, because that file then contains your writing.

The graph library (3d-force-graph) is inlined by default, so the page works offline and makes no network requests. --cdn loads it from jsDelivr instead, pinned with a subresource integrity hash. For the sample vault that makes the file 15 KB instead of 1.4 MB.

Layered view

vaultgraph sample-vault -o layered.html --layered

--layered puts each colour group in its own labelled column, biggest group on the left, best-connected notes at the top. Use it when you want to see how projects link to decisions, or which folder links into which.

layered view of the sample vault

Colours

--color-by auto (the default) picks the first that fits:

  1. type: the frontmatter type: field, or metadata: type: as Claude Code memory files write it. Used when at least half the notes have one.
  2. folder: the top-level folder.
  3. prefix: the file-name prefix, such as project_ or feedback_. Useful for a flat folder like a Claude Code memory directory.

You can also pick one yourself, or use tag to colour by the first frontmatter tag.

vaultgraph docs/ --check --no-html -q

Exit code 1 means orphans or dangling links were found. 0 means clean. 2 means a usage error, such as a folder with no notes in it.

All options

vaultgraph VAULT [-o FILE] [--layered] [--color-by auto|type|folder|prefix|tag]
                 [--offline | --cdn] [--title TEXT] [--spin] [--with-excerpts]
                 [--exclude GLOB ...] [--report FILE] [--json FILE] [--no-html]
                 [--check] [--limit N] [-q] [--version]
  • --report FILE writes the full report as markdown, with no row limit.
  • --json FILE writes the graph and report as JSON, names only.
  • --exclude GLOB skips files or folders (repeatable), for example --exclude templates --exclude "*.excalidraw.md". Dot-folders such as .obsidian, .git, and .trash are always skipped.
  • --spin slowly orbits the camera after the layout settles, which is handy for screen recordings. Press space in the page to toggle it, and h to hide the panels.
  • amagi-vaultgraph is an alias for vaultgraph.
  • [[Note]], [[Note|shown text]], [[Note#Heading]], [[Note^block]], [[folder/Note]], and ![[Note]] embeds. Embeds of images, PDFs, and other files are skipped.
  • Relative markdown links to .md files, such as [text](../other.md).
  • A link matches a note by path, file name, frontmatter title or name, or an alias. Matching ignores case and treats spaces, hyphens, and underscores as the same, so [[rate limiting]] finds rate-limiting.md. When two notes share a name, the one closest to the linking note wins, as in Obsidian.
  • Links inside code blocks and inline code are ignored.

Use it from Claude Code

This repo ships a skill at .claude/skills/amagi-vaultgraph/SKILL.md. Copy that folder into your own .claude/skills/ and Claude Code can map your memory folder, read the JSON report, and fix broken links with you.

Limits

  • Only .md and .markdown files are read.
  • The frontmatter reader covers what notes usually contain: plain values, lists, and one nested level. It is not a full YAML parser.
  • Logseq block references ((uuid)), #tags, and Dataview queries do not become edges.
  • Suggestions match names, not meaning. A note about "billing" won't be matched to one called "invoices".
  • The HTML needs a browser with WebGL. A synthetic 2,000-note vault took about 2 seconds to process, and its graph rendered fine in headless Chromium.

If this saved you time

A star helps other people find it.

More from AmagiLabs

github.com/amagilabs has the other small open source dev tools from the same lab.

License

MIT, see LICENSE. Copyright (c) 2026 Amagisolutionsgroup, Inc. (AmagiLabs)

The vendored 3d-force-graph build (MIT) and the libraries it bundles are listed in THIRD_PARTY_NOTICES.md. The default offline HTML output includes that build, so those notices apply to the files it writes too.

Metadata

Release files for amagi-vaultgraph 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for amagi-vaultgraph 0.1.0
File Size Uploaded Provenance
amagi_vaultgraph-0.1.0.tar.gz 397.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for amagi-vaultgraph 0.1.0
File Interpreter ABI Platform
amagi_vaultgraph-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 788.4 kB

Release files / amagi_vaultgraph-0.1.0.tar.gz

Download URL amagi_vaultgraph-0.1.0.tar.gz
Size 397.0 kB
Tags Source
SHA-256 checksum
How to use checksums
bfd4fda21c41f0431ad388e98c9ff48876bc3e43223d916aa205e92409da52d0
BLAKE2b-256 checksum
How to use checksums
f3ee33691586e66038ef255348de6d13ce062f8f474ba6232e5a79ab6e94f034
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Release files / amagi_vaultgraph-0.1.0-py3-none-any.whl

Download URL amagi_vaultgraph-0.1.0-py3-none-any.whl
Size 391.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2cacf4c4e6757ce9e66b52cc117bb8d33bfaa7229c8ca069fe748adcc13b1336
BLAKE2b-256 checksum
How to use checksums
9bea32adbfca3e1e8a6a7e8b6c0ed7dff47f9e5cd91f51f9d3cc721ab499fa1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Security for amagi-vaultgraph 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for amagi_vaultgraph-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page