GNOSEM
Launch

Introducing projmap — where your code lives, so every AI you use can find it

A companion CLI that walks your filesystem, discovers project roots, and writes them to Gnosem as searchable memories. Backed by gnosem; usable from any MCP client.

By CUETV LLC · · 5-minute read

If you use more than one AI assistant, you've discovered a small friction that adds up: every fresh session, every switch between clients, none of them know where your code lives. Claude asks you to point at the repo. Cursor opens whatever project happens to be in view. ChatGPT starts from a blank page. A file named CLAUDE.md at the root of your workspace can prime Claude sessions with paths, but that document doesn't cross into ChatGPT or Cursor or Kimi.

projmap is a small companion CLI to Gnosem that fixes this. It walks your filesystem, discovers your project roots by looking for standard signals, and writes one memory per project to your Gnosem account tagged project-path. Because Gnosem is already the cross-vendor memory layer, every MCP client you use can find the paths on the next semantic search.

Install and scan

npx @gnosem/projmap scan ~/code

projmap walks the tree looking for any of these signals at each directory: .git/, package.json, wrangler.jsonc, Cargo.toml, pyproject.toml, go.mod, CLAUDE.md. When a signal matches, that directory is treated as a project root and the walker stops descending (so monorepo sub-packages don't get double-indexed).

For each project found, projmap writes a memory to Gnosem like:

PROJECT=calcuttacalc | PATH=/Users/zac/CueTV/projects/CalcuttaCalc.com | KIND=worker | DESCRIPTION=Calcutta scorekeeping for golf tournaments and rodeos

Tagged project-path. Compressed automatically per Gnosem's on-write compression.

The cross-vendor lookup

Once your projects are indexed, any AI you use with Gnosem installed can find them via memory_search:

Claude Desktop: "Where does calcuttacalc live?" → Claude calls memory_search("calcuttacalc") → gets back the path → offers to open it.

ChatGPT (via Custom GPT Action): Same query, same tool, same answer.

Cursor / Windsurf / Zed: Same story. The MCP tool call is identical across clients because that's what MCP is for.

Semantic search means you don't need to remember the exact project name. Queries like "the golf scoring thing" or "the react app for splitting golf trip costs" will hit the right memory because Gnosem embeds meaning, not keywords.

All commands

Auth

projmap needs a Gnosem API key. In order of precedence:

  1. GNOSEM_API_KEY env var
  2. ~/.projmap/config.json (0600 perms)
  3. Interactive prompt on first run, then persisted to the config file

The key is never logged. If you rotate keys via the Gnosem dashboard, update ~/.projmap/config.json or re-run with GNOSEM_API_KEY=… projmap ….

A few design choices worth calling out

Dedup by absolute real-path, not by name. Names collide across roots (three utils directories); paths are stable across renames.

Symlinks are never followed. The walker uses lstatSync plus a Set of realpathSync results for cycle protection.

Hard-skip list for common noise directories: node_modules, .venv, .wrangler, Library, Applications, .cache, plus anything projmap can identify as belonging to another already-captured project.

Zero runtime dependencies. Node builtins + fetch. The whole CLI is one file; you can audit it in a coffee break.

Why not a standalone database?

Two reasons projmap uses Gnosem as its backend rather than a local SQLite:

  1. Cross-vendor is free. If projmap stored paths in its own database, every AI client would need its own bridge to read them. Storing in Gnosem means every MCP client already has the reader for free.
  2. Multi-machine sync is free. If you scan projects on your laptop and later ask your desktop's AI where a project lives, the answer is already there because Gnosem's storage is hosted.

Cost: projmap writes count against your Gnosem memory quota (200 on the free tier — plenty for a personal project index). If you have 500+ projects and are on the free tier, upgrade or run projmap remove on the ones you don't care about.

Source: github.com/gnosem/gnosem/projmap. npm: @gnosem/projmap. MIT.