{"_id":"contextspin","_rev":"16-2aa471dbf9b5fd89c6fc5cc9389b91e7","name":"contextspin","dist-tags":{"latest":"0.8.1"},"versions":{"0.1.0":{"name":"contextspin","version":"0.1.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.1.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"7e8c6048c5ace6f6c343677484c6b9fe4c486e13","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.1.0.tgz","fileCount":15,"integrity":"sha512-tore/wDyP/3KJ2mw4BMFKbpBwYipNsRz4lBKwJLtKxGxIZ6m8Sxe7zhF8caJdJHIIqdaIHhYCnYf5hEjulTlSA==","signatures":[{"sig":"MEUCIC4n8r4k7tOVy4Tl7C61wWQ4f1lrSKEeqLOrAGqTRzfKAiEAinfKhIurzb+CAhUJ3yc479SKhSEtY8KuJ6Js0LIcTNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127316},"type":"module","engines":{"node":">=18"},"gitHead":"0c841f69bf2a41a3f6e74870adda1881cc50f6d0","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.1.0_1781701577183_0.9147466378349547","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"contextspin","version":"0.1.1","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.1.1","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"9c5d7c183f0274cab701ae643bb26d2556f5fda6","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.1.1.tgz","fileCount":16,"integrity":"sha512-Kj8Wc+AF9fntmfgK8sqiKV30Dc7vf3lEkgxZCagIed1y4H1qpHt+QcG+FsKIBhLDP5gHBwmEMjNlATgih1QrIg==","signatures":[{"sig":"MEYCIQDxJjPl2HxtNB3wpn/aBb4n0BE+SyUExdcfmv0PLR4LigIhAOwtqBuINv92/Xjm0c/s3xbhEKD/HAPHWYCuLOnFxPyX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127621},"type":"module","engines":{"node":">=18"},"gitHead":"8bb9fdafa240115ca4baff359b1511a4e876edfe","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.1.1_1781703078931_0.42035207605593583","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"contextspin","version":"0.1.2","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.1.2","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"5bfedc656d7e94b7f51d9a2b01c1580d5852a55e","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.1.2.tgz","fileCount":15,"integrity":"sha512-KCnr8deO+2N4FZT6aidu97ofcApO2x3qrIFOGHnED6xdKGofCPpJ/nmgBeXIMBkHHrHvqk9Xn+yktJ+qckqQeg==","signatures":[{"sig":"MEUCIQCc//tPSiTNFH5R/PttNaXycHxw36HDiiaRrDaMiZXz/gIgJtrVb9uUFW86Ta54Ah1zNlVG1a3ksG7DwAbxvp2Fl+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127316},"type":"module","engines":{"node":">=18"},"gitHead":"0f945e15eeb399c25b2a799af53c162f9a9b41c8","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.1.2_1781705842747_0.40657548626672724","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"contextspin","version":"0.2.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.2.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"0ad1eaac5d69329d557974eb9637d1cbc76cb942","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.2.0.tgz","fileCount":16,"integrity":"sha512-lWD/NrZ/IeTETr9xGSVhsHT7fPVzf218+lAkhcqcXLroypRgVgdxkhJsP/TVYj4gFt7U1ZZx5HtQ6dMQLUCSbw==","signatures":[{"sig":"MEQCIGgDj8prFWg4i3YTnB3fMMgQECxBdSJE2xKXbtIw5nwsAiAM7hHiOUEG/clX3hwIraCiUtEf7U3nkVsqnhbJe6xyDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141043},"type":"module","engines":{"node":">=18"},"gitHead":"12b6dff58a30bc49c73b0b241a4ce44ee1084fbc","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.2.0_1781708265321_0.33499025425008333","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"contextspin","version":"0.3.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.3.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"bdccd68817712f50fc8898dc172ca177971bd8c4","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.3.0.tgz","fileCount":16,"integrity":"sha512-h3JXbHsEmkqk+8HBSH6vQ56gaKRLSjsmXfC2XU27fYuiQna4kpKBHswNHhGPEqCWV1SA054H8G7eZYLGHgNZxg==","signatures":[{"sig":"MEQCIFqy1mRg1yoPadyE8fwfYLDqYADtLIu6Gvy9M8vqVjTeAiBFh0Iiy+B5s5eXG8EU3+7J2vbMRJos26S6zDCYyf9OUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150199},"type":"module","engines":{"node":">=18"},"gitHead":"754ec7af2d363b1df79a0f05143bdbd1029273dd","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.3.0_1781721716469_0.5947811105810259","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"contextspin","version":"0.4.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.4.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"b126616f6ec57f77b40ec691aca349c1c8825438","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.4.0.tgz","fileCount":16,"integrity":"sha512-M2IZx9xswN1MuvCDcC5/0SVgb3U8PgmU1wnxzWmR1rX3ythw8/14Gahm0iTWqzkiYx5x3NJhK1BPRQ7XPfeBEw==","signatures":[{"sig":"MEUCIEuCbrwtcvN2H/bhTRGyfLvwhhV5YcOXeCubM0OfDpw+AiEAz4E5ohaI4mEH1qgEzg1LW52u3amP+EU1CkLLRfEAtzI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152951},"type":"module","engines":{"node":">=18"},"gitHead":"d78c51bac782be171dacbe17c1ce32fde95dc208","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.4.0_1781820203905_0.6068559413798067","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"contextspin","version":"0.5.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.5.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"a2d1a2f06ce1e1b9bfda6fb5c3a03b5f9c29f420","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.5.0.tgz","fileCount":16,"integrity":"sha512-2QkclWzO5SDqqYoQy2bclbSoVJMSVCE5aguO5zh+54h7+0zI4OGt0QElOkwlNQM5l7eruT8JvmVZjZVCRlLgyA==","signatures":[{"sig":"MEUCIFw4PsMjF5LLCuim698hGIDWff/t2lS0fFtgXpt30ZF+AiEA1bHXAP7YUQepfYIJSW60xbHajmp9LhZ+cOlWYfpy2Yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155018},"type":"module","engines":{"node":">=18"},"gitHead":"7d2a417b79d14fe870db6cb52880690508b28447","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.5.0_1781820941114_0.9260541232408026","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"contextspin","version":"0.5.1","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.5.1","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"fedb5030639f38fac3b28eb25997ad32be8cd13b","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.5.1.tgz","fileCount":16,"integrity":"sha512-Uxkrcd4gvZA0D0Kgz2CwLzKE6R0n3QvFNC2SH4YiiMP+aIwXqlsJeIBHvo7ptJ5e4uSrRjJqNTpjl2IQPzNYFQ==","signatures":[{"sig":"MEQCIC0gEkDVU+p1QcllPQkX/2JpGo4f7x8gfXHqBI+vkMWQAiAIxl+jnXpi0s23a2OOCfyWsSadb7tqmQDVAyJzHOTIkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154997},"type":"module","engines":{"node":">=18"},"gitHead":"186f71ba1e392c49f35ad15896aeb677d13c3b35","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.5.1_1781822077957_0.7394017353860203","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"contextspin","version":"0.6.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.6.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"604ca6b12105f1aa9091ae79c24c50d62ca2ad87","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.6.0.tgz","fileCount":17,"integrity":"sha512-L3yh6typzEWDkOnHH8lPqwN+qksAgBjuyfy8Qu1MDkIUDjhmaDo0imDO1D6vEfl8xkZIaL+sWjEdDnO3gkhHQA==","signatures":[{"sig":"MEUCIQDKCG/OyrBRlU6tODdI1lFqUXh1OpRW9ptoE78pXPE7SwIgOtNJ16pmCSJ98CN5iKy7uEUuH9WK5bVkuPwDu2Cb7SE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161006},"type":"module","engines":{"node":">=18"},"gitHead":"fe11902dbca3c43cc28180e2d74d5c5c36160848","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.6.0_1781822704496_0.4641410755039559","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"contextspin","version":"0.6.2","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.6.2","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"66e2fede892ede00638e15c35f7207366befe8e3","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.6.2.tgz","fileCount":17,"integrity":"sha512-v/1IgmPAAGZV3JJHCd3BDkp0LddItQMJ4XzEVOoYIrgkSoX1z8qSO6lV+rN/7fLDzSqcskU0GVs/udn6aFkTEg==","signatures":[{"sig":"MEQCIFP06+qgasm1ReLLLJnvqyBatVEqqE9rTKMvuVIFmVd6AiBHXmbX09TFUUPjSw+YLw9s8hTDkn1HW32PZNX2F1zUCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164788},"type":"module","engines":{"node":">=18"},"gitHead":"4cde2272cb51b5c5d71650befcd21b513f2c321f","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.6.2_1781823326682_0.029490967638918786","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"contextspin","version":"0.6.3","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.6.3","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"3b0466c2b7643f56c376f33e90eaedacf63ff17e","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.6.3.tgz","fileCount":17,"integrity":"sha512-CavDZeKvoOWx06pmZNZq9+nqx2OLBU6/lXtyYAG6XaJxQZ8kcbgtlP6SRIWl0S7/xahAvOlmaTSJPgZCO7kKqw==","signatures":[{"sig":"MEQCIAuLQcaPewXWrm1x0eLlpO8B362rPlBYHIwGrzCYiG5qAiAOJnSErkYhfefskYce+WStUVjhHyoiIy9IkxVnGZEqTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166777},"type":"module","engines":{"node":">=18"},"gitHead":"d5254411859a0987cd9aae9334f16592f4bc1019","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.6.3_1781858720963_0.9820962551186736","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"contextspin","version":"0.6.4","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.6.4","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"59b2d1717978a46d433909bb1f2a7196fcb82110","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.6.4.tgz","fileCount":18,"integrity":"sha512-7fNPHM7hKc7VQtvhb7KYbOOVpDpvqDTxdLuJbtgWWxNMXjB+6oZ0Aw+5TZ4wzmmEJqNaZ5x24nY+lBSON0Gt2g==","signatures":[{"sig":"MEQCIF0Z8j8iHvP7l+tYaSQWOgKdlf+nV5T0D4gRff2UtR68AiAYo0PM3/3n+yfRNA+Q+JmbW5TyzH8yeMcC7KfGc5UNdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167405},"type":"module","engines":{"node":">=18"},"gitHead":"fbef212cab173af196f3bbad097f61be5693124b","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.6.4_1781859704423_0.4925509830131225","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"contextspin","version":"0.7.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.7.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"6fb3a3d8cdcc19b52c7cc822cc2e8234e3a94678","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.7.0.tgz","fileCount":19,"integrity":"sha512-rk4xz755jKJ8wdNEuEPgdvGK2lopiYrrFnwjxM6ctJJMIAMUKoWIbw8W6mfMbjp+/YddKMcKUkmJE6BaTcr2VA==","signatures":[{"sig":"MEQCICpWbPESD26dste24Tn1AYpNu0o18CLjIMMoEFou8E0CAiB38csiihNNJz4elFdRiDhIDgFLXNJblm4u1tr6nZrTCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177584},"type":"module","engines":{"node":">=18"},"gitHead":"ac133cdea4d871d6496f7697ca65491cc52f003b","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.7.0_1781863447511_0.07431702802040197","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"contextspin","version":"0.7.1","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.7.1","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"2c98846d452fbdfc8332f4eec8c235e78e249a46","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.7.1.tgz","fileCount":19,"integrity":"sha512-PFcihZcgT7Zj+cVeMRXXP3zLFTH3E9VtS+I1kGl5/FAhEjHnGggYjf6enAAWdVSwF7+xv+/IAut8Jn3pu0K03A==","signatures":[{"sig":"MEUCIQCmkryRkdZKyS2uzr5m9RtFup97NutggBNfLe8HtuchGgIgR9YUWu0GmEogO7H3GVP2fEGCIUb9/PfKBjTuSzER0Iw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166835},"type":"module","engines":{"node":">=18"},"gitHead":"bd92493180743e0405fd63a1214e021e5b23b630","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.7.1_1781864918480_0.06849559936183214","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"contextspin","version":"0.8.0","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.8.0","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"bin":{"contextspin":"src/cli.js"},"dist":{"shasum":"499565d92bacbc06d7e8c4a62e64b4f4ebba6307","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.8.0.tgz","fileCount":19,"integrity":"sha512-8l4zvU8arbdf+6iKqysRT+GSImnAYVG0Z1DT1TRqxZFI0jXcid2V+FhSwSLrVlUB6ULLekUcUdv6vG4G5dqmJA==","signatures":[{"sig":"MEUCIQDUuU6rk5/B3PXAiCucyTHDmsoVpjMh4Nfdu+Q9pmKZ6gIgLvlmnn05q7CKM4Wjr5ZP21eu7rheApBb/mNA9nlJSC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168725},"type":"module","engines":{"node":">=18"},"gitHead":"8c5e45e7d5d3ac374e4c982bfd63b7e71bf4cd98","scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"_npmVersion":"10.9.4","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"optionalDependencies":{"node-lief":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/contextspin_0.8.0_1782069214228_0.28964609995326995","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"contextspin","version":"0.8.1","description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","type":"module","bin":{"contextspin":"src/cli.js"},"engines":{"node":">=18"},"scripts":{"test":"node --test","start":"node src/cli.js","daemon":"node src/daemon-entry.js"},"dependencies":{"commander":"^12.1.0"},"optionalDependencies":{"node-lief":"^1.0.0"},"keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"license":"MIT","_id":"contextspin@0.8.1","gitHead":"ef8f273e5db0265d324c6e7053723ebdbb2a422b","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-akGJAsuQrWJkOTFDui5wF4E6FHfJtnn/UqMR59sb6XjL7O9euMASQaoMcOcR3J8AqP3J0bqSJl/NYX2DLg7N6Q==","shasum":"f447bddbec005fb1b50b919edf96c38e74864c7a","tarball":"https://registry.npmjs.org/contextspin/-/contextspin-0.8.1.tgz","fileCount":19,"unpackedSize":171388,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDHoc6SjXSXAEE5sJ3Kwi8s3EgDCjI8xTC9hoZnNbGQ1QIgMlTY80px2NNR/c4sOce176OcYh9NrWZXL6FOMjqU96Y="}]},"_npmUser":{"name":"theweekendyogi","email":"machomannu@gmail.com"},"directories":{},"maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/contextspin_0.8.1_1782079690881_0.26769079645624116"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-17T13:06:17.090Z","modified":"2026-06-21T22:08:11.094Z","0.1.0":"2026-06-17T13:06:17.348Z","0.1.1":"2026-06-17T13:31:19.082Z","0.1.2":"2026-06-17T14:17:22.886Z","0.2.0":"2026-06-17T14:57:45.518Z","0.3.0":"2026-06-17T18:41:56.589Z","0.4.0":"2026-06-18T22:03:24.069Z","0.5.0":"2026-06-18T22:15:41.250Z","0.5.1":"2026-06-18T22:34:38.103Z","0.6.0":"2026-06-18T22:45:04.719Z","0.6.2":"2026-06-18T22:55:26.828Z","0.6.3":"2026-06-19T08:45:21.115Z","0.6.4":"2026-06-19T09:01:44.584Z","0.7.0":"2026-06-19T10:04:07.695Z","0.7.1":"2026-06-19T10:28:38.604Z","0.8.0":"2026-06-21T19:13:34.374Z","0.8.1":"2026-06-21T22:08:11.007Z"},"license":"MIT","keywords":["claude-code","claude","statusline","spinner","mcp","devtools","cli","productivity"],"description":"Replace Claude Code spinner/statusline text with live org context (meetings, Slack, CI, incidents, PRs) aggregated from your existing MCP servers, CLIs, and HTTP endpoints.","maintainers":[{"name":"theweekendyogi","email":"machomannu@gmail.com"}],"readme":"# ContextSpin\n\nLive context in your Claude Code **status bar** — weather, the top Hacker News stories, fresh AI research papers, dev articles, PRs awaiting your review, CI failures, incidents, meetings — pulled from tools you already run. One-line install, and the bar is never empty.\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/mannutech/contextspin/main/install.sh | bash\n```\n\nRequires Node.js ≥ 18. MIT licensed. The only runtime dependency is [`commander`](https://www.npmjs.com/package/commander).\n\n![Install](screenshots/install.svg)\n\n![Status command](screenshots/status-command.svg)\n\n![Statusline](screenshots/statusline.svg)\n\n## It does NOT fetch data\n\nContextSpin is a **renderer, not a data layer** — no API clients, no auth flows, no integrations of its own. It aggregates from sources you already have:\n\n- **MCP servers** registered in `~/.claude.json` / `.mcp.json` (stdio only)\n- **CLI tools** already installed and authed (`gh`, `kubectl`, `glab`, your scripts…)\n- **HTTP endpoints** you can already reach\n\nIt formats whatever they return into one-line snippets and shows the most relevant one. If a tool you have can't reach the data, ContextSpin can't show it — by design.\n\n## How it works (daemonless)\n\nThere is **no background process by default**. The statusline render is the engine — it serves the cached snippet instantly, and only when a source is past its cooldown does it spawn a detached one-shot refresh (lock-guarded so frequent renders never overlap). Nothing runs when you're not in Claude Code, so idle cost is zero.\n\n```\n  Claude Code draws the status bar\n              │\n              ▼\n  RENDER  (~/.contextspin/statusline.mjs)\n   1. read the cache, print one snippet NOW (stale is fine) ──► status bar\n   2. if a source is due and no refresh is in flight:\n              │\n              ▼  (detached, non-blocking)\n  REFRESH  (one-shot, src/refresh-entry.js)\n   • run each DUE source, format, merge/dedup/prioritize, record lastRun\n   • write ~/.contextspin-cache.json (atomic)\n```\n\nThis is *stale-while-revalidate*: the bar is always fast, freshness catches up in the background. A legacy always-on daemon is still available behind `injection.daemonless: false` — only worth it for stdio MCP sources, where a persistent connection beats per-render handshakes.\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/mannutech/contextspin/main/install.sh | bash\n```\n\nThis wires a SessionStart hook into `~/.claude/settings.json` (so it self-heals each session), seeds a no-credentials starter pack (weather, a dad joke, top HN stories, AI research papers, dev articles, a daily quote), and wires your status bar **non-destructively** (any existing status line is preserved and composed above ours). Restart Claude Code to see it.\n\n`npx contextspin install` does the same. `npx contextspin uninstall` removes everything. `npx contextspin status` shows the current snippets.\n\n## Sources\n\nEvery source returns a list of records. Each record is optionally `filter`ed, then rendered with `format` using `{{ field }}` templating — dotted/bracketed paths work (`{{ results[0].value }}`), `{{ env.NAME }}` reads an environment variable, unknown fields render empty.\n\n**`mcp`** — call a tool on a stdio MCP server discovered from your Claude config (JSON-RPC over stdin/stdout, no SDK):\n\n```json\n{ \"type\": \"mcp\", \"tool\": \"slack_search_public\", \"args\": { \"query\": \"mentions:me is:unread\" },\n  \"format\": \"Slack: {{ text }}\", \"label\": \"Slack\", \"cooldown\": 300, \"maxSnippets\": 2 }\n```\n\n`tool` may be bare or `mcp__<server>__<tool>`; `server` is optional (otherwise the first stdio server exposing the tool is used).\n\n**`cli`** — run a shell command (output parsed as a JSON array/object/primitive, or split into lines):\n\n```json\n{ \"type\": \"cli\", \"command\": \"gh pr list --review-requested @me --json title,number --limit 3\",\n  \"format\": \"PR #{{ number }} needs review: {{ title }}\", \"label\": \"GitHub\", \"cooldown\": 120, \"maxSnippets\": 3 }\n```\n\n**`http`** — fetch a JSON or text endpoint:\n\n```json\n{ \"type\": \"http\", \"url\": \"https://grafana.example.com/api/.../query?q=incidents\",\n  \"headers\": { \"Authorization\": \"Bearer {{ env.GRAFANA_TOKEN }}\" },\n  \"jq\": \".results[0].value\", \"format\": \"Grafana: {{ value }}\", \"label\": \"Grafana\", \"cooldown\": 30 }\n```\n\n`url` and headers are interpolated (use `{{ env.X }}` for secrets, never hard-code them). `jq` supports a minimal subset: identity, dotted keys, bracket indexing, iteration (`.[]`), and pipes.\n\n## Configuration\n\nOne JSON file, `~/.contextspin.json` (override with `CONTEXTSPIN_CONFIG`); cache at `~/.contextspin-cache.json` (override with `CONTEXTSPIN_CACHE`).\n\n```json\n{\n  \"sources\": [\n    { \"type\": \"cli\", \"command\": \"gh pr list --json title --limit 3\", \"format\": \"PR: {{ title }}\" }\n  ],\n  \"injection\": { \"mode\": \"statusline\", \"refresh\": 30, \"maxVisible\": 20 },\n  \"snippets\": { \"deduplication\": true, \"cooldownAfterShown\": 5, \"priorityOrder\": [\"incident\", \"ci\", \"github\"] }\n}\n```\n\n| Field | Default | Meaning |\n|-------|---------|---------|\n| `sources[].type` | — | `mcp` \\| `cli` \\| `http` (required) |\n| `sources[].tool` / `command` / `url` | — | Required for `mcp` / `cli` / `http` respectively |\n| `sources[].format` | — | One-line `{{ field }}` template (required) |\n| `sources[].filter` | — | Keep a record only if it passes (see below) |\n| `sources[].label` | derived | Snippet source label (mcp→tool, cli→first token, http→host) |\n| `sources[].cooldown` | `300` | Min seconds between polls of this source |\n| `sources[].maxSnippets` | `2` | Max snippets kept per poll |\n| `injection.refresh` | `30` | Status-bar refresh interval, seconds |\n| `injection.maxVisible` | `20` | Cap on snippets held in the cache (rotated one at a time) |\n| `injection.style` | `true` | Styled box (cyan bars + italic); `false` for plain text |\n| `injection.daemonless` | `true` | Self-refreshing render; `false` for the legacy daemon |\n| `injection.mode` | `statusline` | `statusline` \\| `patcher` \\| `both` |\n| `snippets.deduplication` | `true` | Drop duplicate-text snippets when merging |\n| `snippets.cooldownAfterShown` | `5` | A snippet stops showing after this many displays |\n| `snippets.priorityOrder` | `[]` | Source labels sorted first (case-insensitive); rest last |\n\n**Filters** are a single safe comparison (no `eval`): the expression is interpolated, then parsed as `LEFT OP RIGHT` where `OP` is `==`, `!=`, `>=`, `<=`, `>`, `<`, or `includes`. No `&&`/`||`.\n\n```json\n{ \"filter\": \"{{ status }} == failure\" }\n```\n\n## Cache\n\n```json\n{\n  \"updatedAt\": \"2026-06-17T09:00:00.000Z\",\n  \"snippets\": [\n    { \"text\": \"CI failing: build on main\", \"source\": \"CI\", \"sourceId\": 2,\n      \"fetchedAt\": \"2026-06-17T09:00:00.000Z\", \"shownCount\": 0 }\n  ],\n  \"meta\": { \"lastRun\": { \"2\": 1781860451773 } }\n}\n```\n\n`shownCount` rises each time a snippet is shown; past `cooldownAfterShown` it's retired. `meta.lastRun` maps `sourceId → last poll (ms)` so the refresh honors per-source cooldowns across runs. When the cache is empty or every snippet is retired, the render rotates through built-in defaults (jokes + tips) — so the bar is never blank.\n\n## CLI\n\n| Command | What it does |\n|---------|--------------|\n| `install` | Wire the self-healing SessionStart hook, create config, wire the statusline (what the curl script runs). |\n| `uninstall` | Remove the hook, restore your prior statusline in **every** scope, stop any daemon. |\n| `status` | Show the engine and cached snippets. |\n| `refresh` | Force a one-shot refresh of all due sources now. |\n| `setup [--yes]` | Create `~/.contextspin.json` (interactive, or detected with `--yes`). |\n| `ensure` | Idempotent create-config + wire-statusline (run by the hook each session). |\n| `inject` / `uninject [--mode <m>]` | Install / reverse just the injector. |\n| `start` / `stop` / `restart` | Manage the legacy daemon (only when `injection.daemonless: false`). |\n\n## Statusline injection\n\nUses Claude Code's official [status line](https://code.claude.com/docs/en/statusline) feature, so it survives updates. The wrapper is **non-destructive and scope-aware**: any status line you already had is composed above the ContextSpin line, and in a project (`CLAUDE_PROJECT_DIR` set) it writes the gitignored `<project>/.claude/settings.local.json` so a repo's own status line can't shadow it. Reverse with `uninject` (this scope) or `uninstall` (everything).\n\nThere's also an **experimental** `patcher` mode (`injection.mode: \"patcher\"`) that rewrites Claude Code's hard-coded spinner words in the binary — inspired by [claude-depester](https://github.com/ominiverdi/claude-depester). It's length-preserving and best-effort, but **every Claude Code update overwrites it**, so the statusline is the supported path. Restore with `uninject --mode patcher`.\n\n## Limitations\n\n- **MCP is stdio-only** — discovered from `~/.claude.json` / `.mcp.json`; HTTP/SSE MCP transports aren't supported (use a `cli`/`http` source instead).\n- **OAuth claude.ai connectors aren't reachable** — their tokens live in the OS keychain, out of reach of a standalone process. Use the matching CLI (`gh`, …), an HTTP endpoint, or a local stdio MCP server.\n\n## Also available as a plugin\n\nA Claude Code plugin wraps this package, via the [`mannutech` marketplace](https://github.com/mannutech/claude-plugins) — for those who prefer installing that way. The curl line above needs neither.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}