{"_id":"keep","_rev":"27-a18500d0dd81343c76f1d0b1b139d245","name":"keep","dist-tags":{"latest":"2.5.3"},"versions":{"0.0.0":{"name":"keep","version":"0.0.0","author":{"url":"dominictarr.com","name":"Dominic Tarr","email":"dominic.tarr@gmail.com"},"_id":"keep@0.0.0","maintainers":[{"name":"dominictarr","email":"dominic.tarr@gmail.com"}],"homepage":"github.com/dominictarr/keep","dist":{"shasum":"1e06331e5dc42c0e8206bad3a8f53437bf1c485f","tarball":"https://registry.npmjs.org/keep/-/keep-0.0.0.tgz","integrity":"sha512-kMTHOkuprD/Mh/hJ9o7efH8GOZKlc9bJrlutFduFqM0mFrjqXQnAAhUK+OnpgpiPKpfLk1b7QvEioz1NkvNb4w==","signatures":[{"sig":"MEYCIQD6lnPA8NpUZ98VL0QrjEkSXITQmZwKv6M9p7grfAllhQIhAOLk+g+EL+Kkr4nIx1ypKfZ3yQS19SmfpZeezT/bxCsw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"engines":{"node":"*"},"scripts":{"test":"tap test/*"},"_npmUser":{"name":"dominictarr","email":"dominic.tarr@gmail.com"},"repository":{"url":""},"_npmVersion":"1.1.0-3","description":"in memory data with append only persistance","directories":{},"_nodeVersion":"v0.6.10","dependencies":{},"_defaultsLoaded":true,"devDependencies":{},"_engineSupported":true,"optionalDependencies":{}},"0.0.1":{"name":"keep","version":"0.0.1","author":{"url":"dominictarr.com","name":"Dominic Tarr","email":"dominic.tarr@gmail.com"},"_id":"keep@0.0.1","maintainers":[{"name":"dominictarr","email":"dominic.tarr@gmail.com"}],"homepage":"github.com/dominictarr/keep","dist":{"shasum":"b896574e9343c6801b883930758335587bd0cf71","tarball":"https://registry.npmjs.org/keep/-/keep-0.0.1.tgz","integrity":"sha512-5nmAKXozb+jY1tvm5QIGwQAucf8R7GB+u6z/Zr2nxzbva9TBlacftHYQ0W3GG1tjQK2e3WziTWMJp8/MWnaw8A==","signatures":[{"sig":"MEQCIGZ3E6AZ/SOA1DcibgbO65B43OjMzSzGVUC5k19ivy8jAiAtPJ5r2nQzQw3xnL71Ap/t4pnO/apwjHU25gVmOlr8eQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"engines":{"node":"*"},"scripts":{"test":"tap test/*"},"_npmUser":{"name":"dominictarr","email":"dominic.tarr@gmail.com"},"repository":{"url":"git:github.com/dominictarr/keep.git"},"_npmVersion":"1.1.0-3","description":"in memory data with append only persistance","directories":{},"_nodeVersion":"v0.6.10","dependencies":{"ubelt":"3.1"},"_defaultsLoaded":true,"devDependencies":{"tap":"0.2"},"_engineSupported":true,"optionalDependencies":{}},"1.0.0":{"name":"keep","version":"1.0.0","keywords":[],"author":{"name":"siddharthkp"},"license":"MIT","_id":"keep@1.0.0","maintainers":[{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"}],"dist":{"shasum":"47ddc2fd4a5fc3a95252cf68fe2bd1c2440b1911","tarball":"https://registry.npmjs.org/keep/-/keep-1.0.0.tgz","fileCount":2,"integrity":"sha512-sPks79nsvx5JoFUiyhMld5nqdltR9Q52V797B2nS+3xXT6Blde8VuuJj9MKVv1q1f+XHB/E4zpfMHDkkzl6K9g==","signatures":[{"sig":"MEUCIQCz5hH1nU4VQ0xRSw6R5Vi0YdcqQucpOzLUZ/3TOImLUwIgEflOF45IvKyTVLAz7bbn8VvwX4D3UtKjOUCBo8j+hrk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ//+CRA9TVsSAnZWagAAQLcP/3LGjfiHnnXCCzhIN2yR\nK7AA7SfkVrhT8AEB8am71eypIPc1DR/yjl9B1uI8hqQeqcpntXVr2zNtBzvM\nLUORQPS0KFl6DjPxW7aEv9jSRrvy5Ld6gAth5OPEkVn02miOAg49WWC0lY5m\nyuqyoeCHIAGpO5M+3pZLb+GWxrVFwqwcO2YYHcW7Ei/BK4vI1wxU+lKgkoGT\nSiw6IxBAx6aEdwYyqAOhTeoQEutL/NI18iCJ6apOva2YbA42TEGJrUDYX3ey\nlKbbkdRiI6tBHS4koCX6jJXTSvkFTPkfxvrmMkDNKDkE1IdDOrQDHt3b8b1i\nlM7Jh8NmaX2wVc53wZi8pQdVrqvDIUPighM3MPVJsFnEFRUAQzv50p/3U+el\nuDtFv7obT6RPzxaeOaGP1Yx8wzpHe7m7/MR751t0DbqMIaKJgCHzvgs8zQih\n2P8MO9PQIsOLjidBnK5qT3RMx8oRtSuURJuyDZ2RbXdD5D59zKHvTh8wWtcG\nHph3dwnlQLHki1iLJuv0MC7SbVP62UYq0PmSzpdWFxHAyG64iuoUmgoOB+nW\nqOzhjf0ksXc+eteji6V1GANk7O6VoxD9E7NcJmMBIhstzZIQxL57o0ZTjfhy\nhmRBmN/8dQsnPCr+mMsThjDChzwSlEbTiylEYB0cJqFiy1BvCZYX0hNohXiD\nyPiw\r\n=OHrQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"},"_npmVersion":"5.7.1","description":"","directories":{},"_nodeVersion":"8.9.0","dependencies":{"axios":"0.17.0","dotenv":"4.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_1.0.0_1529348093985_0.2754122539025061","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"keep","version":"1.0.1","keywords":[],"author":{"name":"siddharthkp"},"license":"MIT","_id":"keep@1.0.1","maintainers":[{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"}],"dist":{"shasum":"c40a7fe66e76e8a64494166f704a36d2cb29582e","tarball":"https://registry.npmjs.org/keep/-/keep-1.0.1.tgz","fileCount":2,"integrity":"sha512-ioAtgmrMlLDH/7pz21/PXJTinloYVXM+618k41j7Obi0uMbvIq8sOA0NJDTwcLihqY+ln7Y/df6yur7kHGDU+A==","signatures":[{"sig":"MEYCIQDZun/yg+8T6/VgEdURWs1fhgaOw8ckcpaTMbzB9XBCMgIhAPmWNbngbXjCriFOxwcqvcr1bPcQGtqkofWbrMiiQxst","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKAodCRA9TVsSAnZWagAAd68P/3vConzg7XERTLZUFU3U\ntvuCR5l2VuwphgtJHCXoYeGwamMNazxso0DmRZi1On9FP/KHYpfS3oQpT9Hb\n6GWybW5mt+EegrpXkE5EYMpvhJO4xeVnFWHcREfi5r24UCCA9GzEKMARcI6d\n/dbOE8QVwUmxMPNMzSXPjb5fHnEAE3A2kBkvHyIrM3oLTQFIc1gH1+Axky3p\nhXw2c6yiCWlEnZM7UxAVjsLE8qK5upDS4L1Jp7BdNztFEjNlsKePGBnUQtz3\nQHAHOh2U7aznxw0PTMybgaH76ZsF4/GF6zgZWgJfag/8UP5tNMxjEVClqHqI\nxR1YC0UlRY++Iwzcs+PINuhEZC6mxeSHGdJC0gAJFSbZDfboRBqxvZXD9QVJ\nLMqI9/lnGmVEpIvnVyGzDOWwMdyqNak+fOzq98wj0511voQiJyHMxRb2W9zO\nRbPkB+jmBmDqDDdvmvYbobnb2HK/VOrAGZGGWff2tA5V7ujeDyGBpnDHB2gU\nbnoJuMHY4HDwg9bCWkKT7mYbdZrttMeSs0YgnDzX8XZ6FyrSp3Rclfmh9inr\nsadJOG53HhkvqFB2nA/BAn+VFvfnpyZvO9klo0QdY16mz9P8irLQxpWZacvW\ns6K5OHZEIAEOqc3Yf+3eGmHY5U+rWn+zvHcou7PqzYd5FuZGJLM+mIL7NUku\nOdKu\r\n=aO5N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"},"_npmVersion":"5.7.1","description":"","directories":{},"_nodeVersion":"8.9.0","dependencies":{"axios":"0.17.0","dotenv":"4.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_1.0.1_1529350684882_0.8121779195062846","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"keep","version":"1.0.2","keywords":[],"author":{"name":"siddharthkp"},"license":"MIT","_id":"keep@1.0.2","maintainers":[{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"}],"dist":{"shasum":"ae3a7f8ed815747a92f1f9dec8e0d5e621cda0a6","tarball":"https://registry.npmjs.org/keep/-/keep-1.0.2.tgz","fileCount":2,"integrity":"sha512-FvKLJehc3seSuU0eIoyVj4ka6i1zTRgob4xax3tQNBgTm3Qu+0sTA3lTpMyr8smvrdiWMQqSMP9KjGdmYUJJzw==","signatures":[{"sig":"MEYCIQD6dAXLqM54RpL4XQbRqaCyd1JK34JEfXtHZPuUwNE1zAIhANMLnsOvmcyL0hRJQc1Ad6Q6zkb2wZdElFocsmuEciKs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKAqPCRA9TVsSAnZWagAANoIP/jIKjgLlOYXaW92oH4tZ\nwDDZ0d8/dD7ZnJ48sEqWg4emk3T/JqdCBSSA6dPS9x7plYOR+PG3NqL7poW0\n6IMMsTJ8WNmhdkV15bHkm9thMUBQ1Gx1LKaYoCrIzHGkNt1BhiCcE5pyIiIl\nbYmiie+bLvuAFHfApRac8lc6xTCdSuuY3QAQjFAyP7ppk7qXtm7fF9ad/If8\nBOI9C19ZJ+Zd9zciA37qM6NoC/yvnbc0tOHamRdW486oht0lqprgU9PUWZwu\nfUjyPB0b2CfdnL9dxwdgfSX+o61TTKuE0DkmmTi8l1XCIhmgM6RozjkIzcuA\nTaBcrTXPEu2afcOB19xKJ4duqlc7CpHAv0LfKd1+3cNQRqPaVl0pBlO5YfxO\n1i/VGKXcGhMowjD/3XB5krkHSkcvJL7I659lpokkIQPBuPza+K6Ugmpp4as+\njbkT01WEKVaXikXQEWHm21kLQCUwXHXwwREPqCRiGsDQ3K3TrMCPqtSrd/8t\nPuKZq/QHCf5IROaPn/qynxhQZliHBammvRumoVm7MXUHfEgicmqSjEGSdgET\nW6jPrFNJFYLPKfGOe+YNLuHVdilGVIKdtqXMi2hQQ2zeNdpYy98oXsplopKj\nrR271oYDrnq9eo+r2U476T+VJf0Fr1F3QnOw0k2nvL6ni8eOmm2308gar+Tm\nSA6+\r\n=e7Wq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"},"_npmVersion":"5.7.1","description":"","directories":{},"_nodeVersion":"8.9.0","dependencies":{"axios":"0.17.0","dotenv":"4.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_1.0.2_1529350799070_0.4588562994253633","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"keep","version":"1.0.3","keywords":[],"author":{"name":"siddharthkp"},"license":"MIT","_id":"keep@1.0.3","maintainers":[{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"}],"dist":{"shasum":"c5a12ee2362597f700bdfd29501210846861cada","tarball":"https://registry.npmjs.org/keep/-/keep-1.0.3.tgz","fileCount":2,"integrity":"sha512-r3Nq2a7QxYbis80vgMp7J1rmdjuGpc2tKOG7XTfs2l8Tg7V/yOlfZ9UpCZUXPNSGDQBQ6igzuE8Lirbs1y4a6w==","signatures":[{"sig":"MEUCIGxQSGG/DvnLB4Hm4X/5uecTES0jdHmyIg9Ta4epRH/gAiEA069krVyHCuqX6xT1LieYG5MkRCZmOXsOfh96rHqoeXU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKAr7CRA9TVsSAnZWagAARIAP/AnxpQo6qL/ChkRMoNk+\nbCCcZLpq3/i/aeHzZ71orAbdsB7hiP8GMUo6q3/SnwWOSOi/5jn6aPtPcEkO\ne90NAGIpglsYioX7TQh56NecHIcqU3lS4VQaqGsmP5jpaNxz7gC/Q+JF7QQx\n9sEaGH9sXNk5WIb5QJmI4bfsN5tCZCNMk4lKZuqh0G/NpdCtbC4GmEaGOS8X\n8Yk7pq9H/y/L9pQh1v/wxth+nf0UE6qKkG+KLDn/NA5vu3Y+4P4StYKNXp5n\npmgv5tJFIrVK3wuWfJ52ClXSX8BIMv1ewHVMqCG96jU1fRKYlxj3DtsAVL3a\niUkb7AkW2Tq8As6NHUqVTFBQJhapJKCboT0egpHlr5odSXLw6p8D4DFWkM2/\nD0B6ftPbkOnFrzYebtcFpUf4Mu4X9YcPOpAFiBBlc9aSuTmM0DWmCVGchx/6\n6VwIZzvBWShii5Fm9KwTTaVtWJqHFETE6Dj2MqeSJ5KeSPsoysKY+47VsjO3\nlI5C8tJweyEg+YuCdtGSp1rVWR7lolbLr3RyL9DJLuxS2f81wG9/snS+iSYx\nM0ZOOcI7pIux0MAGfB+t101uhfPE6Br1XsThDhcVFge+UFHRm61oAEwDN7Vh\nzbZfN2sg4QMDDi6ECylkkatEDXEoJLtLmzfkgR/LKG/gmfxA1jMw8UNJ3hTF\nIthH\r\n=aUY/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"siddharthkp","email":"siddharth.kshetrapal@gmail.com"},"_npmVersion":"5.7.1","description":"","directories":{},"_nodeVersion":"8.9.0","dependencies":{"axios":"0.17.0","dotenv":"4.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_1.0.3_1529350906586_0.6450674480273713","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"keep","version":"2.0.0","keywords":["keep","markdown","cli","bookmarks","web-content","notes","agents","personal-context"],"author":{"name":"Ian Nuttall"},"license":"MIT","_id":"keep@2.0.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bugs":{"url":"https://github.com/iannuttall/keep/issues"},"bin":{"keep":"bin/keep.js"},"dist":{"shasum":"fb11d1807256efda9f0ff71ce4183c76f5028f96","tarball":"https://registry.npmjs.org/keep/-/keep-2.0.0.tgz","fileCount":12,"integrity":"sha512-zbZc1w3fe4SMAr0kDrEV3DwQqFy+fB09Wztp3SiwIeYRLc6PnPHPA4bMkhseQ03it1GNSSjoDBiznujxitz2sA==","signatures":[{"sig":"MEYCIQDS8oK8qb10Y0LeBflbz8UQOnHpQzup/hCojt1TM4O6AgIhANjT2oA7lMhh6hlebzIdNXnqiVg8qciyF4wW6KJxzyyi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129596},"type":"module","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"iannuttall","email":"npm@ian.is"},"repository":{"url":"git+https://github.com/iannuttall/keep.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"Search and update Keep notes, saved items, sources, and personal context from the terminal","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.0.0_1785776083103_0.9669939281515849","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"keep","version":"2.1.0","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.1.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"00fce27d1ab90da5a8929a1a2cb2fd845a1165c1","tarball":"https://registry.npmjs.org/keep/-/keep-2.1.0.tgz","fileCount":14,"integrity":"sha512-fbR5QYk6vG5wHwA690imMluF+K4sCMqbKg5YoXZggq31sqOcAdGuhQqFLZUHEximowh+uB1iBSBL15vlwWeJgw==","signatures":[{"sig":"MEUCIC4vsCxxkm6hvcqstkzKgiuuauv7/1LB52+bt9uJJ7T2AiEAr/9DyPchccA/WlqXfdZ/oKK72kLAE9TcLdAbllVhWYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150421},"type":"module","engines":{"node":">=18"},"gitHead":"9ae2b7e92759f4a15cce77522f51d325726ba2b7","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.1.0_1786098414756_0.3583444580058197","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"keep","version":"2.2.0","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.2.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"e14d9710edfe9b04ce684d58ddee4706e527163f","tarball":"https://registry.npmjs.org/keep/-/keep-2.2.0.tgz","fileCount":15,"integrity":"sha512-6bxOW/ajHU0wmJTf7UrZJ/9YWW+x6/3poch8bHiYuYvLmOoXtDdZPgz3vxwQ1EYfC6i7+wfJY1a1UK1/Q0DJiw==","signatures":[{"sig":"MEQCIE5idO2WEKGxumlEwkONUpBB9O95GuTBqHyCk9cJsUNXAiAwlV5LIHJiA+ZcuA7T1AsoGVMn0j1HXhAQWlIy8qbkQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159726},"type":"module","engines":{"node":">=18"},"gitHead":"1d1e713103d997cbb955a3e236bccb10e5d31d0e","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.2.0_1786109304076_0.9247619635926467","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"keep","version":"2.2.1","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.2.1","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"12329bed88ff563333713e166a27bc572f4a9758","tarball":"https://registry.npmjs.org/keep/-/keep-2.2.1.tgz","fileCount":15,"integrity":"sha512-XSDn1ZZK8kHqGbz/Q3loJ0/MuKuAzhbnyiol14zh2kTVjfaSu664vAcVMnENVL8sX3zHp8zWoxTyctApiIjBZw==","signatures":[{"sig":"MEUCIQDnGzzalaPl39b4EfxyQZk3eG7voh6uvGR8a7Y8UEGsdQIgXJl5/l93psAc7dsOZkK0LfgYeCbl1VRAXxONMcROCoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161713},"type":"module","engines":{"node":">=18"},"gitHead":"879fa36164f30848f6fd351cfca3b9475968cbad","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.2.1_1786111952013_0.3709513509614575","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"keep","version":"2.3.0","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.3.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"022244734aaa7779241bedc82325cf1c43bb22d5","tarball":"https://registry.npmjs.org/keep/-/keep-2.3.0.tgz","fileCount":15,"integrity":"sha512-Zqmt6qz5LCLXWgxBj+u0WxLQd54hKf1DGvwm2+Nj3VJT9mXWwh5FYB2+Ak5kGBMQi2RBh2w7nLpZBcE5Yz40dw==","signatures":[{"sig":"MEYCIQDiVzMmiLuprj8C9hsfahREQ5QNn5+Iif423qKBAuMMlAIhAI30PstwIOrhLu5OM9/gd/xIsyxGl6TRBSUqlD63aKe3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164317},"type":"module","engines":{"node":">=18"},"gitHead":"ebe4c1224aed721ec7bd0559a39ca6571823f6ff","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.3.0_1786116353687_0.5637777223141933","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"keep","version":"2.4.0","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.4.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"17594b284a7f4b1d85b71961b22478f7f7e5cd5f","tarball":"https://registry.npmjs.org/keep/-/keep-2.4.0.tgz","fileCount":16,"integrity":"sha512-j9hdMdvOJEpghmTuJgt1HpRwvxBsug1YIosdkQT69vvVKmuy4QmosRx9hYhW5ZI1JJ150hmjLB3ImImjpB9wIg==","signatures":[{"sig":"MEUCIAIiM+QZyhm26ngWztBfhx4O/Ox3QmRCw4IDKt8fz9EUAiEA2y6icof6cJFPmaL6k0606pJoY+j/qHoTsol98xgSdWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168340},"type":"module","engines":{"node":">=18"},"gitHead":"c49893981f93644d1fb22000620d91771e7b66c1","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.4.0_1786119872918_0.5904259862859182","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"keep","version":"2.5.0","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.5.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"f200e81102aa52092ac735a9d5d385269fcb785e","tarball":"https://registry.npmjs.org/keep/-/keep-2.5.0.tgz","fileCount":16,"integrity":"sha512-cOecLLkXlpPys3gfv5dZhnMCnDJ61HqZUYqAycN8w5ZSZ2BrEfVuGXIUImkxg4F2jmSUVc1MoNJaBfnaETsj7w==","signatures":[{"sig":"MEQCIC59vGlnu4WwST2fC10/fsS4mtwSCkFGcqPRgM1th1toAiB6lm284F+5xKG1hpvvm+Ym++BcDJ1DDaYPiuuikHMWmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168803},"type":"module","engines":{"node":">=18"},"gitHead":"5e758783183a5fccec1056733b9dd72f217f2231","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Shared memory for you and your AI agents. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.5.0_1786121222448_0.9669115404193704","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"keep","version":"2.5.1","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.5.1","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"775f581d2346a23d6d11ac77f958af39784bb32d","tarball":"https://registry.npmjs.org/keep/-/keep-2.5.1.tgz","fileCount":16,"integrity":"sha512-zf6csz9YifSy8HJrTNirqJjU50MEoPCr2cUHJ5aWkKqWbx0WLKhTSws7kr1PSZlQBkyUcPCba49tPtoHzFqTzQ==","signatures":[{"sig":"MEYCIQCbFtYlZriS+7p13E3WyArIcXza0v49FkcaiYDO0Q8ShwIhANwH00ssfQVe2/O+CJkYIF25R6HdYa5GHC7znv3qqeSf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169236},"type":"module","engines":{"node":">=18"},"gitHead":"ffd4187bf155735afb112012bea2b9016c5b3183","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Stop re-explaining your project to every AI agent. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.5.1_1786636119414_0.10702848972756507","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"keep","version":"2.5.2","keywords":["keep","markdown","cli","notes","agents","agent-memory","shared-memory","context"],"author":{"name":"Ian Nuttall"},"_id":"keep@2.5.2","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://keep.md","bin":{"keep":"bin/keep.js"},"dist":{"shasum":"00dc859f59270a5a1b8688ef2eea24f511cb1af0","tarball":"https://registry.npmjs.org/keep/-/keep-2.5.2.tgz","fileCount":16,"integrity":"sha512-vV7E4HVAKfVERzd59RY6KGQjDn4YC/PABXWBlosJk8vEKGZrx8dgP5K6hk+vu5cNo1ldNwz/Gv/tVZYMVydi5g==","signatures":[{"sig":"MEUCIQCijyjhg/ZzOIy2FDknbKiI9j8zy8VWjj5P/lZw1Rxc0wIgQry/8fBad4qQqbmPeHiK7SKd1Py8OmHiYIlxq9CFcLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169474},"type":"module","engines":{"node":">=18"},"gitHead":"b4f1d289e0a67c63c95fded0a622853cacb5de79","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"_npmVersion":"11.19.0","description":"Stop re-explaining your project to every AI agent. Search and update Keep notes, context, and handoffs from the terminal.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@clack/prompts":"^1.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keep_2.5.2_1787123028158_0.8431935710099137","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"name":"keep","version":"2.5.3","description":"Save anything as Markdown, then search, read, and update it from the terminal or an AI agent.","type":"module","homepage":"https://keep.md","author":{"name":"Ian Nuttall"},"publishConfig":{"access":"public"},"keywords":["keep","markdown","cli","notes","agents","capture","reader"],"bin":{"keep":"bin/keep.js"},"scripts":{"test":"node --test"},"engines":{"node":">=18"},"dependencies":{"@clack/prompts":"^1.5.1"},"gitHead":"ca1115fd84ab4a5f62328a38038c86f9220fba28","_id":"keep@2.5.3","_nodeVersion":"24.19.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-FD7E/xNgiiRUydGI9Ga+uvxCrSzchTCgQ7BHlRyLObaR9QGj3/05VljlBXzcvOY8nErOUU5Il6vW56QrbrcJwg==","shasum":"ba9480327a7df83aecaeab8e6c2fff426689fa1c","tarball":"https://registry.npmjs.org/keep/-/keep-2.5.3.tgz","fileCount":16,"unpackedSize":169836,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCmoB3621xIkX0T2Yad+NVzC+J+V39JDgV606ZV0RoeNwIhAPQ8I/vhw76tiXycutg3rFyTSH4IKqER13sYApH6Fziw"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5983e05d-b624-48ce-980b-82d370ce367d"}},"directories":{},"maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/keep_2.5.3_1787145718606_0.023779052799020928"},"_hasShrinkwrap":false}},"time":{"created":"2012-02-15T04:50:32.476Z","modified":"2026-08-19T13:21:58.997Z","0.0.0":"2012-02-15T04:50:36.773Z","0.0.1":"2012-02-15T05:32:20.125Z","1.0.0":"2018-06-18T18:54:54.053Z","1.0.1":"2018-06-18T19:38:04.974Z","1.0.2":"2018-06-18T19:39:59.168Z","1.0.3":"2018-06-18T19:41:46.672Z","2.0.0":"2026-08-03T16:54:43.258Z","2.1.0":"2026-08-07T10:26:54.926Z","2.2.0":"2026-08-07T13:28:24.243Z","2.2.1":"2026-08-07T14:12:32.157Z","2.3.0":"2026-08-07T15:25:53.839Z","2.4.0":"2026-08-07T16:24:33.071Z","2.5.0":"2026-08-07T16:47:02.587Z","2.5.1":"2026-08-13T15:48:39.553Z","2.5.2":"2026-08-19T07:03:48.316Z","2.5.3":"2026-08-19T13:21:58.818Z"},"author":{"name":"Ian Nuttall"},"homepage":"https://keep.md","keywords":["keep","markdown","cli","notes","agents","capture","reader"],"description":"Save anything as Markdown, then search, read, and update it from the terminal or an AI agent.","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"readme":"# keep\n\nCLI for [Keep](https://keep.md). Save links as Markdown, search Notes and saved Items, and read or update them from a terminal or AI agent.\n\n## Setup\n\n1. Sign up for an account at https://app.keep.md/signup\n2. Install the CLI and sign in through your browser:\n\n```\nnpm i -g keep\nkeep --version\nkeep login\nkeep auth status\n```\n\n`keep login` shows a short code, opens Keep in your browser, and waits while\nyou approve it. Approving gives this client its own named, revocable library\ncredential. No API key is involved.\n\nIf an AI agent is setting up Keep for you, it should run `keep login` itself.\nYou only need to sign in, check the code, and approve access in the browser.\n\nFor an MCP-first setup use the [MCP guide](https://keep.md/docs/mcp). The\n[browser extension guide](https://keep.md/docs/extension) covers Chrome, Arc,\nBrave, and Firefox.\n\nUse the exact lowercase name for the current client:\n\n| Current client | Login name |\n| --- | --- |\n| ChatGPT | `chatgpt` |\n| Claude Code | `claude-code` |\n| Claude Desktop | `claude-desktop` |\n| Codex | `codex` |\n| Cursor | `cursor` |\n| OpenCode | `opencode` |\n| Pi | `pi` |\n\nName the client when you want a specific label, and use `--no-browser` on a\nmachine that cannot open one:\n\n```sh\nkeep login codex\nkeep login --no-browser\n```\n\nIf you installed the previous package name, replace it without deleting your\nKeep config or credentials:\n\n```sh\nnpm uninstall -g keep-markdown\nnpm i -g keep\n```\n\nCodex, Claude Code, and Cursor are detected during login and selected\nautomatically on later commands, so Note history shows which client made each\nchange. Use `keep auth status`, `keep auth list`, and\n`keep auth remove <client>` to inspect or disconnect them.\n\nOlder `claude` connections and optional session hooks continue to work as\nClaude Code. Claude Desktop always uses its separate `claude-desktop`\nconnection.\n\nAPI keys remain available for scripts and integrations that need one. Create\none at https://app.keep.md/settings/connections#api, save it with\n`keep key <your-token>`, or set `KEEP_API_KEY` for a specific request. Do not\npaste a personal API key into an AI conversation or prompt.\n\nWhen setup runs in an interactive terminal, Keep offers to install the `keep`\nskill for compatible AI tools. You can install or check it later:\n\n```sh\nkeep skill install\nkeep skill install --agent codex --global\nkeep skill install --copy --yes\nkeep skill status\nkeep auth status\nkeep skill update\n```\n\nWithout the Keep CLI, install the same skill from Keep's public discovery\nindex:\n\n```sh\nnpx skills add https://keep.md --skill keep\n```\n\nKeep checks installed skill instructions at most once per day. Interactive\ncommands can update after they finish. Piped and `--json` commands only write an\nupdate notice to stderr, so stdout stays safe for AI tools and scripts. Set\n`KEEP_NO_SKILL_UPDATE_CHECK=1` to disable automatic checks.\n\n## Usage\n\n```\nkeep list --since 7d\nkeep list --tag agent-tooling --collection x-articles\nkeep search \"react hooks\"\nkeep search \"what did we decide about note sync?\"\nkeep search \"release decision\" --types note --mode lexical\nkeep items search \"agents\" --tag agent-tooling --collection x-articles\nkeep save https://suganthan.com/blog/webmcp-implementation-guide/\nkeep extract <item-id>\nkeep update <id> --processed\nkeep update <id> --collection x-articles\nkeep update <id> --collections x-articles,reading-list\nkeep tags list\nkeep collections list\nkeep collections add \"X Articles\"\nkeep changes --updated-since 24h --tag agent-tooling\nkeep changes --cursor <nextCursor> --tag agent-tooling\nkeep sync ./items.json\nkeep feed --since 7d\nkeep feed --tag agent-tooling\nkeep processed <id1> <id2>\nkeep get <id> --media\nkeep get <id> --find \"payment failure\"\nkeep get <id> --lines 40:90\nkeep get <id> --full\nkeep highlights <item-id> --limit 25\nkeep media <item-id> --limit 20\nkeep highlight <highlight-id>\nkeep content <id>\nkeep notes search \"writing idea\"\nkeep notes get <note-id>\nkeep notes get <note-id> --full\nkeep notes get <note-id> --overview\nkeep notes get <note-id> --find \"authentication\" --revision 4\nkeep notes get <note-id> --lines 20:80 --revision 4\nkeep notes create --title \"Article idea\" --body-file ./idea.md\nkeep notes create --title \"Article idea\" --body-file ./idea.md --tags writing,ideas\nkeep notes append <note-id> --body-file ./progress.md\nkeep notes update <note-id> --revision 2 --state closed\nkeep notes history <note-id>\nkeep notes get <note-id> --sources --history\nkeep notes attach <note-id> <item-id> --relation evidence\nkeep notes detach <note-id> <link-id>\nkeep notes export --output ./keep-notes.zip\nkeep skill status\nkeep whoami\nkeep sources list\nkeep sources add rss https://simonwillison.net/atom/everything/\nkeep sources update <id> --summaries off --full-content on\nkeep webhooks list\nkeep webhooks add \"$KEEP_WEBHOOK_URL\" --name \"Research sync\" --tag research\nkeep webhooks test <id>\nkeep stats\n```\n\nDefault text output for `list`, `items search`, and `feed` is:\n`<id>\\t<url>\\t<title>`\n\nUse `--json` for structured output. Add `--content --json` on `list` or\n`items search` to include both the structured `content` object and the rendered\n`contentMarkdown`. `keep get <id>` returns a compact overview with metadata,\ncontent statistics, and headings. Use `--find` to get matching windows,\n`--lines` for an exact slice, and `--full` only when the whole captured document\nis needed. `--content` remains an alias for `--full`.\n\nAdd `--media` to include one bounded media page with the read, or use `keep\nmedia <item-id> --limit 20 --offset 0` to page image references separately.\nRemote captures return their original HTTPS URLs; direct image uploads return\nauthenticated Keep URLs. `keep highlights <item-id>` similarly returns a\nbounded page and accepts `--limit` and `--offset`. `keep highlight\n<highlight-id>` returns one highlight as JSON.\n\n`keep content <id>` returns the item's markdown. Source frontmatter remains the\nfirst block when present, followed by a `## Summary` section when a summary is\navailable, then the full article body.\n\n## Notes\n\nNotes are editable Markdown documents that you and the AI tools you use can\nshare through Keep. Create one from a local file, retrieve it as Markdown, or\nappend new work without overwriting another writer's changes.\n\nFeed Items remain captured source material. When an Item prompts a useful\nthought, create or update a Note and attach the Item as evidence.\n\n```sh\nkeep notes search \"writing idea\"\nkeep notes get <note-id>\nkeep notes get <note-id> --full\nkeep notes get <note-id> --overview\nkeep notes get <note-id> --find \"authentication\" --revision 4\nkeep notes get <note-id> --lines 20:80 --revision 4\nkeep notes create --title \"Article idea\" --body-file ./idea.md\nkeep notes create --title \"Article idea\" --body-file ./idea.md --tags writing,ideas\nkeep notes update <note-id> --body-file ./idea.md --revision 1\nkeep notes update <note-id> --revision 3 --clear-tags --clear-project\nkeep notes append <note-id> --body-file ./progress.md\nkeep notes history <note-id>\nkeep notes get <note-id> --sources --history --content\nkeep notes attach <note-id> <item-id> --relation evidence\nkeep notes attach <note-id> <item-id> --highlight-id <highlight-id>\nkeep notes detach <note-id> <link-id>\nkeep notes export --output ./keep-notes.zip\n```\n\nSuccessful note writes print the bare note ID, revision, title, and its authenticated Keep link. JSON receipts contain compact Note and revision coordinates plus `metadataDiff`; they never echo the Note body. Read the returned revision only when verification or more context is needed. Commands also accept older IDs beginning with `note_`.\n\nThe revision number prevents stale replacements. `notes update` requires the\ncurrent revision returned by `create`, `get`, or `history`. `notes append` uses\nthe latest revision and safely retries a concurrent append. Pass `--revision`\nto append only when a stale revision should fail instead. Add `--json` when\nanother tool or AI needs structured data.\n\nNew Notes do not get Git metadata by default. Add `--project` or `--path` when\nthat metadata is useful. Use `--context` to detect both values from the current\nGit repository. Add `--tags`, `--kind`, or `--state` as needed, and use\n`--properties-json` only for custom metadata. The older `--no-context` flag\nremains accepted for compatibility.\n\nMetadata-only updates do not require `--body-file`. Fields you omit stay\nunchanged. Use `--clear-tags`, `--clear-project`, `--clear-kind`, or\n`--clear-state` when you mean to remove a first-class field. Custom properties\nare merged separately. Use `--clear-properties` only when all custom metadata\nshould be removed. Append keeps the title and all metadata unchanged. It also\nkeeps the same request ID while resolving a concurrent append, so a retry does\nnot duplicate the Markdown. Use `notes update` when the title or metadata needs\nto change.\n\nThe CLI rejects unknown flags and flags used with the wrong command before it\nmakes an API request. A misspelled metadata flag cannot silently drop part of\nan update.\n\nAdd `--sources` to `notes get` to return the Note with attached Item summaries\nand highlights. Add `--history` for recent revision summaries or `--content` for\nbounded full Item content. Expanded reads return JSON. Use `--source-limit`,\n`--history-limit`, and `--content-bytes` to lower the response limits.\n\n`notes get` returns an overview by default. It includes the Note revision, token\nand line counts, and a heading outline without returning the full body. Reuse\nthat revision with `--find <text>` to locate matching lines, then\n`--lines <start:end>` to fetch only the required Markdown. Exact slices are\nlimited to 200 lines and 32 KB. Find results return at most 200 lines and 16 KB\nin total. These progressive reads always return structured JSON so the selected\nrevision and line numbers remain explicit. Use `--full` only when the bounded\nreads cannot answer the question. Reads do not use Note credits; creating or\nimporting a new Note does. Editing an existing Note does not use another\ncredit.\n\nAttach an Item as `source`, `evidence`, `example`, `inspiration`, or\n`annotation`. The attach response includes the link ID needed by `notes detach`.\n\n`keep notes export` downloads every current and archived Note as a ZIP with one\nportable Markdown file per Note. Each file includes Keep-owned identity and\nrevision fields plus your custom properties. Use `--output <path>` to choose\nthe destination; otherwise Keep uses a dated filename in the current folder.\n\n## Search\n\n`keep search` searches Notes and saved Items together across your library.\n\n```sh\nkeep search \"implement note sync\"\nkeep search \"authentication decision\" --types note\nkeep search \"release decision\" --mode lexical\nkeep search \"search design\" --content --content-bytes 80000\n```\n\nResults stay shallow by default, with snippets capped at 600 UTF-8 bytes. Note\nmatches include the revision and a relevant line range when available. Pass\nthose coordinates directly to `notes get --lines` when the range is already\nuseful. Use `--mode lexical`, `--mode semantic`, or\n`--mode hybrid` to choose matching behaviour. Use `--content` when you need the matched\nMarkdown, or `--json` for the complete ranked response.\n\nUse the resource-specific commands when you only want one side of the library:\n\n```sh\nkeep notes search \"article idea\"\nkeep items search \"agents\" --collection x-articles\n```\n\n`keep notes search` uses the same bounded search response as `keep search`; it\ndoes not download every matching Note body. Pass\n`--project <git-url> --exact-project` to restrict a search to one repository,\nuse `--context` to detect the current Git Project for this search, or add\n`--content` only when the next step needs the matched text.\n\n`keep context` remains an advanced compatibility command. It detects the\ncurrent Git Project and path. `keep context brief --json` returns a maximum of\n20 recent Note titles and retrieval cues for that Project.\n\nTag and collection filters accept slugs or names. Slugs use lowercase words\njoined by hyphens, like `x-articles` or `agent-tooling`.\n\n## Advanced Project and session compatibility\n\nNormal setup does not install session hooks or add Git Project metadata to new\nNotes. Existing hooks and Project data continue to work. Use these commands\nonly when you want that coding-session workflow.\n\nAsk the current AI to create a detailed one-Note summary with Keep's versioned\nprompt and write contract:\n\n```sh\nkeep session prompt\nkeep session prompt --json\n```\n\nThe prompt itself does not write anything. It tells the current AI to capture\ndecisions and reasoning, work completed, files, URLs, verification, failures,\nremaining work, and useful retrieval terms in exactly one Note.\n\nClaude Code, Codex, and Pi can load recent project Notes at session start and\nsave a summary automatically when a session ends:\n\n```sh\nnpm install -g --ignore-scripts @earendil-works/pi-coding-agent\nkeep login claude-code\nkeep login codex\nkeep login pi\nkeep hooks install all\nkeep hooks status\nkeep hooks doctor\nkeep session status\nkeep session retry <job-id>\nkeep hooks remove all\n```\n\nAt session start, Keep returns at most 20 matching Note titles and retrieval\ncues. It does not load Note bodies, make a model request, or write anything.\nThe lookup fails open, so it never blocks a session when Keep is unavailable.\n\nInstallation is opt-in and explains that each non-empty completed session uses\none additional Claude Code, Codex, or Pi model request at session end. It preserves\nunrelated hooks, backs up an existing configuration before changing it, and\nremoval deletes only Keep's managed hook entries or integration file.\nAuthenticate each model CLI and verify that it can answer a prompt first;\n`keep hooks doctor` checks the executable and version, not provider access.\n\nThe hook queues work locally so session exit is not delayed. The model client\nresumes its completed session only to return one Markdown summary; it cannot\nwrite to Keep itself. The CLI checks the output and makes at most one Note\nwrite with a stable session request ID, so a duplicate event or retry does not\ncreate another Note.\n\n`all` installs the full start and end lifecycle for Claude Code, Codex, and Pi.\nCursor can install the current start-only preview, while OpenCode gets an\nexplicit handoff command:\n\n```sh\nkeep login cursor\nkeep hooks install cursor\n\nnpm install -g opencode-ai\nkeep login opencode\nkeep hooks install opencode\n```\n\nRaw transcripts are never uploaded to Keep. Only the generated summary is\nsaved. Empty sessions are skipped. Failed jobs stay local and appear in `keep\nsession status`; retry one after fixing the reported auth or model CLI problem\nwith `keep session retry <job-id>`.\n\n## Delta sync\n\nUse `keep changes` when an integration needs to fetch only item changes since\nits last cursor.\n\n```sh\nkeep changes --updated-since 24h --tag agent-tooling\nkeep changes --cursor <nextCursor> --tag agent-tooling\nkeep changes --updated-since 7d --collection x-articles --json\n```\n\nThe command returns JSON with `events`, `nextCursor`, and `hasMore`. Store the\n`nextCursor` value and pass it to the next run.\n\n## Tags and collections\n\n```sh\nkeep tags list\nkeep collections list\nkeep collections add \"X Articles\"\nkeep list --tag agent-tooling\nkeep items search \"agents\" --collection x-articles\nkeep update <id> --collection x-articles\nkeep update <id> --collections x-articles,reading-list\nkeep update <id> --clear-collections\n```\n\n## Save and sync\n\nSave one URL with server-side extraction:\n\n```sh\nkeep save https://suganthan.com/blog/webmcp-implementation-guide/\n```\n\nBulk sync items from a JSON file:\n\n```sh\nkeep sync ./items.json\n```\n\nThe sync file can be either an array of items or an object with an `items`\narray.\n\n## Sources\n\n```sh\nkeep sources list\nkeep sources list --include-settings\nkeep sources list --include-sensitive\nkeep sources add rss https://simonwillison.net/atom/everything/\nkeep sources add youtube @fireship_dev\nkeep sources add x levelsio\nkeep sources add email\nkeep sources update <id> --summaries off --full-content on\nkeep sources update <id> --name \"Simon Willison\" --tags ai,engineering\nkeep sources remove <id>\n```\n\nCreation supports names, default tags, smart tag rules, backfill controls,\npolling intervals, full-content control, and summary control. `sources update`\ncan change the name, tags, full-content setting, and summary setting.\n\n`sources list` returns a compact status manifest without configuration, tag\nrules, or internal cursors. Add `--include-settings` for redacted configuration\nand rules. Use\n`--include-sensitive` only while debugging a source you control. Its output may\ncontain credentials, so do not paste it into a chat, issue, log, or Note.\n\nReddit saved-feed links from old Reddit can be added as RSS sources in either\nthe root or user-scoped URL form. Keep fetches the Reddit post instead of using\nthe feed's small link card when full-content capture is on. Turn on summaries\nfor the source when you want an AI summary of that fetched content. YouTube\nsources retry temporary feed lookup failures after refreshing the channel\ndetails.\n\n## Webhooks\n\nCreate signed webhook endpoints for item changes:\n\n```sh\nkeep webhooks list\nkeep webhooks add \"$KEEP_WEBHOOK_URL\" --name \"Research sync\"\nkeep webhooks add \"$KEEP_WEBHOOK_URL\" --tag research\nkeep webhooks add \"$KEEP_WEBHOOK_URL\" --events item.created,item.tagged\nkeep webhooks test <id>\nkeep webhooks rotate-secret <id>\nkeep webhooks remove <id>\n```\n\nDefault `webhooks list` output is\n`<id>\\t<status>\\t<url>\\t<name>\\t<events>\\t<scope>`. Use `--json` for the full\nresponse. `webhooks add` and `webhooks rotate-secret` print the signing secret\nonce, so store it when the command returns.\n\nRun `keep help` for the full list of commands and options.\n","readmeFilename":"README.md"}