{"_id":"squish-memory","_rev":"20-c187a8c4efce625f9cc54ad4fef6b7a3","name":"squish-memory","dist-tags":{"latest":"1.9.0"},"versions":{"0.7.0":{"name":"squish-memory","version":"0.7.0","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.7.0","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"3f4bde9ad6076e6cda7fe3390f8aa576b4ed1fd5","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.7.0.tgz","fileCount":388,"integrity":"sha512-V4rLDXij8h7lKNNGtvpMY7rX6tf2zM09k5aUraQ35jmC6VG51poGBXaCWkKUUWfqoqu/uTFeZ6P9qohM+Ygpzw==","signatures":[{"sig":"MEQCIGlW7CtxOm2ryZ87DzlhoRk1Cl9y0AAUrhnTL8SweYs7AiAWjlISSsDhVVgJhjfiLu9OurcVPPt0fDVAoflIJwI3uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1298016},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"bcc701e5499dc8dc548652038eafc677e32fd51a","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.7.0_1769968197484_0.07719437143554075","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"squish-memory","version":"0.7.2","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.7.2","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"89c3cd910543254ce9f24ad47816881008dbf0ca","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.7.2.tgz","fileCount":388,"integrity":"sha512-o26RRnDD1sm+1MQFAtMaEkgt9Fa5vT+hIR4WlIhT57EMhTSBh4hc7UA8QEDQfnYkScrZtEhP6XzuBrxrtEGb2Q==","signatures":[{"sig":"MEUCICT8pCPVGpA8jdZZQ0JJRxSdVCQON84QBBQ9eADCCQnXAiEA0Es/gFHlsm6aZqSrUNSwWPJzLvrPaeXkjs9dqRAMKcs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1272497},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2b2eb99f54a83a52f189557b568ced38a81052b3","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","postinstall":"node dist/scripts/init-dirs.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.7.2_1769971943035_0.847626067156269","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"squish-memory","version":"0.7.3","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.7.3","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"c384be895831a92705b191c73619138774e88e01","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.7.3.tgz","fileCount":388,"integrity":"sha512-zGXooCf/mfVcufVilHUM1nC1GGXsIbL0TCPhiN0lW1Q2Nhe0175WJiRKpxWdfhTgYOx/ZmTD0Y2oaN3h3+ad7A==","signatures":[{"sig":"MEQCIAqgzfXt54DX28fsSmgOKD0yxWJBDGfrCzYchcyQpHgIAiAjHJkAaHT7588WCAHJGvPfNVR7mLFp6cvxWhcj+DVuqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1273333},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"62d2c9892579f40e12c498233a79116c5e976a03","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","postinstall":"node dist/scripts/init-dirs.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.7.3_1769973517264_0.21549765179423508","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"squish-memory","version":"0.8.0","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.8.0","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"b4219f153129f9da02e36cfea7091b3f8880aa9b","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.8.0.tgz","fileCount":400,"integrity":"sha512-UFADhlrRm+UCFDU2XnC4v69wGM5gwmzr6LsN8bIoiOaR13hC38sGhN+ckMwzceXk4IEPpbGXj+x6O+uqv4BqOA==","signatures":[{"sig":"MEQCIDcFCi1BHZ8t93YXouu/XZNumSHyfFjMZ4qWyD7eXwwOAiBy0cdNTKnvT3ZZwHXuSJwSHaQNkw/ro15rDW9VyCJvGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1365339},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"62d2c9892579f40e12c498233a79116c5e976a03","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","postinstall":"node dist/scripts/init-dirs.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.8.0_1769975269977_0.4322881496370561","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"squish-memory","version":"0.8.1","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.8.1","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"8ac55878a7971ac726d1f16321660697479f0836","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.8.1.tgz","fileCount":400,"integrity":"sha512-m7NNnjUF/1GFfSx/kJwIa+ZdEDuL3p6glO1jQDSQGXTnhhGoNO5qqH4HHoNo/qJWI1df74RalftqNHO0L7MU7g==","signatures":[{"sig":"MEUCIQCOQiT7eaGy6+4dGBeTnpHzAc58iTgZgh2q+DVZy7f4sgIgaHtNXZtHWF+xU0QkeH9cdbHLiJAfcZDspkr0bXHJdmc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1365570},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"62d2c9892579f40e12c498233a79116c5e976a03","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","postinstall":"node dist/scripts/init-dirs.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.8.1_1769977427500_0.5880641622251617","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"squish-memory","version":"0.8.2","keywords":["claude","claude-code","claude-plugin","mcp-server","model-context-protocol","memory","persistent-memory","core-memory","context-management","semantic-search","openclaw","local-first","privacy","ai-assistant","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.8.2","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-install":"npx-installer.js"},"dist":{"shasum":"97a468eeeb62606402a6fdf25501b7490cf3a71c","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.8.2.tgz","fileCount":400,"integrity":"sha512-SRvsPVcWANUlDTmVRMrRkHFlOYqFP3oM5EoRZyigCDbGbg/XMwXB9C+EQVCl4OetOz1kkP6OLdbiFxWeMCjbow==","signatures":[{"sig":"MEUCIDh2aNwYXx4890th8x8R86PjN6foXUaRPNfY3FCGQuY9AiEAsqmjZar4iPVhaIFMJ4ApTQw2EXkx5OJnZbw+NWl9f6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1365813},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6cdbaf24c63f364a090b792f532b031032bb2d3f","scripts":{"dev":"bun --hot src/index.ts","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","db:generate":"drizzle-kit generate","postinstall":"node dist/scripts/init-dirs.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"Persistent memory for Claude Code with OpenClaw integration, semantic search, and team sync","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.13.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"^2.8.5","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"^12.6.0","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.8.2_1769979292255_0.6324200066617423","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"squish-memory","version":"0.9.1","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.9.1","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-mcp":"dist/commands/mcp-server.cjs","squish-install":"npx-installer.js"},"dist":{"shasum":"8ab7f3f126ac43409ea249129c5f32beaf7b6b03","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.9.1.tgz","fileCount":542,"integrity":"sha512-k0+tS587JyidUJRXC0LGO0NjghcRC5bQsvSYxKs7D0thohTQa09DwAwPCEjDdtDA4II6XKOIXNYiccqPfu5E4g==","signatures":[{"sig":"MEYCIQDsrqRji1NnSbaTQzoK9U890u5oLpQcZ01gTuevH/vKfwIhALc/afTl2Cr5AHURP+WiG6yOWX7nCkEyWb4d1dWDgJ2I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1994007},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"f1f44871abffc5fdf6e21879d6596aa3f61b5dd4","scripts":{"dev":"bun --hot src/index.ts","mcp":"node dist/commands/mcp-server.cjs","web":"node dist/features/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot src/commands/mcp-server.ts","mcp:cjs":"esbuild commands/mcp-server.ts --bundle --platform=node --outfile=dist/commands/mcp-server.cjs --format=cjs --external:bun:* --external:better-sqlite3 --external:pg --external:drizzle-orm/*","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","mcp:build":"tsc commands/mcp-server.ts --outDir dist/commands --module ES2022 --moduleResolution node --esModuleInterop --target ES2022 --skipLibCheck","db:migrate":"drizzle-kit migrate","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"The universal two-tier memory layer for any AI agent - persistent, intelligent memory with QMD search tier and SQLite/Postgres storage tier that works with Claude Code, OpenClaw, and any agent framework","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"8.19.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"12.6.2","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.9.1_1773507881630_0.08602000284187938","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"squish-memory","version":"0.9.2","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.9.2","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-mcp":"dist/commands/mcp-server.cjs","squish-install":"npx-installer.js"},"dist":{"shasum":"eec5b9454197408b62cc48016f6619888df6c3a8","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.9.2.tgz","fileCount":550,"integrity":"sha512-pIJR3tEPbVnkdKpe7DZH+9J0g7JTvoZ0RUtZl387Jak6K7B31ny5/vrKCkHGpv29G9KGMie2p7+iBP+7v5woag==","signatures":[{"sig":"MEUCIGbQ/uX/BFxWSMq4JgcIHNmIGB4kjSZFCOZBhNNTOPrwAiEA9q62GbgR+K754qWsmtatpiFo1OMJ8OuaUIcTtcszNYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2009460},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"63d4dae4998a9d0d63849a172d79ad24534d0fac","scripts":{"dev":"bun --hot src/index.ts","mcp":"node dist/commands/mcp-server.cjs","web":"node dist/api/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot src/commands/mcp-server.ts","mcp:cjs":"esbuild commands/mcp-server.ts --bundle --platform=node --outfile=dist/commands/mcp-server.cjs --format=cjs --external:bun:* --external:better-sqlite3 --external:pg --external:drizzle-orm/*","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","web:bun":"bun run dist/api/web/web-server.js","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","mcp:build":"tsc commands/mcp-server.ts --outDir dist/commands --module ES2022 --moduleResolution node --esModuleInterop --target ES2022 --skipLibCheck","db:migrate":"drizzle-kit migrate","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"The universal two-tier memory layer for any AI agent - persistent, intelligent memory with QMD search tier and SQLite/Postgres storage tier that works with Claude Code, OpenClaw, and any agent framework","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"8.19.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"12.6.2","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.9.2_1773510641439_0.4842356506440575","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"squish-memory","version":"0.9.3","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@0.9.3","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-mcp":"dist/commands/mcp-server.cjs","squish-install":"npx-installer.js"},"dist":{"shasum":"4ccb49aaf1e83a979613412de5bfbcb6e5edfbb3","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-0.9.3.tgz","fileCount":551,"integrity":"sha512-ZKvYTB4cnPrNR3RwKMU0X9onlAdi0AAdZgtQyB2b8R3GD/FP4ceHsKyky0UlE3XiKr3/6GMU3+petRK9uk4h8w==","signatures":[{"sig":"MEUCIQCOwdyuD6RhVfFOwkOrMA6cgVF/IZGoF0OOUwCBsxN1tgIgIaRRVrwb+R0FAnTUDdyLIZbwEGq/l0eX+u9LkJiEyqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2035927},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"2d63fba0c0a44aecf0590736223a67b076b5f9b0","scripts":{"dev":"bun --hot src/index.ts","mcp":"node dist/commands/mcp-server.cjs","web":"node dist/api/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist && rm -f *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot src/commands/mcp-server.ts","mcp:cjs":"esbuild commands/mcp-server.ts --bundle --platform=node --outfile=dist/commands/mcp-server.cjs --format=cjs --external:bun:* --external:better-sqlite3 --external:pg --external:drizzle-orm/*","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","web:bun":"bun run dist/api/web/web-server.js","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","mcp:build":"tsc commands/mcp-server.ts --outDir dist/commands --module ES2022 --moduleResolution node --esModuleInterop --target ES2022 --skipLibCheck","db:migrate":"drizzle-kit migrate","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","check:secrets":"node scripts/check-secrets.js","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"10.9.4","description":"The universal two-tier memory layer for any AI agent - persistent, intelligent memory with QMD search tier and SQLite/Postgres storage tier that works with Claude Code, OpenClaw, and any agent framework","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"8.19.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"12.6.2","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_0.9.3_1773643768789_0.4617956313052003","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"squish-memory","version":"1.0.0","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","openclaw-plugin","claude-code-plugin","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@1.0.0","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-mcp":"dist/commands/mcp-server.js","squish-install":"npx-installer.js","squish-install-plugin":"scripts/install-plugin.mjs"},"dist":{"shasum":"ec8d72df166f4d06c6194c1c68a42a1b10dde936","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.0.0.tgz","fileCount":603,"integrity":"sha512-GaZxb7lvKokDeeaazZUo9vmm4EroGRz0AuTAyi1sqNmZBMRwFQ5P6plwASiN9gSQdB/8c9qmBAHGWmJkm79w1g==","signatures":[{"sig":"MEUCIQDjhzaayzNVLDT71pfGshkOR1ml2hk0CNzS4gKgDzdUqAIgbcKG5fmgE7XIM/fmFRyInKsda1OuK+9cItUV8hRfZAA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2277733},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"a1bb5c9f5d02e436dde33e305e95ed0da62fef6a","scripts":{"dev":"bun --hot src/index.ts","mcp":"node dist/commands/mcp-server.cjs","web":"node dist/api/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist && rm -f *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot src/commands/mcp-server.ts","mcp:cjs":"esbuild commands/mcp-server.ts --bundle --platform=node --outfile=dist/commands/mcp-server.cjs --format=cjs --external:better-sqlite3 --external:pg --external:drizzle-orm/*","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","web:bun":"bun run dist/api/web/web-server.js","bench:db":"bun benchmark/run.ts","build:mcp":"tsc commands/mcp-server.ts --outDir dist/commands --module ES2022 --moduleResolution node --esModuleInterop --target ES2022 --skipLibCheck","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","deps:check":"node scripts/dependency-manager.mjs","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","build:claude":"cp -r .claude-plugin packages/plugin-claude-code/","deps:install":"node scripts/dependency-manager.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","build:plugins":"npm run build && npm run build:claude && npm run build:openclaw","check:secrets":"node scripts/check-secrets.js","build:openclaw":"mkdir -p packages/plugin-openclaw/dist && cp -r plugins/openclaw/* packages/plugin-openclaw/ && (cd packages/plugin-openclaw && npm run build 2>/dev/null || true)","detect:clients":"node scripts/detect-clients.mjs","install:plugin":"node scripts/install-plugin.mjs","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs","test:interactive":"node scripts/test-interactive.mjs","install:interactive":"node scripts/install-interactive.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"deprecated":"Published with missing CJS build - this version is broken. Please use 1.0.1+","repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Universal plugin architecture memory system - works as plugin across Claude Code, OpenClaw, OpenCode, Codex, Cursor, VSCode, Windsurf. MCP server with CLI fallback, QMD search, and two-tier storage.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"8.19.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"12.6.2","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.0.0_1773793897906_0.6072110373837678","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"squish-memory","version":"1.0.1","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","openclaw-plugin","claude-code-plugin","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory"],"author":{"name":"michielhdoteth"},"license":"MIT","_id":"squish-memory@1.0.1","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-rm":"bin/squish-rm.mjs","squish-add":"bin/squish-add.mjs","squish-mcp":"dist/commands/mcp-server.js","squish-install":"npx-installer.js","squish-install-plugin":"scripts/install-plugin.mjs"},"dist":{"shasum":"29ac81042edcaa798ae4a3a27d9d317a82d6b0c8","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.0.1.tgz","fileCount":606,"integrity":"sha512-hLoH2m+Gu4BGck4rkPmTxnGDXs36Kg0g6yUGth5tLa9DsH9NZd/cTqVtyJI984f7+/57gGaJ/IASkcxeW2w9Tg==","signatures":[{"sig":"MEUCIGQNC4jEGw+7JBDPRpS6bv96V/PTEVqRsSwLEXhytH8+AiEA96ReSaV6AyTo2B4ZeEDyDhECK3kHF6L+3kNE4jQEqh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2274450},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"ad5d6270b59224170d77db39a38148bdb3d87fc1","scripts":{"dev":"bun --hot src/index.ts","mcp":"node dist/commands/mcp-server.js","web":"node dist/api/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist && rm -f *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot src/commands/mcp-server.ts","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","web:bun":"bun run dist/api/web/web-server.js","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","deps:check":"node scripts/dependency-manager.mjs","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","build:claude":"cp -r .claude-plugin packages/plugin-claude-code/","deps:install":"node scripts/dependency-manager.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","build:plugins":"npm run build && npm run build:claude && npm run build:openclaw","check:secrets":"node scripts/check-secrets.js","build:openclaw":"mkdir -p packages/plugin-openclaw/dist && cp -r plugins/openclaw/* packages/plugin-openclaw/ && (cd packages/plugin-openclaw && npm run build 2>/dev/null || true)","detect:clients":"node scripts/detect-clients.mjs","install:plugin":"node scripts/install-plugin.mjs","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs","test:interactive":"node scripts/test-interactive.mjs","install:interactive":"node scripts/install-interactive.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Universal plugin architecture memory system - works as plugin across Claude Code, OpenClaw, OpenCode, Codex, Cursor, VSCode, Windsurf. MCP server with CLI fallback, QMD search, and two-tier storage.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"8.19.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","uuid":"^9.0.1","redis":"^4.7.0","dotenv":"^16.4.0","sql.js":"^1.14.1","express":"^4.21.0","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","better-sqlite3":"12.6.2","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","vitest":"^4.0.17","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.0.1_1773801475610_0.9960173050964667","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"squish-memory","version":"1.0.2","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory","ai-memory","agentic","context-window","long-term-memory","rag","vector-embeddings","session-persistence"],"author":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"license":"MIT","_id":"squish-memory@1.0.2","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-rm":"bin/squish-rm.mjs","squish-add":"bin/squish-add.mjs","squish-mcp":"dist/commands/mcp-server.js","squish-install":"npx-installer.js","squish-install-plugin":"scripts/install-plugin.mjs"},"dist":{"shasum":"008174e3bc6eaf1a6c87a86a4b11c10a8783351b","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.0.2.tgz","fileCount":348,"integrity":"sha512-0F7Rn6WUQa03ykxG52pXEuBDizyh+hqLt4VfrdK2sZ0WK6XELYvPKirf0S4Q2DqC5zVg3YA1Xmw3aRygSctl7g==","signatures":[{"sig":"MEQCIAn3dI4L3AlGIudroG/xNgY/bF6kaVIYUAjYbQ+TdAA4AiBZXT4+FjQ7DRE3PNEyxiJbZZP91CcRYDEVNsGYtSuigQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1492423},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"a12e168c30260a4b8ff4877557e9c1dacbd8a1c4","scripts":{"dev":"bun --hot index.ts","mcp":"node dist/commands/mcp-server.js","web":"node dist/api/web/web-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc","clean":"rm -rf dist && rm -f *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot commands/mcp-server.ts","prepare":"npm run build","release":"./scripts/build-release.sh && ./scripts/github-release.sh","web:bun":"bun run dist/api/web/web-server.js","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","deps:check":"node scripts/dependency-manager.mjs","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","postinstall":"node scripts/init-dirs.mjs","build:claude":"cp -r .claude-plugin packages/plugin-claude-code/","deps:install":"node scripts/dependency-manager.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","build:plugins":"npm run build && npm run build:claude && npm run build:openclaw","check:secrets":"node scripts/check-secrets.js","build:openclaw":"mkdir -p packages/plugin-openclaw/dist && cp -r plugins/openclaw/* packages/plugin-openclaw/ && (cd packages/plugin-openclaw && npm run build 2>/dev/null || true)","detect:clients":"node scripts/detect-clients.mjs","install:plugin":"node scripts/install-plugin.mjs","prepublishOnly":"npm run clean && npm run build","preflight:remote":"node scripts/remote-preflight.mjs","test:interactive":"node scripts/test-interactive.mjs","install:interactive":"node scripts/install-interactive.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Two-tier memory for AI agents: QMD-based fast file search (short-term) + SQLite/Postgres (long-term). Works out-of-the-box, no setup required.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.20.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","hono":"^4.12.8","uuid":"^13.0.0","redis":"^5.11.0","dotenv":"^16.4.0","sql.js":"^1.14.1","express":"^5.2.1","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","picocolors":"^1.0.0","drizzle-orm":"^0.38.0","tree-sitter":"^0.22.0","@clack/prompts":"^0.7.0","better-sqlite3":"12.6.2","express-rate-limit":"^8.3.1","tree-sitter-python":"^0.23.0","tree-sitter-javascript":"^0.23.0","tree-sitter-typescript":"^0.23.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.0.2_1773857652509_0.6880346019370069","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"squish-memory","version":"1.1.5","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory","ai-memory","agentic","context-window","long-term-memory","rag","vector-embeddings","session-persistence"],"author":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"license":"MIT","_id":"squish-memory@1.1.5","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"dist/index.js","squish-rm":"bin/squish-rm.mjs","squish-add":"bin/squish-add.mjs","squish-mcp":"dist/core/commands/mcp-server.js"},"dist":{"shasum":"ba390ea45608862ec951d096992dea9c591f28cc","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.1.5.tgz","fileCount":429,"integrity":"sha512-kIsI/OPLryWluxvkGu1O4ZAFZxRb0O7HOlldOkMN8+ZJ05WodIixuEjQDjIRnHYxPo6wBEzzLQkLbS5uK6ApiQ==","signatures":[{"sig":"MEQCIEluO1b5sFYl1FEnNxiU7hJCWrYOoEiKNwIQvzdCwHRnAiAPgWx+plXc4pq9kNj/WldmSG+X94uduA7wEgzO9Vf5ag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2416408},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"224bfbc5b847dd04795913ab01d8284dd6983542","scripts":{"dev":"bun --hot index.ts","mcp":"node dist/core/commands/mcp-server.js","test":"node --test dist/tests/**/*.test.js","bench":"bun benchmark/memory.ts","build":"tsc && node scripts/copy-runtime-assets.mjs","clean":"rm -rf dist && rm -f *.log","start":"node dist/index.js","db:push":"drizzle-kit push","dev:mcp":"bun --hot core/commands/mcp-server.ts","install":"node scripts/install-interactive.mjs","prepare":"husky","release":"./scripts/build-release.sh && ./scripts/github-release.sh","bench:db":"bun benchmark/run.ts","db:studio":"drizzle-kit studio","db:migrate":"drizzle-kit migrate","deps:check":"node scripts/dependency-manager.mjs","verify:mcp":"node scripts/verify-mcp.mjs","db:generate":"drizzle-kit generate","dev:db:init":"node scripts/init-db.mjs","postinstall":"node scripts/init-dirs.mjs","deps:install":"node scripts/dependency-manager.mjs","dev:db:check":"node scripts/check-db.mjs","fallback:dry":"node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run","check:secrets":"node scripts/check-secrets.js","detect:clients":"node scripts/detect-clients.mjs","prepublishOnly":"npm run clean && npm run build","dev:db:recreate":"node scripts/recreate-db.mjs","preflight:remote":"node scripts/remote-preflight.mjs","test:interactive":"node scripts/test-interactive.mjs"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Two-tier memory for AI agents: QMD-based fast file search (short-term) + SQLite/Postgres (long-term). Works out-of-the-box, no setup required.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.20.0","ws":"^8.18.0","zod":"^3.24.0","bull":"^4.16.0","cors":"2.8.6","hono":"^4.12.8","uuid":"^13.0.0","redis":"^5.11.0","dotenv":"^16.4.0","sql.js":"^1.14.1","express":"^5.2.1","pgvector":"^0.2.0","commander":"^12.0.0","node-cron":"^3.0.0","picocolors":"^1.0.0","drizzle-orm":"^0.38.0","@clack/prompts":"^0.7.0","better-sqlite3":"12.6.2","express-rate-limit":"^8.3.1","@neondatabase/serverless":"^1.0.2","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","@types/pg":"^8.11.10","@types/ws":"^8.5.13","typescript":"^5.7.0","@types/cors":"^2.8.17","@types/node":"^22.0.0","drizzle-kit":"^0.30.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.1.5_1776054155414_0.4781838494035928","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"squish-memory","version":"1.2.0","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory","ai-memory","agentic","context-window","long-term-memory","rag","vector-embeddings","session-persistence"],"author":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"license":"MIT","_id":"squish-memory@1.2.0","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"bin/squish.mjs","squish-mcp":"bin/squish-mcp.mjs"},"dist":{"shasum":"df39135749e00e7b1f66208ebe913c8b16036aaf","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.2.0.tgz","fileCount":690,"integrity":"sha512-P9wxzVa3WwTpR7QEl1i4/XqkvIHtYApedph8JrIiUK+u/Znt9ySJOlte998mwCSmvhHtlp1bvmwRcdNVXFKifg==","signatures":[{"sig":"MEYCIQDF4Daj+CkStpOQ/Vls5cLG0IZFrwyVeZdnnD0OaUFeGwIhAIBbuFx5+Xtr8oktWPTWj4WARCtDIQlSeTbGh7qVfGnT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3261463},"main":"core/index.ts","type":"module","engines":{"bun":">=1.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"gitHead":"c0169ae78e695a25b5245d3622f925b20efbcda4","scripts":{"dev":"bun --hot core/index.ts 2>/dev/null || npx tsx --watch core/index.ts","mcp":"bun run packages/mcp/src/index.ts 2>/dev/null || npx tsx packages/mcp/src/index.ts","test":"bun test ./tests/ 2>/dev/null || npx vitest","bench":"bun benchmark/memory.ts 2>/dev/null || npx tsx --cwd . benchmark/memory.ts","build":"echo 'No build needed - runs TypeScript directly with bun. Use bun run start or bun run mcp instead.'","clean":"rm -rf dist && rm -f *.log","start":"bun run core/index.ts 2>/dev/null || npx tsx core/index.ts","dev:mcp":"bun --hot packages/mcp/src/index.ts 2>/dev/null || npx tsx --watch packages/mcp/src/index.ts","bench:db":"bun benchmark/run.ts 2>/dev/null || npx tsx --cwd . benchmark/run.ts","verify:mcp":"bun run packages/mcp/src/index.ts --health 2>/dev/null || npx tsx packages/mcp/src/index.ts --health","bench:locomo":"bun benchmark/locomo-full.ts"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Universal memory for AI agents: QMD fast file search + SQLite/Postgres + Belief System + Persistent Hot Cache. Works out-of-the-box.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.20.0","zod":"^4.3.6","cors":"2.8.6","redis":"^5.11.0","dotenv":"^17.4.2","sql.js":"^1.14.1","express":"^5.2.1","pgvector":"^0.2.0","commander":"^14.0.3","node-cron":"^4.2.1","@tobilu/qmd":"^2.1.0","drizzle-orm":"^0.45.2","@clack/prompts":"^1.2.0","better-sqlite3":"12.9.0","express-rate-limit":"^8.3.2","@neondatabase/serverless":"^1.0.2","@huggingface/transformers":"^4.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","tsx":"^4.21.0","vitest":"^3.0.0","esbuild":"^0.28.0","@types/pg":"^8.20.0","picocolors":"^1.0.0","typescript":"^6.0.2","@types/cors":"^2.8.17","@types/node":"^25.6.0","drizzle-kit":"^0.31.10","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.2.0_1776737064443_0.11785832269360408","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"squish-memory","version":"1.2.1","keywords":["ai-agent","memory","persistent-memory","universal-memory","mcp-server","mcp-client","model-context-protocol","claude-code","openclaw","opencode","codex","cursor","windsurf","vscode","plugin","plugin-architecture","qmd","sqlite","postgres","hybrid-search","context-management","semantic-search","local-first","privacy","agent-framework","agent-memory","ai-memory","agentic","context-window","long-term-memory","rag","vector-embeddings","session-persistence"],"author":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"license":"MIT","_id":"squish-memory@1.2.1","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://github.com/michielhdoteth/squish#readme","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"bin/squish.mjs","squish-mcp":"bin/squish-mcp.mjs"},"dist":{"shasum":"4a46631f931aa48f4e52dc51afa53a95bde277fc","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.2.1.tgz","fileCount":246,"integrity":"sha512-a4v5tYniI0Y9XbdjlgG8pnnjqXPtQFHWX0TsFq0j5yLYz/UQ89wvx2/G5WXVIBf19BxlYXnZdPa2hQB8p1mkIA==","signatures":[{"sig":"MEQCIF8rogpIcanluHgEcQhqsd8jM6qPUqFo/o0UobLsA2/EAiAEZjJedA2r2r+Zgk0CLl77kykOlpfsPaOkMvdlbx4bPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1484429},"main":"core/index.ts","type":"module","engines":{"bun":">=1.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/michielhdoteth","type":"github"},"scripts":{"dev":"bun --hot core/index.ts 2>/dev/null || npx tsx --watch core/index.ts","mcp":"bun run packages/mcp/src/index.ts 2>/dev/null || npx tsx packages/mcp/src/index.ts","test":"bun test ./tests/ 2>/dev/null || npx vitest","bench":"bun benchmark/memory.ts 2>/dev/null || npx tsx --cwd . benchmark/memory.ts","build":"echo 'No build needed - runs TypeScript directly with bun. Use bun run start or bun run mcp instead.'","clean":"rm -rf dist && rm -f *.log","start":"bun run core/index.ts 2>/dev/null || npx tsx core/index.ts","dev:mcp":"bun --hot packages/mcp/src/index.ts 2>/dev/null || npx tsx --watch packages/mcp/src/index.ts","bench:db":"bun benchmark/run.ts 2>/dev/null || npx tsx --cwd . benchmark/run.ts","verify:mcp":"bun run packages/mcp/src/index.ts --health 2>/dev/null || npx tsx packages/mcp/src/index.ts --health","bench:locomo":"bun benchmark/locomo-full.ts"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"deprecated":"Deprecated: 1.2.1 has broken install behavior on Windows and packaging regressions. Please use 1.2.0 until the next fixed release.","repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.11.1","description":"Universal memory for AI agents: QMD fast file search + SQLite/Postgres + Belief System + Persistent Hot Cache. Works out-of-the-box.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.20.0","zod":"^4.3.6","cors":"2.8.6","redis":"^5.11.0","dotenv":"^17.4.2","sql.js":"^1.14.1","express":"^5.2.1","pgvector":"^0.2.0","commander":"^14.0.3","node-cron":"^4.2.1","@tobilu/qmd":"^2.1.0","drizzle-orm":"^0.45.2","@clack/prompts":"^1.2.0","better-sqlite3":"12.9.0","express-rate-limit":"^8.3.2","@neondatabase/serverless":"^1.0.2","@huggingface/transformers":"^4.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","tsx":"^4.21.0","vitest":"^3.0.0","esbuild":"^0.28.0","@types/pg":"^8.20.0","picocolors":"^1.0.0","typescript":"^6.0.2","@types/cors":"^2.8.17","@types/node":"^25.6.0","drizzle-kit":"^0.31.10","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.2.1_1777241768370_0.3358191576676406","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"squish-memory","version":"1.6.0","keywords":["ai-memory","claude-code","codex","chatgpt","agent-memory","memory-runtime","mcp-server","persistent-memory","local-first","session-search","context-engineering","cursor","windsurf","opencode","vscode","cli","sqlite","postgres","hybrid-search","long-term-memory","session-persistence","model-context-protocol"],"author":{"name":"4m-labs","email":"michiel@4mlabs.io"},"license":"MIT","_id":"squish-memory@1.6.0","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"homepage":"https://squishplugin.dev","bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"bin":{"squish":"bin/squish.mjs","squish-mcp":"bin/squish-mcp.mjs"},"dist":{"shasum":"09103a28d25740e2fd3ee9f6bc27c80c8736858e","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.6.0.tgz","fileCount":326,"integrity":"sha512-ieCYEHlQObdaxbGW+pfp1Bea09FQVGhibE919Svo9BwkfQfWGCCopFTUUkzAAk+iNDf570O93BgtdnHndjHrYA==","signatures":[{"sig":"MEQCIFwLyD8oQ/4mOA0OjrUpvWwYdgM6xaM3Xl0UOHDoeAY0AiB1jIx6I2uHW+APCkQR7hvElSxxTDhZVPHkC9dlDiCGhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2167686},"main":"config.ts","type":"module","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/4m-labs","type":"github"},"gitHead":"bc06e8364f0ea044013c2cd6a644872fc8202a81","mcpName":"io.github.4m-labs/squish","scripts":{"dev":"tsx --watch core/index.ts","mcp":"tsx packages/mcp/src/index.ts","test":"bun test --isolate","bench":"tsx benchmark/memory.ts","build":"node -e \"console.log('No build step required. Use npm run start or npm run mcp.')\"","clean":"rm -rf dist && rm -f *.log","start":"tsx core/index.ts","dev:mcp":"tsx --watch packages/mcp/src/index.ts","bench:db":"tsx benchmark/run.ts","verify:mcp":"tsx packages/mcp/src/index.ts --health","bench:locomo":"bun benchmark/locomo-full.ts"},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"repository":{"url":"git+https://github.com/michielhdoteth/squish.git","type":"git"},"_npmVersion":"11.6.2","description":"Local-first memory runtime for Claude Code, Codex, ChatGPT, and AI agents. Searchable session history, durable memory, and cross-tool sync. No external LLM required.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"pg":"^8.20.0","tsx":"^4.21.0","zod":"^4.3.6","cors":"2.8.6","kuzu":"^0.11.3","redis":"^5.11.0","dotenv":"^17.4.2","sql.js":"^1.14.1","express":"^5.2.1","pgvector":"^0.2.0","commander":"^14.0.3","node-cron":"^4.2.1","picocolors":"^1.0.0","@tobilu/qmd":"^2.1.0","drizzle-orm":"^0.45.2","@clack/prompts":"^1.2.0","better-sqlite3":"12.9.0","express-rate-limit":"^8.3.2","@neondatabase/serverless":"^1.0.2","@huggingface/transformers":"^4.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"pkg":"^5.8.1","esbuild":"^0.28.0","@types/pg":"^8.20.0","typescript":"^6.0.2","@types/cors":"^2.8.17","@types/node":"^25.6.0","drizzle-kit":"^0.31.10","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/squish-memory_1.6.0_1781117145871_0.35360229307238855","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"squish-memory","version":"1.9.0","author":{"name":"4m-labs"},"repository":{"type":"git","url":"git+https://github.com/michielhdoteth/squish.git"},"mcpName":"io.github.4m-labs/squish","main":"config.ts","dependencies":{"@clack/prompts":"^1.2.0","@huggingface/transformers":"^4.1.0","@modelcontextprotocol/sdk":"^1.29.0","@neondatabase/serverless":"^1.0.2","@tobilu/qmd":"^2.1.0","better-sqlite3":"12.9.0","commander":"^14.0.3","cors":"2.8.6","dotenv":"^17.4.2","drizzle-orm":"^0.45.2","express":"^5.2.1","express-rate-limit":"^8.3.2","node-cron":"^4.2.1","pg":"^8.20.0","pgvector":"^0.2.0","picocolors":"^1.0.0","redis":"^5.11.0","sql.js":"^1.14.1","stemmer":"^2.0.1","tsx":"^4.21.0","zod":"^4.3.6"},"devDependencies":{"@types/better-sqlite3":"^7.6.13","@types/cors":"^2.8.17","@types/express":"^5.0.0","@types/node":"^25.6.0","@types/node-cron":"^3.0.11","@types/pg":"^8.20.0","drizzle-kit":"^0.31.10","esbuild":"^0.28.0","pkg":"^5.8.1","typescript":"^6.0.2"},"bin":{"squish":"bin/squish.mjs","squish-mcp":"bin/squish-mcp.mjs"},"bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"description":"AI memory system for coding agents. Local-first MCP runtime with connectors (Google Drive, GitHub, Slack, Notion), knowledge graphs, decay scoring, and multi-tier deployment. Free locally, paid Cloud for sync and teams.","engines":{"node":">=18.0.0"},"funding":{"type":"github","url":"https://github.com/sponsors/4m-labs"},"homepage":"https://squishplugin.dev","keywords":["ai-memory","agent-memory","mcp-server","mcp","memory","knowledge-graph","connectors","google-drive","github","slack","notion","local-first","sqlite","postgres","semantic-search","embeddings","context-engineering","persistent-memory","session-search","claude-code","codex","chatgpt","cursor","windsurf","opencode","vscode","cli","hybrid-search","long-term-memory","session-persistence","model-context-protocol"],"license":"MIT","scripts":{"clean":"rm -rf dist && rm -f *.log","build":"node -e \"console.log('No build step required. Use npm run start or npm run mcp.')\"","start":"tsx core/index.ts","mcp":"tsx packages/mcp/src/index.ts","dev":"tsx --watch core/index.ts","dev:mcp":"tsx --watch packages/mcp/src/index.ts","test":"bun test --isolate","verify:mcp":"tsx packages/mcp/src/index.ts --health","bench":"tsx benchmark/memory.ts","bench:db":"tsx benchmark/run.ts","bench:locomo":"bun benchmark/locomo-full.ts"},"type":"module","gitHead":"d23d475b5b18a04b11d3eebfad0af7340add58da","types":"./config.d.ts","_id":"squish-memory@1.9.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-xQsTzehmjoqClFoAumqkSxO21J30D4ugxksRGejGYbKgaosTJuTFybMXoKYV7Qjm5ncT16JUuSfHB01qPzmp5w==","shasum":"54ed75aafca576fcaebfec6e57c30e7aaa09eec0","tarball":"https://registry.npmjs.org/squish-memory/-/squish-memory-1.9.0.tgz","fileCount":592,"unpackedSize":3518346,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGveP6KXX8qekYy8+YFjhLqBKxkgucNl+S9so7C5VmLAAiEAiuV+FAW4iFamMxCPV2pV4vTyBu4huCJdCUJ+mBtR7bc="}]},"_npmUser":{"name":"michielhdoteth","email":"michiel@4mlabs.io"},"directories":{},"maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/squish-memory_1.9.0_1783726026507_0.936826325554498"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-01T17:49:57.371Z","modified":"2026-07-10T23:27:06.772Z","0.7.0":"2026-02-01T17:49:57.632Z","0.7.2":"2026-02-01T18:52:23.268Z","0.7.3":"2026-02-01T19:18:37.451Z","0.8.0":"2026-02-01T19:47:50.171Z","0.8.1":"2026-02-01T20:23:47.700Z","0.8.2":"2026-02-01T20:54:52.457Z","0.9.1":"2026-03-14T17:04:41.907Z","0.9.2":"2026-03-14T17:50:41.592Z","0.9.3":"2026-03-16T06:49:28.968Z","1.0.0":"2026-03-18T00:31:38.164Z","1.0.1":"2026-03-18T02:37:55.816Z","1.0.2":"2026-03-18T18:14:12.685Z","1.1.5":"2026-04-13T04:22:35.626Z","1.2.0":"2026-04-21T02:04:24.676Z","1.2.1":"2026-04-26T22:16:08.520Z","1.6.0":"2026-06-10T18:45:46.059Z","1.9.0":"2026-07-10T23:27:06.680Z"},"bugs":{"url":"https://github.com/michielhdoteth/squish/issues"},"author":{"name":"4m-labs"},"license":"MIT","homepage":"https://squishplugin.dev","keywords":["ai-memory","agent-memory","mcp-server","mcp","memory","knowledge-graph","connectors","google-drive","github","slack","notion","local-first","sqlite","postgres","semantic-search","embeddings","context-engineering","persistent-memory","session-search","claude-code","codex","chatgpt","cursor","windsurf","opencode","vscode","cli","hybrid-search","long-term-memory","session-persistence","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/michielhdoteth/squish.git"},"description":"AI memory system for coding agents. Local-first MCP runtime with connectors (Google Drive, GitHub, Slack, Notion), knowledge graphs, decay scoring, and multi-tier deployment. Free locally, paid Cloud for sync and teams.","maintainers":[{"name":"michielhdoteth","email":"michiel@4mlabs.io"}],"readme":"# Squish - AI Memory System for Coding Agents\r\n\r\n[![npm version](https://img.shields.io/npm/v/squish-memory)](https://www.npmjs.com/package/squish-memory)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n[![GitHub stars](https://img.shields.io/github/stars/michielhdoteth/squish?style=social)](https://github.com/michielhdoteth/squish/stargazers)\r\n[![Downloads](https://img.shields.io/npm/dm/squish-memory)](https://www.npmjs.com/package/squish-memory)\r\n\r\n> **Connect your sources. Click ingest. Your AI remembers everything.**\r\n\r\nSquish is an AI memory system for coding agents. Local-first MCP runtime with connectors, knowledge graphs, and multi-tier deployment. Free locally, paid Cloud for sync and teams.\r\n\r\n```bash\r\nnpm i -g squish-memory && squish install --all\r\n```\r\n\r\n<p align=\"center\">\r\n  <img src=\"assets/demo/squish-demo.gif\" width=\"780\" alt=\"Squish Demo\" />\r\n</p>\n\r\n---\r\n\r\n### Core Concepts\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Concept</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">What It Is</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Recall</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Durable memory — decisions, preferences, constraints</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Sessions</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Evidence from past agent runs</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Pinned</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Stable facts that do not decay</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Beliefs</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Passive model of user/project</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Strategies</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Active operating rules</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Decay</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Stale weak traces fade automatically</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\"><strong>Graph</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Reinforced relationships from usage</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n---\r\n\r\n## The Problem: Agents Forget Everything\r\n\r\nEvery AI coding agent starts from zero when a new session begins. The architecture decision from last week, the config you spent an hour debugging, the preference you mentioned yesterday — gone.\r\n\r\nBuilt-in memory files like CLAUDE.md and .cursorrules help, but they have hard limits. They cap out around 200 lines, require manual curation, and do not work across agents. You end up copy-pasting the same context into every tool.\r\n\r\nSquish gives you persistent memory for coding agents that scales without limits. No manual maintenance. No token waste. No agent lock-in.\r\n\r\n### Three Layers of Memory\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Layer</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">What It Does</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Command</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Recall</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Durable memory — decisions, preferences, constraints that persist across sessions</td>\r\n      <td style=\"padding: 10px 14px;\"><code>squish recall</code></td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Sessions</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Searchable history — past agent runs you can inspect for evidence and context</td>\r\n      <td style=\"padding: 10px 14px;\"><code>squish sessions search</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\"><strong>Remember</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Write to long-term memory — store new facts, decisions, observations</td>\r\n      <td style=\"padding: 10px 14px;\"><code>squish remember</code></td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n### Token Cost Comparison\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Method</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Token Usage</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Cost per Session</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Cross-Agent</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Auto-Capture</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Paste full context</td>\r\n      <td style=\"padding: 10px 14px;\">~2,000 tokens</td>\r\n      <td style=\"padding: 10px 14px;\">$0.06 - $0.12</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">LLM-summarized context</td>\r\n      <td style=\"padding: 10px 14px;\">~500 tokens</td>\r\n      <td style=\"padding: 10px 14px;\">$0.02 - $0.05</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">CLAUDE.md / .cursorrules</td>\r\n      <td style=\"padding: 10px 14px;\">~200 lines max</td>\r\n      <td style=\"padding: 10px 14px;\">Free</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Squish (local)</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>~50-200 tokens</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>$0.00</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>Yes</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>Yes</strong></td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\"><strong>Squish (Cloud)</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>~50-200 tokens</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>$0.00</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>Yes</strong></td>\r\n      <td style=\"padding: 10px 14px;\"><strong>Yes</strong></td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\nSquish retrieves only the relevant memories for the current task. The average context injection is 50-200 tokens — a fraction of what you would paste manually.\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n### Step 1: Install\r\n\r\n```bash\r\nnpm install -g squish-memory && squish install --all\r\n```\r\n\r\nThis installs the Squish CLI, MCP server, and plugin hooks for all detected agents.\r\n\r\n### Step 2: Work\r\n\r\nStart your coding agent as usual. Squish runs in the background, auto-capturing decisions, constraints, preferences, and context.\r\n\r\n```bash\r\nsquish remember \"We chose PostgreSQL for Squish Cloud team mode\" --type decision\nsquish recall \"project decisions\"\r\n```\r\n\r\n### Step 3: Search Past Sessions\r\n\r\nAfter a few sessions, search your agent history:\r\n\r\n```bash\r\nsquish sessions search \"postgres migration\"\r\nsquish sessions related --repo-path .\r\n```\r\n\r\n### Step 4: Restart\r\n\r\nClose your session and open a new one. Your agent picks up where you left off — all context is restored automatically.\r\n\r\n```bash\r\nsquish context    # See what your agent remembers\r\nsquish stats      # Check memory health\r\n```\r\n\r\nWorks locally free. Paid Squish Cloud is available at [squishplugin.dev](https://squishplugin.dev) for sync, dashboard, and team features.\n\r\n---\r\n\r\n## Works with Every Agent\r\n\r\nSquish works with any AI coding agent that supports MCP (Model Context Protocol) or HTTP connections. One memory server, shared across all of them.\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Agent</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Integration Method</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Notes</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Claude Code</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server + plugin</td>\r\n      <td style=\"padding: 10px 14px;\">Auto-captures via hooks</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Codex CLI</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">OpenAI's CLI agent</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">GitHub Copilot CLI</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">VS Code integration</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Cursor</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Editor + agent</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Gemini CLI</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Google's CLI agent</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">OpenCode</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server + hooks</td>\r\n      <td style=\"padding: 10px 14px;\">Auto-capture + MCP tools</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Cline</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">VS Code extension</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Goose</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Block's agent</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Kilo Code</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">VS Code extension</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Windsurf</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Codeium's editor</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Roo Code</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">VS Code extension</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Claude Desktop</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Desktop app</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Aider</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Terminal pair programmer</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">ChatGPT</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server (via Squish Cloud)</td>\r\n      <td style=\"padding: 10px 14px;\">Cloud sync required</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\">VS Code (Copilot)</td>\r\n      <td style=\"padding: 10px 14px;\">MCP server</td>\r\n      <td style=\"padding: 10px 14px;\">Via MCP extension</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n**Works with any agent that speaks MCP or HTTP. One server, memories shared across all of them.**\r\n\r\n### MCP Server Configuration\r\n\r\nAdd Squish to any MCP-compatible client:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"squish\": {\r\n      \"command\": \"squish-mcp\",\r\n      \"args\": [\"--http\", \"--port\", \"8767\"],\r\n      \"env\": {\r\n        \"SQUISH_DB_PATH\": \"./squish-data\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nFor cloud-connected agents:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"squish-cloud\": {\r\n      \"type\": \"url\",\r\n      \"url\": \"https://api.squishplugin.dev/mcp\",\r\n      \"headers\": {\r\n        \"Authorization\": \"Bearer <your-token>\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n---\r\n\r\n## Why Squish\r\n\r\nMost memory tools need a second LLM for embeddings and retrieval. That means extra API costs, latency, and infrastructure you have to manage.\r\n\r\nSquish uses local embeddings by default. Zero LLM dependency. 1-5ms latency. $0 runtime cost in local mode.\r\n\r\nBring your own LLM if you want — Squish supports external embeddings and reasoning, but nothing requires it.\r\n\r\n### Comparison\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Feature</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Squish</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Built-in (CLAUDE.md)</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">agentmemory</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">mem0</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Auto-capture</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (hooks)</td>\r\n      <td style=\"padding: 10px 14px;\">Manual</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (12 hooks)</td>\r\n      <td style=\"padding: 10px 14px;\">Manual API</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Local embeddings</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (default)</td>\r\n      <td style=\"padding: 10px 14px;\">N/A</td>\r\n      <td style=\"padding: 10px 14px;\">Yes</td>\r\n      <td style=\"padding: 10px 14px;\">No (cloud)</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">External DB required</td>\r\n      <td style=\"padding: 10px 14px;\">No (SQLite)</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (iii-engine)</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (Qdrant)</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">MCP tools</td>\r\n      <td style=\"padding: 10px 14px;\">18</td>\r\n      <td style=\"padding: 10px 14px;\">0</td>\r\n      <td style=\"padding: 10px 14px;\">53</td>\r\n      <td style=\"padding: 10px 14px;\">9</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Knowledge graph</td>\r\n      <td style=\"padding: 10px 14px;\">Yes</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">Yes</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Cross-agent sync</td>\r\n      <td style=\"padding: 10px 14px;\">Yes (Cloud)</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">No</td>\r\n      <td style=\"padding: 10px 14px;\">API-based</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Price</td>\r\n      <td style=\"padding: 10px 14px;\">Free local / $9/mo cloud</td>\r\n      <td style=\"padding: 10px 14px;\">Free</td>\r\n      <td style=\"padding: 10px 14px;\">Free</td>\r\n      <td style=\"padding: 10px 14px;\">$249/mo Pro</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Setup time</td>\r\n      <td style=\"padding: 10px 14px;\">30 seconds</td>\r\n      <td style=\"padding: 10px 14px;\">5 minutes</td>\r\n      <td style=\"padding: 10px 14px;\">15 minutes</td>\r\n      <td style=\"padding: 10px 14px;\">30 minutes</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\">Data ownership</td>\r\n      <td style=\"padding: 10px 14px;\">Full (local SQLite)</td>\r\n      <td style=\"padding: 10px 14px;\">Git repo</td>\r\n      <td style=\"padding: 10px 14px;\">External DB</td>\r\n      <td style=\"padding: 10px 14px;\">Cloud vendor</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n---\r\n\r\n## Features\r\n\r\n### Memory Intelligence\r\n\r\n- Auto-captures decisions, constraints, and preferences as you work\r\n- Restores relevant context when an agent restarts\r\n- Handles contradictions and temporal facts with expiration\r\n- Graph-boosted retrieval connects related memories across sessions\r\n- Contradiction detection flags conflicting information\r\n- Temporal reasoning tracks when facts were true vs. now\r\n- Confidence scoring adjusts memory relevance over time\r\n- Decay system automatically ages low-value memories\r\n\r\n### Session Search\r\n\r\n- Search previous Claude Code, Codex, and OpenCode sessions\r\n- Find related sessions by project path or file overlap\r\n- Inspect past decisions, errors, and commands as evidence\r\n- Separate from long-term memory — raw session history, not distilled facts\r\n\r\n### Interfaces\r\n\r\n- **CLI**: `squish remember`, `recall`, `inspect`, `context`, `stats`, `search`, `sessions`\r\n- **MCP Server**: 18 tools for any MCP client — recall, health, graph, recency, maintenance\r\n- **Web UI**: Local dashboard at `localhost:37777` for visualizing memories\r\n- **Cloud Dashboard**: Paid analytics and management at [squishplugin.dev](https://squishplugin.dev)\n\r\n### Storage\r\n\r\n- SQLite (local, default) or Squish Cloud team workspaces\n- Hybrid retrieval: keyword + semantic similarity with RRF fusion\r\n- AES-256-GCM encryption for sensitive memories\r\n- Places routing: organize memories by project, feature, or context\r\n- Full-text search with BM25 ranking\r\n- Vector search with TF-IDF embeddings (768-dimensional)\r\n\r\n### Memory Pipeline\n\nSquish uses a 4-stage pipeline to process memories:\n\n1. **Capture** — Filters noisy tool output, keeps new memories private-first, and suggests what should be promoted into project/team/company scopes\n2. **Filter** — Deduplicates, resolves contradictions, scores importance\n3. **Store** — Persists to SQLite/PostgreSQL with graph relationships and embeddings\n4. **Retrieve** — Hybrid search combines keyword, semantic, recency, and importance scoring\n\r\n---\r\n\r\n## Architecture\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://mermaid.ink/img/Zmxvd2NoYXJ0IFRECiAgICBBWyJBZ2VudCBBY3Rpb24iXSAtLT4gQlsiMS4gQ2FwdHVyZSJdCiAgICBCIC0tPiBCMVsiRmlsdGVyIG5vaXN5IG91dHB1dCJdCiAgICBCIC0tPiBCMlsiUHJvbW90ZSBkZWNpc2lvbnMsXG5jb25zdHJhaW50cywgcHJlZmVyZW5jZXMiXQogICAgQjEgLS0-IENbIjIuIFN0b3JlIl0KICAgIEIyIC0tPiBDCiAgICBDIC0tPiBDMVsiU1FMaXRlIC8gUG9zdGdyZVNRTCJdCiAgICBDIC0tPiBDMlsiRW1iZWRkaW5nc1xuKGxvY2FsIFRGLUlERikiXQogICAgQyAtLT4gQzNbIktub3dsZWRnZSBncmFwaCBlZGdlcyJdCiAgICBDIC0tPiBDNFsiUGxhY2VzIHJvdXRpbmciXQogICAgQzEgLS0-IERbIjMuIFJldHJpZXZlIl0KICAgIEMyIC0tPiBECiAgICBDMyAtLT4gRAogICAgQzQgLS0-IEQKICAgIEQgLS0-IEQxWyJLZXl3b3JkIHNlYXJjaCAoQk0yNSkiXQogICAgRCAtLT4gRDJbIlNlbWFudGljIHNlYXJjaFxuKGNvc2luZSBzaW1pbGFyaXR5KSJdCiAgICBEIC0tPiBEM1siUmVjZW5jeSB3ZWlnaHRpbmciXQogICAgRCAtLT4gRDRbIlJSRiBmdXNpb24gc2NvcmluZyJdCiAgICBEMSAtLT4gRVsiNC4gQ29udGV4dCJdCiAgICBEMiAtLT4gRQogICAgRDMgLS0-IEUKICAgIEQ0IC0tPiBFCiAgICBFIC0tPiBFMVsiSW5qZWN0IHJlbGV2YW50IG1lbW9yaWVzXG5pbnRvIGFnZW50IGNvbnRleHQiXQogICAgRTEgLS0-IEUyWyI1MC0yMDAgdG9rZW5zIGF2ZXJhZ2UiXQogICAgRTEgLS0-IEUzWyJBdXRvLWRlY2F5IG9sZC9sb3ctdmFsdWVcbm1lbW9yaWVzIl0KCiAgICBjbGFzc0RlZiBjYXB0dXJlIGZpbGw6IzRhOWVmZixzdHJva2U6IzJkN2RkMixjb2xvcjojZmZmCiAgICBjbGFzc0RlZiBzdG9yZSBmaWxsOiM3YzNhZWQsc3Ryb2tlOiM1YjIxYjYsY29sb3I6I2ZmZgogICAgY2xhc3NEZWYgcmV0cmlldmUgZmlsbDojMDU5NjY5LHN0cm9rZTojMDQ3ODU3LGNvbG9yOiNmZmYKICAgIGNsYXNzRGVmIGNvbnRleHQgZmlsbDojZDk3NzA2LHN0cm9rZTojYjQ1MzA5LGNvbG9yOiNmZmYKICAgIGNsYXNzRGVmIGRldGFpbCBmaWxsOiNmM2Y0ZjYsc3Ryb2tlOiM5Y2EzYWYsY29sb3I6IzM3NDE1MQoKICAgIGNsYXNzIEEgY2FwdHVyZQogICAgY2xhc3MgQixCMSxCMiBjYXB0dXJlCiAgICBjbGFzcyBDLEMxLEMyLEMzLEM0IHN0b3JlCiAgICBjbGFzcyBELEQxLEQyLEQzLEQ0IHJldHJpZXZlCiAgICBjbGFzcyBFLEUxLEUyLEUzIGNvbnRleHQK\" alt=\"Architecture\" width=\"780\" />\r\n</p>\r\n\r\n### Three-Layer Memory Model\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://mermaid.ink/img/Zmxvd2NoYXJ0IExSCiAgICBzdWJncmFwaCBSRUNBTExbIlJFQ0FMTCDigJQgZHVyYWJsZSJdCiAgICAgICAgUjFbIkRlY2lzaW9ucyJdCiAgICAgICAgUjJbIlByZWZlcmVuY2VzIl0KICAgICAgICBSM1siQ29uc3RyYWludHMiXQogICAgICAgIFI0WyJCZWxpZWZzIl0KICAgIGVuZAogICAgc3ViZ3JhcGggU0VTU0lPTlNbIlNFU1NJT05TIOKAlCBldmlkZW5jZSJdCiAgICAgICAgUzFbIlBhc3QgYWdlbnQgcnVucyJdCiAgICAgICAgUzJbIlNlYXJjaGFibGUiXQogICAgICAgIFMzWyJSYXcgaGlzdG9yeSJdCiAgICAgICAgUzRbIlJlbGF0ZWQgcmVwb3MiXQogICAgZW5kCiAgICBzdWJncmFwaCBSRU1FTUJFUlsiUkVNRU1CRVIg4oCUIHdyaXRlIl0KICAgICAgICBNMVsiU3RvcmUgbmV3IGZhY3RzIl0KICAgICAgICBNMlsiQXV0by1jbGFzc2lmeSJdCiAgICAgICAgTTNbIkdyYXBoIHVwZGF0ZSJdCiAgICAgICAgTTRbIlBsYWNlIHJvdXRpbmciXQogICAgZW5kCiAgICBSRUNBTEwgLS0-IHwic3F1aXNoIHJlY2FsbCJ8IENMSTFbIkNMSSAvIE1DUCJdCiAgICBTRVNTSU9OUyAtLT4gfCJzcXVpc2ggc2Vzc2lvbnMgc2VhcmNoInwgQ0xJMlsiQ0xJIC8gTUNQIl0KICAgIFJFTUVNQkVSIC0tPiB8InNxdWlzaCByZW1lbWJlciJ8IENMSTNbIkNMSSAvIE1DUCJdCgogICAgY2xhc3NEZWYgcmVjYWxsIGZpbGw6IzRhOWVmZixzdHJva2U6IzJkN2RkMixjb2xvcjojZmZmCiAgICBjbGFzc0RlZiBzZXNzaW9ucyBmaWxsOiM3YzNhZWQsc3Ryb2tlOiM1YjIxYjYsY29sb3I6I2ZmZgogICAgY2xhc3NEZWYgcmVtZW1iZXIgZmlsbDojMDU5NjY5LHN0cm9rZTojMDQ3ODU3LGNvbG9yOiNmZmYKICAgIGNsYXNzRGVmIGNsaSBmaWxsOiNmM2Y0ZjYsc3Ryb2tlOiM5Y2EzYWYsY29sb3I6IzM3NDE1MQoKICAgIGNsYXNzIFIxLFIyLFIzLFI0IHJlY2FsbAogICAgY2xhc3MgUzEsUzIsUzMsUzQgc2Vzc2lvbnMKICAgIGNsYXNzIE0xLE0yLE0zLE00IHJlbWVtYmVyCiAgICBjbGFzcyBDTEkxLENMSTIsQ0xJMyBjbGkK\" alt=\"Three-Layer Memory Model\" width=\"780\" />\r\n</p>\r\n\r\n### Storage Layer\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">SQLite (default)</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Squish Cloud Team</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">memories</td>\r\n      <td style=\"padding: 10px 14px;\">memories</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">associations</td>\r\n      <td style=\"padding: 10px 14px;\">associations</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">embeddings</td>\r\n      <td style=\"padding: 10px 14px;\">embeddings</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">graph_edges</td>\r\n      <td style=\"padding: 10px 14px;\">graph_edges</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">places</td>\r\n      <td style=\"padding: 10px 14px;\">places</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">sessions</td>\r\n      <td style=\"padding: 10px 14px;\">sessions</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\">AES-256-GCM encryption</td>\r\n      <td style=\"padding: 10px 14px;\">AES-256-GCM encryption</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n---\r\n\r\n## Connectors\r\n\r\nSquish connects to your existing tools and ingests context automatically:\r\n\r\n| Connector | What It Ingests |\r\n|-----------|----------------|\r\n| Google Drive | Documents, sheets, slides, and files |\r\n| GitHub | Issues, PRs, discussions, code context, and repo metadata |\r\n| Slack | Messages, threads, channel context, and decisions |\r\n| Notion | Pages, databases, docs, and wikis |\r\n\r\nConnectors are available on Cloud tiers. Install with:\r\n\r\n```bash\r\nsquish connect google-drive\r\nsquish connect github\r\nsquish connect slack\r\nsquish connect notion\r\n```\r\n\r\n---\r\n\r\n## Ingestion Pipeline\r\n\r\nSquish uses a 4-stage pipeline to process content from your connectors:\r\n\r\n1. **Chunk** -- Splits documents into meaningful segments\r\n2. **Embed** -- Generates TF-IDF or external embeddings (768-dimensional vectors)\r\n3. **Store** -- Persists to SQLite/PostgreSQL with graph relationships\r\n4. **Extract** -- Builds knowledge graph with entity resolution and relationship mapping\r\n\r\nOptional LLM-powered features (bring your own key):\r\n- Entity extraction and relationship mapping\r\n- Automatic memory organization and tagging\r\n- Summarization and consolidation\n\r\n---\r\n\r\n## Squish Cloud\r\n\r\nPersistent memory across ChatGPT, Claude Desktop, Claude Code, and local agents. One account, synchronized everywhere.\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://mermaid.ink/img/Zmxvd2NoYXJ0IFRECiAgICBDR1siQ2hhdEdQVFxuT0F1dGggMi4xIl0gLS0-IEFQSVsiU3F1aXNoIENsb3VkIEFQSSJdCiAgICBDRFsiQ2xhdWRlIERlc2t0b3Bcbk9BdXRoIDIuMSJdIC0tPiBBUEkKICAgIENDWyJDbGF1ZGUgQ29kZVxuU3RyZWFtYWJsZSBIVFRQIl0gLS0-IEFQSQogICAgTEFbIkxvY2FsIEFnZW50c1xuTUNQIC8gQ0xJIl0gLS0-IEFQSQogICAgQVBJIC0tPiBEQlsoIlBvc3RncmVTUUwgK1xuRW5jcnlwdGVkIFN0b3JhZ2UiKV0KICAgIERCIC0tPiBEYXNoYm9hcmRbIkFkbWluIERhc2hib2FyZFxuJiBBbmFseXRpY3MiXQoKICAgIGNsYXNzRGVmIGNsaWVudCBmaWxsOiM0YTllZmYsc3Ryb2tlOiMyZDdkZDIsY29sb3I6I2ZmZgogICAgY2xhc3NEZWYgYXBpIGZpbGw6IzdjM2FlZCxzdHJva2U6IzViMjFiNixjb2xvcjojZmZmCiAgICBjbGFzc0RlZiBkYiBmaWxsOiMwNTk2Njksc3Ryb2tlOiMwNDc4NTcsY29sb3I6I2ZmZgogICAgY2xhc3NEZWYgZGFzaCBmaWxsOiNkOTc3MDYsc3Ryb2tlOiNiNDUzMDksY29sb3I6I2ZmZgoKICAgIGNsYXNzIENHLENELENDLExBIGNsaWVudAogICAgY2xhc3MgQVBJIGFwaQogICAgY2xhc3MgREIgZGIKICAgIGNsYXNzIERhc2hib2FyZCBkYXNoCg\" alt=\"Squish Cloud Architecture\" width=\"600\" />\r\n</p>\r\n\r\n**Cloud features:** OAuth 2.1 + PKCE login, cross-platform sync, team workspaces, admin dashboard, priority support.\r\n\r\n### Pricing\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Tier</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Price</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Features</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Local</strong></td>\r\n      <td style=\"padding: 10px 14px;\">Free forever</td>\r\n      <td style=\"padding: 10px 14px;\">SQLite, 15+ MCP tools, offline, knowledge graph, decay scoring</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Cloud Solo</strong></td>\r\n      <td style=\"padding: 10px 14px;\">$9/mo</td>\r\n      <td style=\"padding: 10px 14px;\">Everything in Local + cloud sync, 1 connector, 10K requests/mo</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><strong>Cloud Pro</strong></td>\r\n      <td style=\"padding: 10px 14px;\">$29/mo</td>\r\n      <td style=\"padding: 10px 14px;\">Cross-tool sync, 3 connectors, 50K requests/mo, shared workspaces</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\"><strong>Cloud Team</strong></td>\r\n      <td style=\"padding: 10px 14px;\">$99/mo</td>\r\n      <td style=\"padding: 10px 14px;\">Unlimited seats, all connectors, 200K requests/mo, RBAC, audit logs</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n[Sign up at squishplugin.dev](https://squishplugin.dev) -- 30 seconds, no credit card needed.\r\n\r\n---\r\n\r\n## Installation Guides\r\n\r\n- [Claude Code](docs/install/claude-code.md) — MCP server + plugin hooks for auto-capture\r\n- [OpenCode](docs/install/opencode.md) — MCP server + hooks for OpenCode agent\r\n- [OpenClaw](docs/install/openclaw.md) — MCP server setup for OpenClaw\r\n\r\n### Quick install for all detected agents:\r\n\r\n```bash\r\nnpm install -g squish-memory && squish install --all\r\n```\r\n\r\nSquish auto-detects which agents you have installed and configures hooks for each one.\r\n\r\n---\r\n\r\n## Benchmarks\r\n\r\nSquish is tested against real-world memory retrieval tasks and synthetic benchmarks.\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Metric</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Result</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Notes</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Core Tests</td>\r\n      <td style=\"padding: 10px 14px;\">9/9 passed (100%)</td>\r\n      <td style=\"padding: 10px 14px;\">All memory operations</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">LoCoMo Memory</td>\r\n      <td style=\"padding: 10px 14px;\">65%</td>\r\n      <td style=\"padding: 10px 14px;\">100 REAL questions from locomo10.json</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Throughput</td>\r\n      <td style=\"padding: 10px 14px;\">39 ops/sec</td>\r\n      <td style=\"padding: 10px 14px;\">With local embeddings</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Total Time</td>\r\n      <td style=\"padding: 10px 14px;\">230ms</td>\r\n      <td style=\"padding: 10px 14px;\">For 9 core tests</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\">Package Size</td>\r\n      <td style=\"padding: 10px 14px;\">283 KB</td>\r\n      <td style=\"padding: 10px 14px;\">Lightweight footprint</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\">Latency (embed)</td>\r\n      <td style=\"padding: 10px 14px;\">6.6ms</td>\r\n      <td style=\"padding: 10px 14px;\">Local TF-IDF embeddings</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\">Latency (search)</td>\r\n      <td style=\"padding: 10px 14px;\">6.1ms</td>\r\n      <td style=\"padding: 10px 14px;\">Hybrid retrieval</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\nFull benchmark details: [docs/BENCHMARK.md](docs/BENCHMARK.md)\r\n\r\n---\r\n\r\n## Documentation\r\n\r\n<table>\r\n  <thead>\r\n    <tr style=\"background-color: #f6f8fa; border-bottom: 2px solid #d0d7de;\">\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Document</th>\r\n      <th style=\"padding: 10px 14px; text-align: left;\">Description</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/CLI.md\">CLI Reference</a></td>\r\n      <td style=\"padding: 10px 14px;\">All CLI commands and options</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/MCP-SERVER.md\">MCP Server</a></td>\r\n      <td style=\"padding: 10px 14px;\">18 MCP tools and configuration</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/ARCHITECTURE.md\">Architecture</a></td>\r\n      <td style=\"padding: 10px 14px;\">System design and data flow</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/DECAY.md\">Decay System</a></td>\r\n      <td style=\"padding: 10px 14px;\">How memories age and lose relevance</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/v2-scoring.md\">Scoring</a></td>\r\n      <td style=\"padding: 10px 14px;\">Importance and relevance scoring</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/ENV-CONFIG.md\">Environment Config</a></td>\r\n      <td style=\"padding: 10px 14px;\">Environment variables and settings</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/PLUGIN-ARCHITECTURE.md\">Plugin Architecture</a></td>\r\n      <td style=\"padding: 10px 14px;\">Hook system and agent integration</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/INSTALL-QUICKSTART.md\">Quick Start</a></td>\r\n      <td style=\"padding: 10px 14px;\">Getting started guide</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/agent-memory-comparison.md\">Agent Comparison</a></td>\r\n      <td style=\"padding: 10px 14px;\">Squish vs other memory tools</td>\r\n    </tr>\r\n    <tr style=\"border-bottom: 1px solid #d0d7de; background-color: #f6f8fa;\">\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/CONTRIBUTING.md\">Contributing</a></td>\r\n      <td style=\"padding: 10px 14px;\">How to contribute</td>\r\n    </tr>\r\n    <tr>\r\n      <td style=\"padding: 10px 14px;\"><a href=\"docs/RELEASE_NOTES.md\">Release Notes</a></td>\r\n      <td style=\"padding: 10px 14px;\">Changelog and version history</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n---\r\n\r\n## FAQ\r\n\r\n### What is Squish?\r\n\r\nSquish is a local-first memory runtime for AI coding agents. It gives your agents stable orientation, durable memory, and searchable session history across runs. Think of it as a brain that persists between sessions — your agents remember decisions, constraints, preferences, and context without you having to re-explain everything. In v1.6.0, Squish also searches past agent sessions as evidence, so agents can inspect prior work instead of starting from zero.\r\n\r\n### Does Squish require an API key?\r\n\r\nNo. Squish works locally by default with zero API keys. It uses local embeddings (TF-IDF) and SQLite storage. You can optionally configure an external LLM for enhanced reasoning, but it's not required. An API key is only needed if you want to use the paid Squish Cloud for cross-device sync.\n\r\n### How does Squish compare to mem0 or agentmemory?\r\n\r\nSquish is the only option that works locally with zero external dependencies. mem0 requires Qdrant (a vector database) and cloud API calls. agentmemory requires iii-engine. Squish uses SQLite and local embeddings by default. See the full comparison in the [Why Squish](#why-squish) section above.\r\n\r\n### Can I use Squish with multiple AI agents?\r\n\r\nYes. Squish works with any MCP-compatible agent. One memory server is shared across Claude Code, Cursor, Codex, Copilot, Gemini CLI, and any other agent that supports MCP. Memories are available to all connected agents.\r\n\r\n### Is my data private with Squish?\r\n\r\nYes. In local mode, all data stays on your machine in an encrypted SQLite database. Nothing is sent to any cloud service. AES-256-GCM encryption protects sensitive memories. In cloud mode, data is encrypted in transit and at rest.\r\n\r\n### What databases does Squish support?\r\n\r\nSquish supports SQLite (default, local) and Squish Cloud team workspaces backed by PostgreSQL. SQLite requires zero configuration. Team workspaces are only available on Squish Cloud and are used for shared memory across multiple users.\n\r\n### What is the difference between recall and sessions?\r\n\r\n`squish recall` searches your long-term memory — distilled facts, decisions, and preferences that Squish has captured and organized. `squish sessions search` searches raw past agent runs — the actual messages, commands, and file changes from previous Claude Code, Codex, or OpenCode sessions. Recall gives you what the system decided to remember. Sessions give you the evidence.\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nSee [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for guidelines on how to contribute to Squish.\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT -- see [LICENSE](LICENSE) for details.\r\n\r\n---\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://squishplugin.dev\">Website</a> &middot;\r\n  <a href=\"https://squishplugin.dev\">Cloud Dashboard</a> &middot;\r\n  <a href=\"https://docs.squishplugin.dev\">Documentation</a> &middot;\r\n  <a href=\"https://github.com/michielhdoteth/squish\">GitHub</a> &middot;\r\n  <a href=\"https://www.npmjs.com/package/squish-memory\">npm</a>\r\n</p>\r\n","readmeFilename":"README.md"}