{"_id":"2ndbrain","_rev":"19-873b9b20e19859e2ea0bdf6fa9d1c3e3","name":"2ndbrain","dist-tags":{"latest":"2026.2.4"},"versions":{"2026.1.30":{"name":"2ndbrain","version":"2026.1.30","keywords":[],"author":"","license":"ISC","_id":"2ndbrain@2026.1.30","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"dist":{"shasum":"b8d2b25ed3be624560de83324266ff79024cfbf0","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.30.tgz","fileCount":2,"integrity":"sha512-7Kk/Oz1yRy7pnMxEFu1okgK4pXwj4GdzdUy3s3GviOqROy4NRwjh0p0Sii+90oNAveAd1u4LO571F2tFkxffWQ==","signatures":[{"sig":"MEYCIQDzuzIOSv/9g8VWCqYCOxvR2GXRydloJj3EKNpChUn+pQIhAKcZZFXdfmflvoWKxDmk0AHbiVWTWoTy1a38sQaeDj6x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2599},"main":"index.js","gitHead":"5b2629f4bbc566de9b2019965d699f538d5b0695","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"An always-on Node.js npx service that bridges Telegram messges to Claude with\r * persistent conversation history (logs)\r * receive text messages w/ attachments\r * slash commands\r * send text message responses w/ \"Typing\" indicator\r * whitelist users that ","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.30_1769804978968_0.5700060243812157","host":"s3://npm-registry-packages-npm-production"}},"2026.1.31":{"name":"2ndbrain","version":"2026.1.31","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.31","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"dfd4edd0629cb13a7c7803b67f27206ba08c8cba","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.31.tgz","fileCount":30,"integrity":"sha512-ePXHYspW1kCM4KNC8ZLqVOkSPJ4TD9VYgM5t0KHtcv5gFWBAxvDi4aDeA/XJkV5pEvTBDh3xDvF7NBACgqWsgw==","signatures":[{"sig":"MEQCIHlAukoKTkgZ7lgIxR7K1oaoUaR1UUJSZ2F7E+P1Q2FWAiARB/dzPdP1CprReMsJbUDk/AvUB+/Ro2QvHu7vOM5NSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245528},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"77eb2996d7ec22b8051894301f4e523a1a7b370c","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.31_1769874317295_0.6650674450941292","host":"s3://npm-registry-packages-npm-production"}},"2026.1.32":{"name":"2ndbrain","version":"2026.1.32","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.32","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"93a3edac0d0f71f91fa5b823fad7f91b96466954","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.32.tgz","fileCount":30,"integrity":"sha512-TAB+xI8hkmJdgYwAAI7uTNCNQKJTOvk5Ie+h2/WTDbJW2tkxArJ9vGxegKY540Vrr9yRXjwQc+ICVt2Hl0jnDg==","signatures":[{"sig":"MEUCIQD3sy5mmEU8xOWnASAN5KtRYZuV5t72IOBPZKts6qXIYAIgWdrxDa/onvUjfz61l/JjrjkycNBjgCnZ01hbmuCu8oY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254020},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"a34e60c8bd54c99a5e1d00d6c18403d48edec0cd","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.32_1769877347562_0.9531478923952528","host":"s3://npm-registry-packages-npm-production"}},"2026.1.33":{"name":"2ndbrain","version":"2026.1.33","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.33","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"68a4c41365cb6136a650fee87c869b1f0723a6e7","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.33.tgz","fileCount":30,"integrity":"sha512-wikkkwYFdYBFKzlu1PDSlG7k8oEjImxlj4Rz571QRzvZL742nlqqEcLGGXNeX47mOzu6Os6Kt2ieDZGJvJsPnQ==","signatures":[{"sig":"MEQCIEa2M+lFx0lB+krOYo/1WSWQAMXKDj4ZduO7IWT6aRpoAiAhoR4EpHW8PXm2+N3g/FMFqTILqSscnOwZhdoZQqT84Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261207},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"d958fdd1ac8a0a184c231d919afe965b730f5848","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.33_1769892301266_0.257104054495809","host":"s3://npm-registry-packages-npm-production"}},"2026.1.34":{"name":"2ndbrain","version":"2026.1.34","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.34","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"9ae7279d5a242fa658570eb3dcad86434e873acc","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.34.tgz","fileCount":33,"integrity":"sha512-urMhuKxyHW03t1RAzz5NWvK42P/Qc+4MD4WSzkvUgifsJ37Tf05E/5XMqaPverQb8LOLEXgVUbrrWx/BjSi2Dg==","signatures":[{"sig":"MEQCIFSfpyNtlw/D4+pVuQ1tH3VnCQUuqgFqi+TN45ApHcU5AiAPpMACVxmztyAcfXxlfcuv9PtMKKuia+4dzKuZzC6aOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291113},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"4578976d35814a0a69068ff905a4f6ca3741995e","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.34_1769903191733_0.19626786256312156","host":"s3://npm-registry-packages-npm-production"}},"2026.1.35":{"name":"2ndbrain","version":"2026.1.35","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.35","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"56ee13e1df6a4febafa117b0170e03a28a119ff0","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.35.tgz","fileCount":33,"integrity":"sha512-IQNPinuReOAJvM9RtVOyinEXrSaTmK4eOHgRwSL7StDOvqHUpTY5batzv5xWSYHMSS5M5FLCSdp0QJIGdT4t0w==","signatures":[{"sig":"MEQCIGDm5qpFmLOtWJZKpSaHd1RH9XiKelwQqr4EtzgsmI/CAiBO5jwV6mWUPS19muPPvdivUROzhenZIc5L3UTjYbwafg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291697},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"6e4945c6824b5a438a0885acbed5d4d10985282f","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.35_1769904923113_0.33293963728332243","host":"s3://npm-registry-packages-npm-production"}},"2026.1.36":{"name":"2ndbrain","version":"2026.1.36","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.36","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"71b0eddb11cc02dded595fe8a4c551c3e7256416","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.36.tgz","fileCount":33,"integrity":"sha512-106VMltiEiDH33Q6S4xYriH81TFGu5pG7CzCjklUMgNA4tsQNzJNNOsqFVXPkHvNV7MautgpUKNHVzUTyn0amg==","signatures":[{"sig":"MEQCIE0DLIzs9BYorCrnlqFKvkKyJnX9wHKXfoHM4V4b5bcaAiBRxvcCa3zzbb/NMYHF255VcwM4IQtwV7hqL2//Bueh1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292750},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"c509df53c8f79ca545bbce18d1b420bdcc6eea0b","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.36_1769906415086_0.8335623928931393","host":"s3://npm-registry-packages-npm-production"}},"2026.1.37":{"name":"2ndbrain","version":"2026.1.37","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.1.37","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"eecc3ea048d36308c54270fccd922820932286ff","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.1.37.tgz","fileCount":33,"integrity":"sha512-Q3BIiPeLkLC+xqRECaLZHtTFyoz79Pei30c8+rbLhyTTC9qMiEU6rp+YsXCokUkwgSmuE3dbU1SHDe+KBbSLiw==","signatures":[{"sig":"MEUCIQCSkwdIXamF0H/lxKYT0gPtiuKjCpfek4YV5qV0XrVE/gIgCehup0qvSWPY17FASV4rOVz772r7iixzNUefyGVqF5c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292755},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"3b1b1218b31bc73ed4baee0d5b78837fb767930c","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.1.37_1769907411881_0.48749185605538137","host":"s3://npm-registry-packages-npm-production"}},"2026.2.1":{"name":"2ndbrain","version":"2026.2.1","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.2.1","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"0f35cfd82aa40210a4bcbae66618634b7e249c3d","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.2.1.tgz","fileCount":33,"integrity":"sha512-TZ2xAeIOEyj/5T4Lpbcf04xiCeSgCNDWKT/kAAIW3UbFp7yjA3aXivWEU2XGHoMgeDkUOUhWa/b7qlUOZJBD6g==","signatures":[{"sig":"MEUCIDbRT210g8iRIjeajQZjs9R2tL7SEI1hz9cVDMgSgrpvAiEAu3aC0NOM3O77E5S7iPZQ+lpugRw6YdMDj8FKLeM6rLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292966},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"8619ad4760ebb0f2421ef93c479b3d0ad9a87b03","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.2.1_1769954289870_0.7794111076826213","host":"s3://npm-registry-packages-npm-production"}},"2026.2.2":{"name":"2ndbrain","version":"2026.2.2","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.2.2","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"f8b39dedf7939651950398c168be6467e7737855","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.2.2.tgz","fileCount":35,"integrity":"sha512-jkin4wbdl8XO9gM7I7K9YIvXI27dLRPBLRu/smVQbIjJqJFf4//a0CKht7WxRZW+AoaffH7Dbui/Ezx1WR93EA==","signatures":[{"sig":"MEUCIQCzbprPk0xhx3ImAFLn0SQOWf//pR0PTGa66755vtztyAIgVP3D4HE/vHh+EH/a9CKyRBLcV4QIdYyQgOzZdlTDSJg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336206},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"e1ce01afea872b93cf18e2ba4ac40a5c15e23f80","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.2.2_1769985428025_0.12766824669609522","host":"s3://npm-registry-packages-npm-production"}},"2026.2.3":{"name":"2ndbrain","version":"2026.2.3","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","_id":"2ndbrain@2026.2.3","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"homepage":"https://github.com/fingerskier/2ndbrain#readme","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"bin":{"2ndbrain":"src/index.js"},"dist":{"shasum":"0450ec83c277699e13db440587a1d5bb232d75d4","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.2.3.tgz","fileCount":35,"integrity":"sha512-hcA9wUcRx7XCDCg+7HdKs2AfhHLxvZlghYXP+A0X/WVT4ydNVWlINXJIB565EsvLBiOack8SLqIUSBCUxpDdmg==","signatures":[{"sig":"MEYCIQDZ7ZwZcp6SIgnpAkEzH1gv82e/m7tEcSfjvDjuq8UAbAIhAN+hvy4uQ6RCKnGIvMNkZQoOtkVsm8fD6+oCRN9f/vnu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339155},"main":"src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"63191e4df213f2dfb24d19d79aff36964ac85ee7","scripts":{"test":"node --test src/**/*.test.js","start":"node src/index.js"},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"repository":{"url":"git+https://github.com/fingerskier/2ndbrain.git","type":"git"},"_npmVersion":"10.9.2","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","open":"^10.1.0","dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2ndbrain_2026.2.3_1769986830351_0.6139065821528225","host":"s3://npm-registry-packages-npm-production"}},"2026.2.4":{"name":"2ndbrain","version":"2026.2.4","description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","main":"src/index.js","bin":{"2ndbrain":"src/index.js"},"type":"module","scripts":{"start":"node src/index.js","test":"node --test src/**/*.test.js"},"repository":{"type":"git","url":"git+https://github.com/fingerskier/2ndbrain.git"},"keywords":["telegram","claude","ai","assistant","knowledge-graph"],"author":"","license":"MIT","bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"homepage":"https://github.com/fingerskier/2ndbrain#readme","dependencies":{"dotenv":"^16.4.7","express":"^4.21.2","node-cron":"^4.2.1","open":"^10.1.0","pg":"^8.13.1"},"engines":{"node":">=20"},"_id":"2ndbrain@2026.2.4","gitHead":"a9235551cf1c1540296e01289e96d95f430b9b24","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-QDTi4kENjEVgB6XppJgpTVmnnUBJVFyAtRwdrKJio4fDjHtmUuqijzxX6YexPf8ZSZen6r9OYpYtVl8Rg8mNtA==","shasum":"fc94e1e47cc7225a6543e1efc88033afbad87bb6","tarball":"https://registry.npmjs.org/2ndbrain/-/2ndbrain-2026.2.4.tgz","fileCount":36,"unpackedSize":353245,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIALKuq6/LGyX3p6J/NnnLmMoaXTyhW2457++FmmlT+ZYAiEA7vwDeAfZpmfspmYRZTUNyKE6BEFPcFLkVjDQFEwfpU8="}]},"_npmUser":{"name":"fingerskier","email":"fingerskier@gmail.com"},"directories":{},"maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/2ndbrain_2026.2.4_1769989116871_0.7381458836275392"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-30T20:29:38.967Z","modified":"2026-02-01T23:38:37.133Z","1.0.0":"2026-01-15T06:27:19.669Z","1.1.0":"2026-01-15T07:15:36.223Z","1.1.1":"2026-01-15T07:20:09.448Z","1.1.2":"2026-01-15T07:32:40.589Z","1.1.3":"2026-01-15T07:42:19.710Z","1.1.4":"2026-01-16T02:55:31.289Z","2026.1.30":"2026-01-30T20:29:39.108Z","2026.1.31":"2026-01-31T15:45:17.451Z","2026.1.32":"2026-01-31T16:35:47.731Z","2026.1.33":"2026-01-31T20:45:01.407Z","2026.1.34":"2026-01-31T23:46:31.894Z","2026.1.35":"2026-02-01T00:15:23.303Z","2026.1.36":"2026-02-01T00:40:15.240Z","2026.1.37":"2026-02-01T00:56:52.031Z","2026.2.1":"2026-02-01T13:58:10.022Z","2026.2.2":"2026-02-01T22:37:08.198Z","2026.2.3":"2026-02-01T23:00:30.538Z","2026.2.4":"2026-02-01T23:38:37.027Z"},"bugs":{"url":"https://github.com/fingerskier/2ndbrain/issues"},"license":"MIT","homepage":"https://github.com/fingerskier/2ndbrain#readme","keywords":["telegram","claude","ai","assistant","knowledge-graph"],"repository":{"type":"git","url":"git+https://github.com/fingerskier/2ndbrain.git"},"description":"Always-on Node.js service bridging Telegram messaging to Claude AI with knowledge graph, journal, project management, and semantic search.","maintainers":[{"name":"fingerskier","email":"fingerskier@gmail.com"}],"readme":"# 2ndbrain\r\n\r\nA personal, always-on AI assistant that lives on your local network. **2ndbrain** bridges Telegram to Claude via a Node.js service, giving you a private conversational AI with persistent memory, a knowledge platform, and full access to local tools — all from your phone.\r\n\r\nYou set it up on a device on your LAN (e.g. a Raspberry Pi 5), and you — and only you — interact with it by chatting over Telegram.\r\n\r\n\r\n## How It Works\r\n\r\n```\r\nTelegram  ──long-polling──▸  2ndbrain  ──subprocess──▸  Claude CLI\r\n                                │                          │\r\n                                │                     MCP tools\r\n                                │                     (postgres, embeddings,\r\n                                │                      shell commands)\r\n                                │\r\n                           PostgreSQL\r\n                         (history, knowledge,\r\n                          projects, journal,\r\n                          embeddings)\r\n```\r\n\r\n1. Messages arrive from Telegram via long-polling (no public URL required)\r\n2. Slash commands are routed to built-in handlers; everything else goes to Claude\r\n3. Claude is spawned as a subprocess with access to MCP tools (database, semantic search, whitelisted shell commands)\r\n4. Responses stream back through Telegram with a typing indicator\r\n5. All conversations are persisted in PostgreSQL for recall and search\r\n\r\n\r\n## Integrations\r\n\r\n| Integration | Role |\r\n|---|---|\r\n| **Telegram Bot API** | Messaging interface — long-polling, attachments (photos, docs, audio, video, voice), typing indicators |\r\n| **Claude CLI** | Conversational AI — spawned as subprocess with streaming JSON, thinking mode, session continuity |\r\n| **PostgreSQL + pgvector** | Persistent storage — conversation history, knowledge graph, projects, journal, vector embeddings with HNSW indexing |\r\n| **Model Context Protocol (MCP)** | Tool framework — gives Claude direct access to the database (`pg` server) and a custom `embed_query` tool for semantic search |\r\n| **OpenAI Embeddings API** | Vector embeddings — optional provider for semantic search (configurable model and dimensions) |\r\n| **Express** | Web admin dashboard — settings, environment config, activity logs (LAN-only) |\r\n\r\n\r\n## Features\r\n\r\n### Conversation\r\n- Persistent conversation history with session tracking\r\n- Auto-compaction when history exceeds a configurable threshold\r\n- Rate limiting for both Claude calls and Telegram sends\r\n- Attachment storage (photos, documents, audio, video, voice) in `~/data`\r\n\r\n### Skills (Claude-managed via MCP)\r\n\r\n| Skill | Description |\r\n|---|---|\r\n| **Knowledge Graph** | Entities and relationships with full-text search and embedding queue |\r\n| **Journal** | Timestamped personal notes with semantic search |\r\n| **Project Management** | Projects with specifications and issues, completion tracking |\r\n| **Scheduler** | Recurring tasks via cron expressions with timezone support |\r\n| **Recall** | Unified semantic search across journal, knowledge, projects, and history |\r\n| **System Ops** | Read-only diagnostics — memory, disk, uptime, database status, logs |\r\n\r\n### Slash Commands\r\n\r\n| Command | Action |\r\n|---|---|\r\n| `/status` | Current system status |\r\n| `/health` | Health check across all subsystems |\r\n| `/restart` | Restart the service |\r\n| `/reboot` | Reboot the host |\r\n| `/stop` | Graceful shutdown |\r\n| `/new` | Start a new conversation session |\r\n| `/help` | List available commands |\r\n\r\n### Security\r\n- Whitelisted Telegram users (multi-layered)\r\n- Whitelisted MCP tools and shell commands\r\n- Configurable file-edit path restrictions\r\n- LAN-only web admin interface\r\n\r\n### Lifecycle Hooks\r\nCustom scripts that run at startup, shutdown, pre/post Claude invocation, and on errors.\r\n\r\n\r\n## Setup\r\n\r\n1. Ensure **PostgreSQL** is running with the `pgvector` extension\r\n2. Ensure **claude-cli** is installed and configured\r\n3. Create a `.env` file at `~/.2ndbrain/.env` (see Configuration below)\r\n4. Start the service: `npx 2ndbrain`\r\n5. (Optional) Configure to start on boot via systemd or similar\r\n\r\n\r\n## Configuration\r\n\r\nAll configuration lives in `~/.2ndbrain/.env`:\r\n\r\n| Category | Key Variables |\r\n|---|---|\r\n| **Required** | `TELEGRAM_BOT_TOKEN`, `TELEGRAM_ALLOWED_USERS`, `DATABASE_URL` |\r\n| **Claude** | `CLAUDE_MODEL`, `CLAUDE_THINKING`, `CLAUDE_TIMEOUT`, `CLAUDE_MAX_BUDGET` |\r\n| **MCP** | `MCP_CONFIG_PATH`, `MCP_TOOLS_WHITELIST`, `COMMANDS_WHITELIST` |\r\n| **Embeddings** | `EMBEDDING_PROVIDER`, `EMBEDDING_API_KEY`, `EMBEDDING_MODEL`, `EMBEDDING_DIMENSIONS` |\r\n| **Rate Limits** | `RATE_LIMIT_CLAUDE` (default 10/min), `RATE_LIMIT_TELEGRAM` (default 30/min) |\r\n| **Web Admin** | `WEB_PORT`, `WEB_BIND`, `AUTO_OPEN_BROWSER` |\r\n| **Storage** | `DATA_DIR` (default `~/data`) |\r\n| **Conversation** | `HISTORY_COMPACT_THRESHOLD` (default 100) |\r\n| **Security** | `FILE_EDIT_PATHS` |\r\n| **Logging** | `LOG_LEVEL` |\r\n\r\n\r\n## Data Schema\r\n\r\n- **Projects** (id, created, updated, name)\r\n  - Specifications (id, created, updated, project_id, note)\r\n  - Issues (id, created, updated, note, completed)\r\n- **Knowledge Graph**\r\n  - Nodes (id, created, updated, name, note)\r\n  - Edges (id, created, updated, node1_id, node2_id, name)\r\n- **Journal** (id, created, updated, note)\r\n- **Conversation Messages** (id, created, updated, user_id, message_id, content, session_id)\r\n- **System Logs** (id, timestamp, content, level)\r\n- **Attachments** (id, created, updated, file_path, metadata)\r\n- **Scheduled Tasks** (id, cron_expression, timezone, next_run, error tracking)\r\n- **Embeddings** (id, created, updated, entity_type, vector)\r\n","readmeFilename":"README.md"}