{"_id":"fossel","_rev":"11-7e53c21761de0c9a61b65bcb93afcc61","name":"fossel","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"fossel","version":"1.0.0","_id":"fossel@1.0.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"3c99ae0606f49e70f02ac9c7bd56ad78a1fd76e8","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.0.tgz","fileCount":4,"integrity":"sha512-nb59lO0G5rb19EVIofTFMeAS1vNr3pqvScJ86hcKf78kfchnxq/pR1FHqdoeCPiDGJwUPo3m9sG2atv8ekG2vQ==","signatures":[{"sig":"MEUCIAJ3QdLkS8aESCcGzoZREPH1HiBZf68ohNo0Xz3iiIhrAiEA08C3pnaZjPvmjB0ODbQjMZYggZuLHn4FIeSpEyiNo0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14902},"type":"module","gitHead":"873998e43558831caebd0703aa3d96cd2daadeb9","scripts":{"dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.9.4","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.0_1777241752244_0.8521889178431383","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"fossel","version":"1.0.1","_id":"fossel@1.0.1","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"ead9085aaa424e4699ec20c55f12a4a6fa05c9d3","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.1.tgz","fileCount":4,"integrity":"sha512-/jA9I+oMGZhvg2i2f5s0/BFYEOuZaT+T7A2vVi+xA8lRAPKz9dB/KIPk4u7xFOVZI3c4ehxpWEpZLR1FNqUI7Q==","signatures":[{"sig":"MEUCIQC5tvoOfWaNtAPiRfbsn4yI/DNhTXgmobhtPERfLOTFbQIgYbBSFXzrTUwuvnXectAhe0Sg4O2ezX+jIhLs9trF26A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14902},"type":"module","gitHead":"2ca6ce45354b4fee32b4b81512d25abff210f9ee","scripts":{"dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.9.4","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.1_1777280310167_0.5121217064182302","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"fossel","version":"1.0.6","_id":"fossel@1.0.6","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"a54ce09a314116f784db3867356b89ecc1321c2e","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.6.tgz","fileCount":4,"integrity":"sha512-H3yP+g3lyQus1Y2cxAqUvrkPScEpvbbmkn98nP8hOgGGWjcGVhsRgGHAeoHRkfoBbENG3JG25Z8wJcncGG5MZA==","signatures":[{"sig":"MEQCIGPnxI+D+Neftn4rvDEREMYwMRCb7UbURzBX2Gwus2lqAiBg/GaW1JAM0zRICbrIt7aKqyTqrmsC3hleslJhy4i3PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14979},"type":"module","gitHead":"a7fe9b19f9c4c1f17810cb7fcc9da496cfa92569","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.8.2","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.6_1777282851963_0.704975807643385","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"fossel","version":"1.0.8","_id":"fossel@1.0.8","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"57722f69474113517432facb5ac2ca1f0d85ac07","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.8.tgz","fileCount":5,"integrity":"sha512-UDGRR75bW/E1O4FIWoVAcnsYrbgEZduO0/psR3fVtUWc/WfbXuJZVzUcDumedJBschWmRL3V6bSYN1TECW5SRA==","signatures":[{"sig":"MEUCIQCDBU+sPtR1RpWV6Ms6AeDBhFERdL0nWe/+OMv8dRVfRgIgLIZN6OkYc6PPSeeryxNbatQtMACOitt8faOYwQhhfqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57179},"type":"module","gitHead":"f6cf90282beda9da44fabbd6bcc7fc97c466f10c","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.8.2","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.8_1777671086946_0.9876330617786255","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"fossel","version":"1.0.9","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.0.9","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"2ebc04ad0290784070c7c9cb1226a9c0eab4961c","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.9.tgz","fileCount":5,"integrity":"sha512-/K0gj64IxEXAHS1rCa2U3rJqBwACD0lq+0HzGoRlT9S6cULCkEmafeL5k9olwUbi54O2E+/6JPwdybaWDyOcZA==","signatures":[{"sig":"MEUCIQC4t4AQalzLs/8QovCHS4akMilGvPgAyVAn6bB+DVAqCAIgHwkOWKftwBPRMchrcxdLjOWEQj+KvitrMHsfQkh9P1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58457},"type":"module","gitHead":"5161cb0c887fa2acaa27c6ef3325cfbc72ca8980","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.9_1777932200103_0.3495548934777528","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"fossel","version":"1.1.0","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.1.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"ba9192f3ca3557d90032100f929e811148427dbf","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.1.0.tgz","fileCount":5,"integrity":"sha512-Jaw96UxQwcZFnywnXMkdp1WujThWBc087/qkXcTO2h1VX9ZsUw2RPb3E7nAlKnTxUNAJRJbwYkmYAa/Z7QlUMQ==","signatures":[{"sig":"MEQCIA+R+6hz8/pHUdDLqQB/H6PmAQTAlxOWvHmyYs5BW/sdAiBcy4mAIGUu54syp65yME+DMZx6DknCoi3UYQOMFYhwag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140782},"type":"module","gitHead":"832d1fdbeb96d47c3875555d096364592b5dd38b","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.1.0_1779872698602_0.7203429225965656","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"fossel","version":"1.1.1","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.1.1","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"c704cff8564d2a8fed39da9c8074e911912f064b","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.1.1.tgz","fileCount":5,"integrity":"sha512-xTWlskRYCnlu8jCduYI2ynnNQKhnt7OGAGhpugb9yEJxTe+f/1NZV0TDAAd5eqkTDUVaKGjpYy5NqBDim0B06g==","signatures":[{"sig":"MEQCIBpWNrhuz9KvVtcQJXDiFmHHvL8n47lUuWi35BiNxssaAiBPyjlbua68A7dRNtIofOF8Ybt3nN6n04lsJIBUGItzXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155834},"type":"module","gitHead":"1d5caa58741970cb37870979a9754ba8633a535c","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.1.1_1779880757044_0.8838575518761935","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"fossel","version":"1.2.0","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.2.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"10792775ce6644825054401721e39cec9b4a2a4d","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.2.0.tgz","fileCount":5,"integrity":"sha512-zIQv4kHqecVm386irNUR3aT03++MZq0k8pLdeIdJN73YOKT/1VR4G0YG2tKtZ8fysAvJSqFb+V/eQCVMapE02A==","signatures":[{"sig":"MEQCIFlh47LOu4ao3u3pLwBpvq7syTHSuADC4CnFid+56I5cAiBUw70SSla2saWZ1pDXERLc7o2BkmOa8ZDfhAFX2QYzNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170990},"type":"module","gitHead":"f693dc8f631b60408455b3b2354db03d909351bb","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.2.0_1782338989229_0.5726879879898013","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"fossel","version":"1.2.1","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","semantic-search","embeddings","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.2.1","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"289937832fa6562a2746dc5f70b585d64d4230b6","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.2.1.tgz","fileCount":5,"integrity":"sha512-VPjpoO4q4C3LaL3bhc1DocNXV2M6HpJFv51Kh6oUswgpXJmE3pp9tSTGY8l1Sse2sKAAyG99fEEbgakNSX5CHA==","signatures":[{"sig":"MEQCIDRAzAW9YAT8jAgnilMz8a8ZaHajSv85whU+PO6IFA5FAiAS3B/rtfhP1q0cInyvPSxEwJSU0ykvJjXMDNID8t631Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171056},"type":"module","gitHead":"a6e47fb3e47bbbe70f247c9c006abd67e9fc712e","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite with hybrid keyword + semantic search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.2.1_1782340904343_0.06931381785475876","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"fossel","version":"1.3.0","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","semantic-search","embeddings","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.3.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"337e1a3f71385d2901153540bc1ae5384ce9e0fc","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.3.0.tgz","fileCount":5,"integrity":"sha512-yQuU1CYvBrW49pVJaSD0+2RmXj7SRIoN14uVOaZobzc185YmiWGVy+zkBGywHtB0ocm9Bl2zqCZRCKRDsr+GzQ==","signatures":[{"sig":"MEYCIQCRk3ZPrz90gCdIHThyyOCpEgSY7a8JwsuxJY7nxy4wtgIhAPn9TfCX7EJt8paWnumBPTbEnAExCPcCAVaB0VFAJ+G1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177661},"type":"module","gitHead":"9bd14e9995f95b10c95c4db407c72c9b56a64117","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite with hybrid keyword + semantic search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.3.0_1782479405415_0.2507897928847369","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"fossel","version":"1.4.0","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite with hybrid keyword + semantic search, pins, PR summaries. No cloud.","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","semantic-search","embeddings","open-source","contributors","local-first","ai","llm"],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"repository":{"type":"git","url":"git+https://github.com/7vignesh/fossel.git"},"type":"module","bin":{"fossel":"dist/cli.js"},"scripts":{"build":"tsup","dev":"tsx src/index.ts","start":"node dist/index.js","smoke":"tsx scripts/smoke.ts","test":"tsx --test tests/*.test.ts","typecheck":"tsc --noEmit","ci":"npm run typecheck && npm run test && npm run build && npm run smoke"},"dependencies":{"@modelcontextprotocol/sdk":"latest","better-sqlite3":"latest","nanoid":"latest","zod":"latest"},"devDependencies":{"@types/better-sqlite3":"latest","@types/node":"latest","tsup":"latest","tsx":"latest","typescript":"latest"},"_id":"fossel@1.4.0","gitHead":"948761f1e5dd61a764a8ec174118806d20c24702","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-5gEiAGn66CWokVOo298+pZfPaIGLqmNtPbpfi4bMxNq2uRAylTtrDZlysC8cMdjR2kXV8q5AKqPwM7r6FdyizA==","shasum":"bb6f6e34d9684a20c2e15296cd8c4c0fef96afc1","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.4.0.tgz","fileCount":5,"unpackedSize":191215,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDueudMBZI+ALFMcpaeTsxF0RvrtynesbAIINugrbQTxQIhAObUgWDJS2A4TtK4yYICAzeUH3U88sijKcvGtfDpmVLM"}]},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"directories":{},"maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fossel_1.4.0_1782480589732_0.480772566444005"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-26T22:15:52.243Z","modified":"2026-06-26T13:29:49.966Z","1.0.0":"2026-04-26T22:15:52.381Z","1.0.1":"2026-04-27T08:58:30.309Z","1.0.6":"2026-04-27T09:40:52.119Z","1.0.8":"2026-05-01T21:31:27.110Z","1.0.9":"2026-05-04T22:03:20.290Z","1.1.0":"2026-05-27T09:04:58.733Z","1.1.1":"2026-05-27T11:19:17.209Z","1.2.0":"2026-06-24T22:09:49.371Z","1.2.1":"2026-06-24T22:41:44.497Z","1.3.0":"2026-06-26T13:10:05.579Z","1.4.0":"2026-06-26T13:29:49.867Z"},"bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"homepage":"https://github.com/7vignesh/fossel#readme","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","semantic-search","embeddings","open-source","contributors","local-first","ai","llm"],"repository":{"type":"git","url":"git+https://github.com/7vignesh/fossel.git"},"description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite with hybrid keyword + semantic search, pins, PR summaries. No cloud.","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"readme":"# Fossel\n\n**Local-first MCP memory for every repo you work on.** Store conventions, bug fixes, reviewer patterns, and decisions in **SQLite on your machine** (with FTS5 search). Works with **Cursor**, **Claude Desktop**, and any **stdio MCP** client. **No accounts, no cloud.**\n\n---\n\n## Quick start (~2 minutes)\n\n1. **Onboard** (prints copy-paste MCP config + creates a sample memory):\n\n   ```bash\n   npx -y fossel init\n   ```\n\n2. **Add the JSON** from the output to **Cursor** (`~/.cursor/mcp.json`) or **Claude Desktop** MCP settings, then restart the app.\n\n3. **Run the server** (what the IDE launches; you can also run it manually for testing):\n\n   ```bash\n   npx -y fossel\n   ```\n\n4. In chat, say:\n\n   ```\n   remember: [anything about this repo]\n   ```\n\n   Then ask:\n\n   ```\n   what does Fossel remember about [topic]?\n   ```\n\n5. **Verify it works** — paste this in your AI chat:\n\n   ```\n   remember: Fossel is working in this repo\n   ```\n\n   Then immediately ask:\n\n   ```\n   what does Fossel remember?\n   ```\n\n   You should see your memory returned.\n\n**Database path:** `~/.fossel/memory.db` (override with `FOSSEL_DB_PATH`).\n\n---\n\n## Why Fossel?\n\n| You get | Details |\n|--------|---------|\n| **Local data** | SQLite + migrations; nothing leaves your disk unless you share it. |\n| **Repo-scoped memory** | One canonical key per repo; aliases collapse automatically. |\n| **Find anything** | FTS5 search across notes; pin what matters; summarize for PRs. |\n| **Ambient capture** | Natural-language `remember`; dedupes near-duplicates on save. |\n| **Conflict review** | Flags related memories on save so the agent can reconcile contradictions. |\n| **Evolving schema** | Startup migrations keep upgrades safe for existing databases. |\n\n---\n\n## Simple mode (recommended)\n\nTwo tools cover the 80% case. Neither needs you to specify `type` or `tags`.\n\n### `remember` — save a memory\n\nJust send a sentence. Fossel infers the memory type, generates tags, resolves the repo, and merges near-duplicates into the existing row.\n\n> **You:** Remember: JWT lives in localStorage and 401 redirects to /login.\n>\n> **Agent calls** `remember({ note: \"JWT lives in localStorage and 401 redirects to /login.\" })`\n>\n> **Fossel:** Stored as `convention` with tags `jwt, auth, login` for `7vignesh/fossel`.\n\n### `get_context` — pull repo context\n\nPinned first, then recent, then FTS matches if you pass a `query`. Default limit of 8 is tuned for LLM context injection.\n\n> **You:** What does Fossel remember about auth here?\n>\n> **Agent calls** `get_context({ query: \"auth\" })`\n>\n> **Fossel:** returns a markdown block ready to drop into the system prompt.\n\nThat's it for daily use. The repo is detected from your `cwd` automatically.\n\n### Conflict review on save\n\nWhen you save a note that *relates to but does not duplicate* an existing\nmemory, `remember` appends a short notice listing the related memories — and\nflags ones that look like they may be contradicted or superseded (e.g. you say\nyou *no longer* use something). The new memory is always stored; the notice is\nadvisory so your AI assistant can decide whether to revise the old memory\n(`update_memory`) or remove it (`delete_memory`).\n\n> **You:** Remember: JWT no longer lives in localStorage; we moved it to httpOnly cookies.\n>\n> **Fossel:** Stored memory 3 …\n> Related existing memories you may want to reconcile:\n> - #2 (similarity 0.50) ⚠ may contradict/supersede: JWT lives in localStorage and 401 redirects to /login.\n\nThis keeps memory from silently accumulating contradictions over time. Fossel\nstays dependency-free: it surfaces the candidates and lets the MCP client's own\nmodel make the judgment, rather than embedding an LLM in the server.\n\n### Temporal grounding\n\nRelative dates rot: \"fixed it last week\" is useless six months later. When you\nsave a note, Fossel resolves common relative-date phrases to absolute dates and\nappends them to the stored note, so the memory stays meaningful over time.\n\n> **You:** Remember: migrated the cron scheduler to a queue last week.\n>\n> **Stored as:** \"migrated the cron scheduler to a queue last week (last week = 2026-06-19)\"\n\nIt handles `yesterday`/`today`/`tomorrow`, `last`/`next week`/`month`,\n`N days/weeks/months ago`, and `in N days/weeks/months`. Vague phrases\n(\"recently\", \"soon\") are left untouched rather than guessed at. No dependency.\n\n### High-quality fact extraction (`infer`)\n\nFor the best memories, have your AI assistant extract a single clean,\nself-contained fact (resolving pronouns and vague references) before calling\n`remember`, and pass an explicit `type`/`tags` with `infer: false` to store it\nverbatim:\n\n```json\n{ \"note\": \"Build artifacts are uploaded to the releases bucket.\", \"type\": \"convention\", \"tags\": [\"build\", \"release\"], \"infer\": false }\n```\n\nThis delegates extraction to the LLM the client already has — getting\nhigh-quality, atomic facts without adding an LLM dependency to Fossel. Omit\n`infer` (the default) to let Fossel's built-in heuristics infer type and tags.\n\n### Zero-prompt usage in Cursor\n\nFossel exposes a static MCP resource at `fossel://context/current-repo`. Cursor and Claude Desktop list resources on session start, so Fossel's pinned + recent memories show up before you type anything. Clients that don't list resources can still call `get_context` from the agent's first turn — that's all the prompting needed.\n\n---\n\n## Advanced mode\n\nEvery original tool is still available for power users.\n\n| Tool | Purpose |\n|------|---------|\n| `remember` | Save a memory in natural language — auto-infers type, tags, and repo |\n| `get_context` | Retrieve relevant memories, pinned first then recent |\n| `search_memory` | FTS search across notes, optional repo filter |\n| `pin_memory` / `unpin_memory` | Pin important memories to always appear first |\n| `delete_memory` | Delete by id |\n| `update_memory` | Edit an existing memory by id |\n| `dedupe_repo` | Merge near-duplicate memories |\n| `summarize_repo_context` | Markdown summary — useful for PR descriptions |\n\n### Memory types\n\n`convention`, `bug_fix`, `reviewer_pattern`, `decision`, `issue`, `general`.\n\n### Tool examples\n\n`store_context` (explicit form):\n\n```json\n{\n  \"repo\": \"7vignesh/fossel\",\n  \"type\": \"convention\",\n  \"note\": \"Use pnpm workspaces for all package scripts.\",\n  \"tags\": [\"pnpm\", \"workspaces\"]\n}\n```\n\n`pin_memory`:\n\n```json\n{ \"id\": 12 }\n```\n\n`summarize_repo_context`:\n\n```json\n{ \"repo\": \"RocketChat/Rocket.Chat\" }\n```\n\n```md\nFossel Context Summary: RocketChat/Rocket.Chat\n\n📌 Pinned\n- (12) Always run test matrix before merge.\n\nConventions\n- (3) Use feature flags for UI experiments.\n\nBug Fixes\n- (5) Fixed webhook retries by making queue idempotent.\n```\n\n`dedupe_repo` (dry run, then apply):\n\n```json\n{ \"repo\": \"7vignesh/fossel\", \"apply\": false }\n{ \"repo\": \"7vignesh/fossel\", \"apply\": true, \"threshold\": 0.85 }\n```\n\n---\n\n## Repo identity\n\nFossel resolves the canonical key for your workspace in this order:\n\n1. `git remote get-url origin` → normalized to `owner/repo`\n2. folder basename\n3. anything you pass explicitly is recorded as an alias of the above\n\nMemories saved under any alias are reachable from the canonical key, and `npx fossel init` automatically merges legacy alias rows (e.g. `studentmanager` → `7vignesh/student-manager`).\n\n---\n\n## Commands\n\n```bash\nnpx -y fossel          # MCP server over stdio\nnpx -y fossel init     # onboarding + canonical key + safe alias merge\nnpx -y fossel doctor   # diagnose repo sprawl, duplicates, MCP config\n```\n\n### `fossel init`\n\nDetects the canonical repo key, prints **Cursor** and **Claude Desktop** MCP snippets, merges legacy alias rows into the canonical key, and inserts a starter memory only when the database is empty.\n\n### `fossel doctor`\n\nReports on:\n\n- canonical repo key for the workspace\n- sibling keys that look like the same repo (offers a fix)\n- exact-duplicate memory clusters (suggests `fossel doctor --fix` or `dedupe_repo`)\n- memory notes that still mention deprecated repo keys\n- detected MCP config files\n\nPass `--fix` to apply safe automated cleanup in one go: merge sibling repo keys, rewrite stale alias mentions, and remove exact-text duplicates. Without `--fix` it's read-only and exits non-zero on issues so it can run in CI.\n\n---\n\n## Cursor MCP config\n\n`~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"fossel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"fossel\"],\n      \"env\": {\n        \"FOSSEL_WORKSPACE\": \"${workspaceFolder}\"\n      }\n    }\n  }\n}\n```\n\n## Claude Desktop MCP config\n\n```json\n{\n  \"mcpServers\": {\n    \"fossel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"fossel\"],\n      \"env\": {\n        \"FOSSEL_WORKSPACE\": \"/path/to/your/project\"\n      }\n    }\n  }\n}\n```\n\n`FOSSEL_WORKSPACE` pins Fossel to your project root. Without it, the server falls back to `process.cwd()`, which is occasionally wrong — Cursor and Claude Desktop sometimes spawn MCP servers from your home directory, which would silently route memories to the wrong repo. Cursor expands `${workspaceFolder}` automatically; Claude Desktop needs an absolute path.\n\n---\n\n## Development (from source)\n\n```bash\nnpm install\nnpm run dev          # MCP server over stdio\nnpm run typecheck\nnpm test             # unit tests (node:test via tsx)\nnpm run smoke        # end-to-end MCP roundtrip\nnpm run build\nnpm run start        # node dist/index.js\nnpm run ci           # typecheck + tests + build + smoke\n```\n\n## Notes\n\n- **Local-first:** data stays on your machine.\n- **Search:** FTS5 keyword search by default. Optional **hybrid semantic search**\n  via `FOSSEL_EMBEDDINGS=1` (see below).\n- **`FOSSEL_DB_PATH`:** optional override for DB location (e.g. tests).\n- **Schema:** migrations live in `src/db/migrate.ts`; reference shape in `src/db/schema.sql`.\n\n## Hybrid semantic search (optional)\n\nBy default Fossel retrieves memories with FTS5 keyword search. Keyword search\nmisses paraphrases — a query like \"how does authentication work?\" won't match a\nnote that says \"JWT lives in localStorage\" because they share no words.\n\nSet `FOSSEL_EMBEDDINGS=1` to enable **hybrid retrieval**: a local, dependency-free\nembedding is computed for every memory and fused with the keyword results\n(Reciprocal Rank Fusion). This adds semantic recall while keeping FTS5's exact-\nmatch precision for identifiers, file paths, and ticket numbers.\n\n```json\n{\n  \"mcpServers\": {\n    \"fossel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"fossel\"],\n      \"env\": {\n        \"FOSSEL_WORKSPACE\": \"${workspaceFolder}\",\n        \"FOSSEL_EMBEDDINGS\": \"1\"\n      }\n    }\n  }\n}\n```\n\nProperties:\n\n- **Zero install weight / fully offline.** The embedding is a deterministic\n  feature-hashing of token unigrams and bigrams — no model download, no native\n  dependency, no network. It runs instantly and keeps the local-first promise.\n- **Opt-in.** With the flag unset, Fossel behaves exactly as before: no vectors\n  are written and retrieval is FTS-only.\n- **Self-healing index.** Memories created before enabling the flag are embedded\n  on demand the first time the repo is searched.\n- **Pluggable.** `embedText` in `src/lib/embeddings.ts` is the single entry\n  point, so a stronger embedder (transformers.js, ONNX, or a remote model) can\n  be swapped in later without touching callers. Bump `EMBEDDING_VERSION` to\n  trigger automatic re-indexing of stale vectors.\n\nVectors are stored in a `memory_embeddings` side table keyed by memory rowid and\ncleaned up via trigger when a memory is deleted.\n\n### Plugging in a stronger embedder (optional)\n\nThe built-in hashed embedder catches lexical and n-gram overlap but not pure\nsynonyms. For higher-quality semantic recall, point `FOSSEL_EMBEDDER_CMD` at a\ncommand that reads the text to embed on **stdin** and prints a **JSON array of\nnumbers** (the vector) on **stdout**:\n\n```json\n{\n  \"env\": {\n    \"FOSSEL_EMBEDDINGS\": \"1\",\n    \"FOSSEL_EMBEDDER_CMD\": \"node /path/to/my-embedder.js\"\n  }\n}\n```\n\nProperties:\n\n- **You own the model.** Fossel stays dependency-free; the embedder is your\n  script (a transformers.js/ONNX runner, a local model server CLI, etc.).\n- **Isolated vectors.** External vectors are tagged with a distinct version so\n  they never get compared against the built-in hashed vectors. Switching\n  embedders re-indexes automatically on next search.\n- **Graceful degradation.** If the command fails, times out, or returns invalid\n  output, Fossel falls back to the built-in embedder so a write is never lost.\n\n## Community\n\nIf Fossel saves you time, **[star the repo](https://github.com/7vignesh/fossel)** and **[open an issue](https://github.com/7vignesh/fossel/issues)** for bugs or ideas — that helps others discover it too.\n","readmeFilename":"README.md"}