{"_id":"@brotzi/signpost","_rev":"2-795077654da999396e88e263a021e389","name":"@brotzi/signpost","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@brotzi/signpost","version":"0.1.0","keywords":["claude","claude-code","agents","agents.md","claude.md","docs","graph","markdown","cli"],"author":{"name":"Asier Gilaber"},"license":"MIT","_id":"@brotzi/signpost@0.1.0","maintainers":[{"name":"brotzi","email":"asiergg60@gmail.com"}],"homepage":"https://github.com/bipo38/signpost#readme","bugs":{"url":"https://github.com/bipo38/signpost/issues"},"bin":{"signpost":"bin/signpost.mjs"},"dist":{"shasum":"66406b8449af6edc85d073ce8cb2ce4343b8652e","tarball":"https://registry.npmjs.org/@brotzi/signpost/-/signpost-0.1.0.tgz","fileCount":10,"integrity":"sha512-YoeMv/C+P/K4AHPn+NkprHRRFZeCglo/0r5IK38irqHD8n180aS1232pv5boUQekp7FMDmZaTnfdszbBYOmwag==","signatures":[{"sig":"MEUCIQC3+V8kFOsAQkS3ro8ki2QGi+E6ayoCCubG8GglTl28YAIgdvM3K3xUC1n++ubyG7ZXb5/CgynzdrsuEzPdYId9zuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348420},"type":"module","engines":{"node":">=20"},"gitHead":"0d3f6c6fd9a05c24a68b1f3db92ca1014483865c","scripts":{"dev":"vite","test":"node --test server/*.test.mjs src/*.test.ts","build":"vue-tsc --noEmit && vite build","dev:api":"node bin/signpost.mjs --root ../olaaaaaaa/comsart --no-open","prepare":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"brotzi","email":"asiergg60@gmail.com"},"repository":{"url":"git+https://github.com/bipo38/signpost.git","type":"git"},"_npmVersion":"11.6.2","description":"Graph of the context-pointer docs behind CLAUDE.md / AGENTS.md, with a form to add new docs already wired in","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.42","vite":"^8.2.2","marked":"^18.0.11","vue-tsc":"^3.3.11","typescript":"^5.9.3","@types/node":"^26.5.0","tailwindcss":"^4.3.3","@vueuse/core":"^14.4.0","@vue-flow/core":"^1.48.2","tw-animate-css":"^1.4.0","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-vue":"^6.0.8","@vue-flow/controls":"^1.1.3","@vue-flow/background":"^1.3.2"},"_npmOperationalInternal":{"tmp":"tmp/signpost_0.1.0_1788820539697_0.2878271600192259","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@brotzi/signpost","version":"0.2.0","description":"Graph of the context-pointer docs behind CLAUDE.md / AGENTS.md, with a form to add new docs already wired in","type":"module","license":"MIT","bin":{"signpost":"bin/signpost.mjs"},"engines":{"node":">=20"},"scripts":{"dev":"vite","dev:api":"node bin/signpost.mjs --root example --no-open","build":"vue-tsc --noEmit && vite build","test":"node --test server/*.test.mjs src/*.test.ts","prepare":"vue-tsc --noEmit && vite build"},"devDependencies":{"@tailwindcss/vite":"^4.3.3","@types/node":"^26.5.0","@vitejs/plugin-vue":"^6.0.8","@vue-flow/background":"^1.3.2","@vue-flow/controls":"^1.1.3","@vue-flow/core":"^1.48.2","@vueuse/core":"^14.4.0","marked":"^18.0.11","tailwindcss":"^4.3.3","tw-animate-css":"^1.4.0","typescript":"^5.9.3","vite":"^8.2.2","vue":"^3.5.42","vue-tsc":"^3.3.11"},"repository":{"type":"git","url":"git+https://github.com/bipo38/signpost.git"},"keywords":["claude","claude-code","agents","agents.md","claude.md","docs","graph","markdown","cli"],"author":{"name":"Asier Gilaber"},"homepage":"https://github.com/bipo38/signpost#readme","bugs":{"url":"https://github.com/bipo38/signpost/issues"},"publishConfig":{"access":"public"},"gitHead":"c41dc4c65ca5d71e319482b75821c2df27d78b83","_id":"@brotzi/signpost@0.2.0","_nodeVersion":"24.16.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-bdE2REraqhMO4KSapsxWWWFw9NXm5HxS23J58+iDuCnMyM/I3w3L2agb1f3Zd0kHyjLtiFo9yTRn4b2IDDFtxA==","shasum":"fd8d2fa691b1969e9d5844fbc40e4374be552284","tarball":"https://registry.npmjs.org/@brotzi/signpost/-/signpost-0.2.0.tgz","fileCount":10,"unpackedSize":362371,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYTqeGW+G9FMj/fX027rQhlCS5UYj1/5wnugpfXywg/wIgWLRKaX+SKpzT+wkCkYls6q0iVGZqGNtFUUbMAHo+uxY="}]},"_npmUser":{"name":"brotzi","email":"asiergg60@gmail.com"},"directories":{},"maintainers":[{"name":"brotzi","email":"asiergg60@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signpost_0.2.0_1788827412678_0.7016848951500507"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-07T22:35:39.513Z","modified":"2026-09-08T00:30:12.964Z","0.1.0":"2026-09-07T22:35:39.851Z","0.2.0":"2026-09-08T00:30:12.798Z"},"bugs":{"url":"https://github.com/bipo38/signpost/issues"},"author":{"name":"Asier Gilaber"},"license":"MIT","homepage":"https://github.com/bipo38/signpost#readme","keywords":["claude","claude-code","agents","agents.md","claude.md","docs","graph","markdown","cli"],"repository":{"type":"git","url":"git+https://github.com/bipo38/signpost.git"},"description":"Graph of the context-pointer docs behind CLAUDE.md / AGENTS.md, with a form to add new docs already wired in","maintainers":[{"name":"brotzi","email":"asiergg60@gmail.com"}],"readme":"# Signpost\n\nVisualize the context-pointer docs behind a `CLAUDE.md` / `AGENTS.md` file as a graph, and add new docs already wired into it.\n\n![Signpost in light mode showing a docs graph with plan.md selected](docs/screenshot.jpg)\n\nLanding page and live demo: https://bipo38.github.io/signpost/\n\nAgent instruction files tend to grow into a web of small markdown docs that point at each other: \"for a bug, open `docs/plan.md`; when testing, open `docs/testing/ui.md`; after planning, return to the caller\". Signpost draws that web, lets you read every doc in place, and adds new ones with the table rows and back-links already written.\n\n- Framework agnostic. It only reads markdown, so it works in any repo.\n- Zero runtime dependencies. One Node process, UI prebuilt. Requires Node 20+.\n- Local only. The server binds to `127.0.0.1` and never leaves your machine.\n\n## Install\n\n```sh\nnpx @brotzi/signpost            # one-off, from the repo root\n```\n\nOr add it to a project and give it a script:\n\n```sh\npnpm add -D @brotzi/signpost    # or npm i -D / yarn add -D\n```\n\n```json\n\"scripts\": { \"docs:graph\": \"signpost\" }\n```\n\nRequires Node 20 or newer. Nothing else: the UI ships prebuilt and the server has no dependencies.\n\n## Run\n\n```sh\nsignpost                      # scans ./CLAUDE.md and ./docs, opens http://localhost:4747\nsignpost --root ../other --docs documentation --port 5000 --no-open\nsignpost --help\n```\n\n| Flag | Default | Meaning |\n|------|---------|---------|\n| `--root` | cwd | Repo to scan. Files are read and written relative to it. |\n| `--docs` | `docs` | Folder whose `*.md` files become nodes. `guide/` and `node_modules/` are skipped. |\n| `--port` | `4747` | Port on localhost. |\n| `--no-open` | | Do not open the browser. |\n\n## What it reads\n\n- **Entry.** `CLAUDE.md`, else `AGENTS.md`, in `--root`.\n- **Nodes.** The entry file, every `*.md` under `--docs`, and any other markdown file they reference (for example a `PRODUCT.md` at the root).\n- **Edges.** Backticked paths like `` `docs/plan.md` `` and markdown links like `[ui](testing/ui.md)`, resolved from the root and then from the referencing file's folder. An arrow goes from the doc that references to the doc it references. A number on an edge is the reference count.\n\nNothing is written until you press **create doc**.\n\n## Using the graph\n\n- **Read.** Click a card to render the doc on the right, under a small diagram of what points at it and what it points to. Every dot and name there, and every backticked path in the text, jumps to that card.\n- **Arrange.** Cards are ranked left to right by link distance from the entry doc, clustered by folder, and tinted per folder. Drag them freely. **reorder** puts them back and refits the view. **rescan** re-reads the files after you edit them outside the tool.\n- **Dense graphs.** Above 250 links, edges are drawn only for the hovered or selected doc, so a few hundred docs stay readable and load instantly.\n- **Panel.** The icon at the far right of the header hides or shows the side panel. Selecting a card or pressing **new doc** opens it again.\n- **Theme.** **light** / **dark** follows your system by default and remembers your choice in the browser.\n\n## Creating a doc\n\n**new doc** opens a form. Every field maps to a concrete edit:\n\n| Field | What happens |\n|-------|--------------|\n| **path** | Where the file goes, relative to the root. Must be `folder/name.md`, no `..`. Defaults to `<docs>/<uploaded name>` when you drop a file. |\n| **situation** | Becomes a row in the entry file's first table: `` | situation | `path` | ``. |\n| **link from** | Collapsed list with a filter. The entry file gets that table row. Any other parent gets a `See also \\`path\\` — situation.` line appended. |\n| **links to** | Appended to the new doc as `Related: \\`a\\`, \\`b\\`.` so its outgoing edges show up immediately. |\n| **return row** | Offered for any doc with a `| Came from | Return to |` table. Adds a row above the `Any other doc` fallback, or at the end of the table. |\n| **body** | Paste, drop a `.md`, or upload. Empty means a template naming the caller and the plan-mode pointer. |\n\nOnly docs already in the graph can be picked as parents, links, or return tables. Existing files are never overwritten.\n\n## Develop\n\n```sh\ngit clone https://github.com/bipo38/signpost.git && cd signpost\npnpm install          # also builds dist/\npnpm dev:api          # API on :4747 against example/, a tiny repo with a CLAUDE.md and a few docs\npnpm dev              # Vite UI on :5173, proxies /api\n# or point the built tool at any repo: node bin/signpost.mjs --root ../your-repo\npnpm test             # node:test on server/graph.mjs\npnpm build            # dist/ served by the bin\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}