Show HN: Jev powered knowledge graph search CLI TypeSafe released jev-graph-search 0.2.2, a CLI that lets an AI agent retrieve and rank notes from local Obsidian vaults and Logseq Markdown graphs, with an optional JSON snapshot. On an 8,851-node tax-code graph, Jev reranking raised top-five source recall from 63.9% to 81.8%. The tool requires Node.js 20+ and npm, runs with no runtime dependencies, and ships an agent skill that does not configure API keys or read user files. Jev Graph Search helps an AI agent find useful notes and passages in a local Obsidian vault or a folder of Logseq Markdown notes. It makes a shortlist on your machine, then uses Jev to rank those candidates against your question. The result includes the original passage and source reference, so the agent can point back to the note it used. Run it from the terminal or install the agent skill. An optional JSON snapshot is supported as well. See Jev https://docs.typesafe.ai/introduction for the ranking service. Get started get-started · Obsidian and Logseq obsidian-and-logseq · Agent skill agent-skill · Documentation documentation On one 8,851-node tax-code graph, Jev reranking raised top-five source recall from 63.9% to 81.8% . You need Node.js 20+ and npm. Git is needed for the example checkout and skill installation. The CLI has no runtime dependencies. Run the exact npm release: npx --yes --package=jev-graph-search@0.2.2 jev-graph-search setup At setup, use ↑/↓ and Enter to choose TypeSafe or OpenRouter, then paste your API key into the hidden prompt. Your key is saved in a private per-user configuration file, outside the graph. Search a directory of Markdown files or an optional JSON graph snapshot https://github.com/Emlembow/jev-graph-search/blob/main/docs/schema.md : npx --yes --package=jev-graph-search@0.2.2 jev-graph-search search "Why did we choose this database?" --input ./ObsidianVault For a persistent jev-graph-search command: npm install --global jev-graph-search@0.2.2 jev-graph-search --help The release workflow publishes exact package versions with npm trusted publishing and provenance. Pin the package version in automation so upgrades are deliberate. Try the included example without a key git clone --branch v0.2.2 --depth 1 https://github.com/Emlembow/jev-graph-search.git cd jev-graph-search node bin/jev-graph-search.js search "Why PostgreSQL?" --input examples/memory.json --offline node bin/jev-graph-search.js audit --input examples/memory.json --offline uses local lexical ranking. Remove it after setup to use Jev. npx skills add Emlembow/jev-graph-search --skill jev-graph-search The skill https://github.com/Emlembow/jev-graph-search/blob/main/skills/jev-graph-search/SKILL.md tells an agent how to retrieve evidence from local Markdown graphs or JSON snapshots, inspect links, and suggest where to save a new note. It invokes the CLI above. Installing the skill does not configure API keys or read your files. With the CLI installed, try these operations: Retrieve source passages from an Obsidian vault jev-graph-search search "What did we decide?" --input ./ObsidianVault Propose where a new memory belongs jev-graph-search place "We chose PostgreSQL for transactions" --input ./ObsidianVault Audit explicit structure; add --semantic for Jev suggestions jev-graph-search audit --input ./ObsidianVault Follow existing links in an optional JSON snapshot without a provider key jev-graph-search traverse --input snapshot.json --from PAGE A --to PAGE B Search starts with keyword matches and a limited set of linked notes, then sends selected titles, bounded aliases, and content excerpts to Jev for reranking. Results retain the exact source evidence. place and migration commands propose changes without writing to your graph. Use jev-graph-search --help for all commands. Set --input to a local Markdown directory. Obsidian vaults are read recursively, including nested folders. Logseq graphs are supported through their Markdown pages/ and journals/ files; database and Org-mode formats are outside this interface. Hidden paths and symbolic links are skipped. Reading the graph does not create a backup or export. Common page metadata works in either graph style: --- aliases: Database decision, PostgreSQL decision tags: architecture, storage --- Database decision Related - Transactions See also Migration notes ../projects/migration-notes.md Top-level YAML aliases and tags lists, plus unindented Logseq alias:: and tags:: page-property lines, are indexed as page-level metadata. Indented block-property lines remain page content. Wikilinks and relative Markdown links become explicit graph evidence. Obsidian jev-graph-search search "database decision" --input ./ObsidianVault --offline Logseq Markdown graph jev-graph-search audit --input ./logseq-graph --offline - Interactive setup: jev-graph-search setup . - Environment setup: export TYPESAFE API KEY or OPENROUTER API KEY , then run jev-graph-search setup --from-env to persist it. - Diagnostics: jev-graph-search config and jev-graph-search doctor show redacted configuration. - Cache: semantic scores are cached; --no-cache requests fresh scores. - Local search: --offline explicitly selects lexical ranking. Keys are never accepted as command-line arguments. Saved credentials use a 0600 file inside a 0700 directory. Storage and provider options → https://github.com/Emlembow/jev-graph-search/blob/main/docs/setup.md Jev ranks only the shortlist it receives. It cannot recover missing candidates or show that the available evidence is sufficient. Model suggestions are not links that already exist in the graph, and a partial snapshot stays partial. The current default may still return results when the question has no answer in the graph. MIT https://github.com/Emlembow/jev-graph-search/blob/main/LICENSE © 2026 Emlembow.