{"_id":"@arkone_ai/susan","_rev":"19-fa3c389930c1043939187921139f4083","name":"@arkone_ai/susan","dist-tags":{"latest":"0.0.7"},"versions":{"1.0.0":{"name":"@arkone_ai/susan","version":"1.0.0","keywords":["claude","claude-code","mcp","parallel-sessions","session-coordination","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.0.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"d1c3de7d89278479962657ec4616fc9d09a9cba6","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.0.0.tgz","fileCount":37,"integrity":"sha512-Nh3517n5jj7Ac53Fc1hUcltkbYKx2g+IFmJdro9BVCoUJCInQCWEl1SF285T58xSRV0ex+RenaXAWIWXer/GQQ==","signatures":[{"sig":"MEYCIQCE9kTg/jaFjsdPOSikKlicb2HIxPn4qMrwusCPvurmiwIhANar14WOj1mBhvGGv5ipa6mWZsvMteFmvatSrXfrsIqr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95561},"type":"module","engines":{"node":">=22.5"},"gitHead":"3ca91e85b09d79c6eb62e4fbe20ad049c11a65ff","scripts":{"test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan keeps a board of every Claude Code session you have open, so the work in the window you cannot see is not work you have forgotten.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.0.0_1786138303204_0.8583087775304605","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@arkone_ai/susan","version":"1.1.0","keywords":["claude","claude-code","mcp","parallel-sessions","session-coordination","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.1.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"e60db30b62ea751936fa2f114c6860c47a35abaa","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.1.0.tgz","fileCount":39,"integrity":"sha512-2lOHKx7rmOozVm6Qhke18uIV9vlhk8JE4l/im8IaNb+ey7kvNccFAO4UI0ZB8dzclzX5LNql0VVtSUGNKtvtgQ==","signatures":[{"sig":"MEUCIQCAx0CleuTz5esHaRQu7Qu4TFvFLtkJDCKx6ID+AZHj4QIgcQx6jv/HAvbqlONzEPP85a/ritukoBymd/l66Zasyow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100795},"type":"module","engines":{"node":">=22.5"},"gitHead":"d49f992e9b420b5d744b623a47efd5777a33761d","scripts":{"test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"deprecated":"susan serve did not exist in 1.1.0, but 1.2.1 fixes a migration bug that can brick the database. Upgrade to 1.2.1.","repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan keeps a board of every Claude Code session you have open, so the work in the window you cannot see is not work you have forgotten.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.1.0_1786139189573_0.3611537085656731","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@arkone_ai/susan","version":"1.2.0","keywords":["claude","claude-code","mcp","parallel-sessions","session-coordination","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.2.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"bf2b0f5e45f9e04fc41e4c2c18dcdcfe0b2b94e6","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.2.0.tgz","fileCount":44,"integrity":"sha512-1N2NB0VssaqeSuTJ5U4xlWnZhTBkh8rWlPPl/rEoBW9WTnzINvGFePvUnN7UR9lwiNo+y+gD9dkDJNBFKGbkiw==","signatures":[{"sig":"MEYCIQDXGWDPIIAOQ5R2yfZYWQUazNEkpdogWpmmMWZuLOz/7AIhAKOMf5Gw5QU0YVOAJfDPhppzmJcjaqWnZubJp5LSZQqh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129795},"type":"module","engines":{"node":">=22.5"},"gitHead":"7f1d0dd2cdaa5bcfbbf8dcbb36596eace6999dd2","scripts":{"test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"deprecated":"1.2.0 has a CSRF hole in susan serve: any website you visit can write to your board. Upgrade to 1.2.1.","repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan keeps a board of every Claude Code session you have open, so the work in the window you cannot see is not work you have forgotten.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.2.0_1786140604866_0.6145719731478203","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@arkone_ai/susan","version":"1.2.1","keywords":["claude","claude-code","mcp","parallel-sessions","session-coordination","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.2.1","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"b5cdc6ff1c6014cab1cf2d808cc2ec7bb97d5281","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.2.1.tgz","fileCount":44,"integrity":"sha512-FRfiCXEFUQ/qbz80DF2Y8kQb6eeLDfzNICjG6f7vUKslxRzxivRvUAlfRMQ0JTtln8vDXVmXKL/2stqNAjBmug==","signatures":[{"sig":"MEYCIQClDi7NRuuRAkZLhdQj1k2Gm8g3NPKHGYqWWBiOeIM7igIhAItQroBqBlWAYOiBcvmUTYLGvZJPHRyUSAwk0y7uGb1C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149547},"type":"module","engines":{"node":">=22.5"},"gitHead":"0610c836373e666027992919a523dfc957a8c302","scripts":{"test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan keeps a board of every Claude Code session you have open, so the work in the window you cannot see is not work you have forgotten.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.2.1_1786160495345_0.7696882427794218","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@arkone_ai/susan","version":"1.3.0","keywords":["claude","claude-code","mcp","parallel-sessions","session-coordination","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.3.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"f46d49fce4fc979d8513fa64c6bb39090ee3e69e","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.3.0.tgz","fileCount":49,"integrity":"sha512-+lpnu8CNWh1FogJhXJcovl88jSn1uiy6kDoK1+3EKI/n6TFfXX0FCa97/NmtOdIWOYaK7jm+5MzAojTZjaaryg==","signatures":[{"sig":"MEQCIHUj0Co63bFggkmYmGjetNa+utv06zCRpgmFOQge8MXaAiB0ztE3vG9AwreEoX1vm5Tss5hLh1pzPj7ULX5KEwMFag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167120},"type":"module","engines":{"node":">=22.5"},"gitHead":"e7cd86b626dc7814ec334d47c1cfa3629d8dc5b4","scripts":{"test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code session on your machine is working through — its own todo list, live, from outside the window.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.3.0_1786161884834_0.41356273122811116","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@arkone_ai/susan","version":"1.4.0","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.4.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"2c45f67b1cfd8cd13ab52437ca349e752bad1d6a","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.4.0.tgz","fileCount":66,"integrity":"sha512-wS+6gQ4PkOVsmlWDyLHwSoGy7HXYcaOGcPNdQ+EVVXNhzdUujY685R+MhlwhZk2ighn+q/zcFsf4c495OjE7jg==","signatures":[{"sig":"MEUCIHOxYnyZMmjmhr5mvX70QcoolQYoNs4Syt59VPJvJ3q4AiEA/4sFpAUKPT1/vipJJKY26FrCFdGImOC4LHl6naVGR6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275933},"type":"module","engines":{"node":">=22.5"},"gitHead":"8dda476d7c98e92cab9d73ef1d4debd49f05d0e7","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.4.0_1786260878576_0.5440667689346936","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@arkone_ai/susan","version":"1.5.0","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.5.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"c71a7be122d33ab1d77d513b9600837eb5566fb2","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.5.0.tgz","fileCount":70,"integrity":"sha512-RwSRNih+E+g/8OOOgDL/0RFxToW2p3mdytOdJJM3iDlRiO/MVkxYp+PCS4Isb99t9qyRcao15I3uSspZ9NfoZw==","signatures":[{"sig":"MEUCIDU/IREOl8KGAIIgqZQBMyDi26+Rs8zadnP9UgXvkDzXAiEA5MgVpMQrxnjeVaiyzu2p2XQ/2XB3FJsAoe4Xn/WZp7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":318843},"type":"module","engines":{"node":">=22.5"},"gitHead":"226bc5a65156d494d97776050dfde0ddcf1200a4","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.5.0_1787379402118_0.22520151559099233","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@arkone_ai/susan","version":"1.6.0","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.6.0","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"9bf6821c78636c29500fe0f6fe339100ef08919e","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.6.0.tgz","fileCount":84,"integrity":"sha512-D5wSyiWmAiu4mhjzhbB2KJw+0FlsRoVuoUqLxjiNaRvqJrZQEr258MVyRb8MtIeciwXm0sdSFHTJO7QNuA7f3w==","signatures":[{"sig":"MEUCIGCz1QhMdjBFcHL9ojffcjugdcbC5tgFZyjY6Qr5WBuuAiEA8/ALgvpKZLNdL6hQ7BiroqT56NpmEjUrrWKLXk7dItg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":475699},"type":"module","engines":{"node":">=22.5"},"gitHead":"76abe34024897d9184ed04e3eba70c72618be7e6","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"deprecated":"Susan's version line restarted at 0.0.x on 2026-09-22; 1.6.x is the same code under a bigger number. Install the current release: npm i -g @arkone_ai/susan@latest","repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.6.0_1787416790820_0.24247223950051766","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@arkone_ai/susan","version":"1.6.2","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@1.6.2","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"76a5c7a9b2b4c5b821ee43700edcae45a2ac0410","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-1.6.2.tgz","fileCount":87,"integrity":"sha512-OIzO001sRM0wIn+t2n+NkUU9DHglFbJndx1od2b5gWwnq3bGI4Xx8DmyctnYUVfxtmxe7oc9Ld1u8C1WrXXLUA==","signatures":[{"sig":"MEUCIDZVlIINoLfIg4he3r6tiHoNedOdn8i4ee5djmPJVu/EAiEAvcQmlyO+yMFt0XgSKi1daz5JXFiEoVvYOf9Hs1ThvQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDCI3xK24GaUCaOfhGHx4QDflgc2Qp70KTpwrvtEIQF+wIgArHZ9h7UnfjyeZ7K1rouhUcu4wXcFoQWybaKQFehE5c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":497017},"type":"module","engines":{"node":">=22.5"},"gitHead":"974c4234c5136af09ee703700153165c59259f74","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"deprecated":"Susan's version line restarted at 0.0.x on 2026-09-22; 1.6.x is the same code under a bigger number. Install the current release: npm i -g @arkone_ai/susan@latest","repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_1.6.2_1790089874944_0.8558308372848697","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@arkone_ai/susan","version":"0.0.1","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.1","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"79108168822a0937636eef5a7bc2d7a35dd31686","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.1.tgz","fileCount":87,"integrity":"sha512-hcTFXrYbvBf/TbJo+iJAx4YlGHOSSy7TO1+kgXcqVQ1eY3G13RXX6HP0pZAY9nD2zu/VsXNMLGhcaN22+aaMEw==","signatures":[{"sig":"MEUCIQCgENPUPgbKbYMMpmuJcycuIGzrLj1sGXcReKIGm5eEEwIgbBdKJXOtcEqSIb4TRZMWpmgx4tWgoMBiUxQMx+mLhpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFGW+4Y36ETwUoOMHHHQnSSdcGxspMYTpnpGthYUeGC3AiA4rShCOsxGuGYTZqArUVeg5Vf/hQ/a4fUkJfJbOG8Z0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":497017},"type":"module","engines":{"node":">=22.5"},"gitHead":"974c4234c5136af09ee703700153165c59259f74","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.1_1790090069648_0.3851131174478295","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@arkone_ai/susan","version":"0.0.2","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.2","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"f457822b9f4f74c8579ff9b2d6a941cf244166cd","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.2.tgz","fileCount":89,"integrity":"sha512-AYMGW2O/6pCw/hNP1PJBMbfZhC4WfFeXxnOgztx828Z6P4LRstknCVNY0GjxhawtrDiNuX06z80E/vGNyN+ZlA==","signatures":[{"sig":"MEQCIHQsGaH6eMRVmpvp+YF8qAGVIfL+FGJQSQ1tn31ilC+0AiA5/ksv/+D3BBWdtGbzHb+o+BEuTgAlcE7p7DxKJoUpuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCF4OIp5la/tbEzs0ZZZ7cY06ntDiSwmedpj3aOfKMegAIgJGAFDhyHIsx0E9K30O8KCpkeNcXNAE9OGT+UQITW6Z4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527085},"type":"module","engines":{"node":">=22.5"},"gitHead":"1726caa73b9e239156617f7c0d0e869d69c3147a","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.2_1790098627490_0.023055811814182592","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@arkone_ai/susan","version":"0.0.3","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.3","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"fb186df1831d1473dfbceb3a8072d55f8914a9f9","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.3.tgz","fileCount":92,"integrity":"sha512-a1mUYP4MIn23V/Kh1U1AJHOf3BwDwzcJaGUD0zcZ1NFFM15A+x8+akztWAqHCLCldeWAQt3BHNTYcKaG8UiGFg==","signatures":[{"sig":"MEQCIAhjfa0xW8Jw7VXk0BEqeVRDOQUaIbHfxADl/hKSdXdPAiAWdCKyXL9I60CwTv+YjwF01nQaKsTn0HQ1O/sSY7LlOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDVo4Po1OiLK6Aw8RZ8qx7kPLz5m6I9A4SQmknmE7Ae/wIgeMIkwcTVce1j90tZiSLiWpVMukhLSNeRms/T+GdgdKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":584797},"type":"module","engines":{"node":">=22.5"},"gitHead":"b06a519ede7e96e615ed6e4830e55dd472394464","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.3_1790102386400_0.16468724282596492","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@arkone_ai/susan","version":"0.0.4","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.4","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"174b0ca151ebf2efa7442c74f88cd29e3ffe94b8","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.4.tgz","fileCount":94,"integrity":"sha512-TAFSZWHJsbxznP0udlVw11R8g31OyaYdJXHG2LfNfKAgq+hjqtg+gYoumnZ3ERFIgIZLBd9sZC3H5BkI2XII3Q==","signatures":[{"sig":"MEQCIGLoN+VA9w7KXgdmiG2+JIzXcwJ+sfIh6NCH4QyxrB5wAiBP65ykC05+klikh0fasfathCYVAXFk/QZmJ85CU71vig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCEPupQTmkMHl5wmgdUqODrXjg1nJjjiptU1A/mbpq/uwIhANWs2QKI4HBHf3Ni++00RWZpXN6xKoPnLvDsTdvxuIl+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602003},"type":"module","engines":{"node":">=22.5"},"gitHead":"f6a7245baffcefa793ecf5aa72fdc3e496380007","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.4_1790103124515_0.8141026821046022","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@arkone_ai/susan","version":"0.0.5","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.5","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"3ee6265f4b102fdb6edd9bf225d5a0a34abf9bd2","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.5.tgz","fileCount":94,"integrity":"sha512-SfNZIXjZk4qck8blFWo26QdDeoaWuBq9lFPM0L/nZSPgVaKNaHo0kdZOB4xLolHGZg1a5G2R7N5E5naxIBJqKQ==","signatures":[{"sig":"MEQCIAoLIpH9ya1leNfyoiBWS5pml+DFZSfe3enUzBBXOA8bAiBho6/Rqevx6/5TmPcfnkq8NAmJusMewHQ/bHa5GLVpKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHs8HBjG5sZK50jL2HXn7jTVo5AutFzhGGBq+Q+wcoF6AiAB/+z014Qz/Pdw0kYVYdP4UM384UxvLELPUgV8KFjkyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602362},"type":"module","engines":{"node":">=22.5"},"gitHead":"8172ee789de91e2c5a52170e272afed55221c04a","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.5_1790104683678_0.08897017643141214","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@arkone_ai/susan","version":"0.0.6","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","_id":"@arkone_ai/susan@0.0.6","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"homepage":"https://github.com/arkone-ai/susan#readme","bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"dist":{"shasum":"9cf8a13aacf9ca09353b90a30550027385c9f685","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.6.tgz","fileCount":94,"integrity":"sha512-xQK8WQMjOtjGu+HIN60x5MAWzTBMPlMxOYEbBZhBAh40AmwvxX7MfgI0xdcxQo0+ZHtEi5B1Pt7F3TwnOh/a/A==","signatures":[{"sig":"MEUCIQC840A7LOUaQXqPpqIhYXy/PN5mU/L0PceJhdn5NsSJBAIgERjSi2Y6RKAE56PBKa4ZLd/Sr5fcB5syYD24ABcqq98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC3uZz7hCfyKyQn5/3X97vibHEW1RVD77/QtqZ2elIyvAIge1MRlv4zkXzcTNmTBnsrZ7IDFeKj5UCY/lsUhOYPG9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":610726},"type":"module","engines":{"node":">=22.5"},"gitHead":"11bad8075b882609a8c7f596677e8ea68d8e1d1f","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/susan_0.0.6_1790105106940_0.5092433525191382","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"_id":"@arkone_ai/susan@0.0.7","bin":{"susan":"bin/susan.js","susan-mcp":"bin/susan-mcp.js"},"bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"dist":{"shasum":"2aaac249367ef72fc2505dd0b8c2e725ddd0d358","tarball":"https://registry.npmjs.org/@arkone_ai/susan/-/susan-0.0.7.tgz","fileCount":94,"integrity":"sha512-9kLQ051GFtuDxV5rdRnm45sa4MDC810mE+fNzaiy0EScWlVDqTEuC5UZQ4tsay4J9dxkRBCLUU6Txzt/iFxjgw==","signatures":[{"sig":"MEQCIHxnCyxwbIfWJN6APrycn9pkVZhQvXeP73DFAtOlvR/xAiBhn/8bRKn0l+BFqS0mdinQv+fPw6oMpmIhZev8e6EOEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDMu9mHjMGvEsvsuWwuyZpsEAyvAGipXG8g757PvwzfFAIgO+GKhKuo9QxNUGxCtjSflQgFjwIZ8VjDbZYZGN3DL0E="}],"unpackedSize":617083},"name":"@arkone_ai/susan","type":"module","author":{"name":"ArkOne","email":"hello@arkone.ai"},"engines":{"node":">=22.5"},"gitHead":"316a6406c9cfb8d947f542ce286a7736f3288428","license":"MIT","scripts":{"eval":"node scripts/eval.js","test":"node --test 'test/**/*.test.js'"},"version":"0.0.7","_npmUser":{"name":"sgthomas","email":"sobingt@bitbrothers.in"},"homepage":"https://github.com/arkone-ai/susan#readme","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"_npmVersion":"11.12.1","description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","directories":{},"maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.23.0","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/susan_0.0.7_1790105902624_0.34293128686461527"}}},"time":{"created":"2026-08-07T21:31:43.009Z","modified":"2026-09-22T19:38:22.966Z","1.0.0":"2026-08-07T21:31:43.355Z","1.1.0":"2026-08-07T21:46:29.748Z","1.2.0":"2026-08-07T22:10:05.022Z","1.2.1":"2026-08-08T03:41:35.479Z","1.3.0":"2026-08-08T04:04:45.003Z","1.4.0":"2026-08-09T07:34:38.793Z","1.5.0":"2026-08-22T06:16:42.267Z","1.6.0":"2026-08-22T16:39:50.967Z","1.6.2":"2026-09-22T15:11:15.044Z","0.0.1":"2026-09-22T15:14:29.741Z","0.0.2":"2026-09-22T17:37:07.618Z","0.0.3":"2026-09-22T18:39:46.643Z","0.0.4":"2026-09-22T18:52:04.682Z","0.0.5":"2026-09-22T19:18:03.777Z","0.0.6":"2026-09-22T19:25:07.027Z","0.0.7":"2026-09-22T19:38:22.774Z"},"bugs":{"url":"https://github.com/arkone-ai/susan/issues"},"author":{"name":"ArkOne","email":"hello@arkone.ai"},"license":"MIT","homepage":"https://github.com/arkone-ai/susan#readme","keywords":["claude","claude-code","codex","chatgpt","cursor","mcp","mcp-server","remote-mcp","parallel-sessions","session-coordination","agent-memory","agent-tooling","anthropic"],"repository":{"url":"git+https://github.com/arkone-ai/susan.git","type":"git"},"description":"Susan shows you what every Claude Code and Codex session on your machine is working through, keeps the decisions after the transcript is deleted, and answers ChatGPT web and Claude web over MCP.","maintainers":[{"name":"sgthomas","email":"sobingt@bitbrothers.in"}],"readme":"# Susan\n\n**Susan shows you what every Claude Code session on your machine is working through — its own todo list, live, from outside the window.**\n\nYou run four sessions across four projects. One is waiting on a test, one is half way\nthrough a refactor, one you started an hour ago and cannot remember why.\n\nClaude Code already keeps a todo list inside each session — the steps it is working\nthrough. Susan reads those lists and puts them all on one board, so you can see what\nevery window is doing without opening it. She also tells your agent when two sessions\nare about to edit the same file, and lets one hand work to another.\n\n**There is nothing to maintain.** Susan writes no todo list of her own; she reads the\none your sessions are already keeping.\n\nThree promises hold the whole design together:\n\n> **She never writes to a file in your projects, or to a transcript.** Plans are read, never edited — they belong to the session that wrote them.\n>\n> **She never blocks a tool call.** When two sessions touch the same file, both edits proceed. The agents are told; nothing is denied.\n>\n> **She keeps the distillate, never the raw.** Claude Code deletes your transcripts after about thirty days, so a pure view would go dark with them. Susan keeps the plans — measured at **0.002%** of the transcripts she read, with a test that fails the build above 0.5%. Run `susan doctor` to see the live number on your own machine.\n\nNothing leaves your machine. The one exception is a daily ping — a random id, the\nversion, and a count of live sessions — which is **off unless you turn it on**, and\n`susan ping` prints the exact payload before you decide.\n\n---\n\n## Install\n\n```bash\nnpm i -g @arkone_ai/susan   # installs two binaries. Touches nothing else.\nsusan init                  # shows the exact diff, asks once, backs up your settings\n```\n\nNow open two Claude Code sessions in any two projects. The second one's opening card will show the first. That is the whole proof it works.\n\n```bash\nsusan doctor       # check everything is wired\nsusan uninstall    # undo it — your settings backup is kept\n```\n\nNeeds **Node 22.5+** (for the built-in `node:sqlite`, so there is no native module to compile). macOS and Linux. On Windows, run it inside WSL.\n\n---\n\n## What she does\n\n| Surface | What you get |\n|---|---|\n| **Session start card** | Who else is running, what they are working on, anything queued or unread. Prints **nothing at all** when you are alone and nothing is pending. |\n| **Conflict notice** | Edit a file another live session touched in the last 30 minutes and your agent is told to re-read it first. Once per file. Never blocks. |\n| **Status line** | `arkone-ai/1  ●4 sessions  ⚠1 conflict  ▣3` — the one region of the screen that never scrolls. |\n| **`susan watch`** | A live board, redrawing every two seconds. Park it on a second monitor. When nothing is running it shows what you were last doing. |\n| **`susan serve`** | The same board in a browser at `localhost:4747`. `--lan` makes it reachable from your phone. |\n| **`susan plans`** | Every live session's todo list, and full-text search across every plan ever written on this machine. |\n| **`susan agent`** | Domain agents. `@sales` opens already knowing its folders and every decision made in them — no context to retype. |\n| **MCP tools** | Your agent can read the board, see what other sessions are working through, search plan history, load a domain agent's context, hand work to another project, and leave notes. |\n\n### The card, at five sessions\n\n```\n─ susan ── 5 sessions ─────────────────────────────────────────────────────\n  ⚠ conflict  hosts.js — arkone-ai/1 · goclaw/1\n  ● pharmadesk/1      refactoring the approval route    12m  3/7\n  ● goclaw/1          wire the mcp stdio transport      31m  1/4\n  ● fzst-claw/1       lead scoring backfill              8m  2/2\n  ● arkone-ai/1       fix the content planner filter     4m  0/5\n  ▣ 2 queued                                            `susan queue`\n───────────────────────────────────────────────────────────────────────────\n```\n\nThe conflict sits above every session row, because it is the only line that changes what you do next. `3/7` is how far that session has got through its own plan. The card is capped at ten lines no matter how many sessions are running.\n\n### The plans\n\nClaude Code keeps a todo list inside each session — the steps it is working through.\nSusan reads that list out of the session's transcript and shows it on the board:\n\n```\n  ●  arkone-ai/2         fix the content planner filter        4m\n                         src/app/.../ui.js\n                         2/6 done\n                         ✓ read how the date filter is built\n                         ✓ reproduce the timezone bug\n                         ▸ correct the boundary comparison\n                         · add a test for the DST case\n                         +2 more\n```\n\nShe never writes to that list. It belongs to the session, and the session's agent is\nthe only thing that changes it — so what you see is what it actually thinks it is doing.\n\n```bash\nsusan plans                    every live session's list\nsusan plans razorpay webhook   search every plan ever written\nsusan plans --all              recent plans, including closed sessions\n```\n\nSearch covers your whole history. Nine hundred megabytes of transcripts index in about\na second and a half, and only newly appended bytes are read after that.\n\n### How a session gets its name\n\nNobody types it. Susan takes the first eight words of the first thing you typed, verbatim. A session that has not been given anything yet reads `just started`, and once it edits something it reads by filename. There is no `(unclaimed)`.\n\n---\n\n## From inside a session\n\n```\n/susan                       the board, without leaving your session\n/susan plans                 what every session is working through\n/susan plans <words>         search every plan ever written\n/susan queue                 what is waiting for this project\n```\n\n`susan init` installs it at `~/.claude/commands/susan.md`. If you already have\na `susan.md` of your own there, she leaves it alone and says so.\n\n---\n\n## Commands\n\n```bash\nsusan board              # the board, once — sessions, their plans, conflicts\nsusan watch              # the board, live — ctrl-c to close\nsusan serve              # the board in a browser\nsusan serve --lan        # ...also reachable from your phone on the same wifi\nsusan connect            # a url + token, for chatgpt web and claude web\nsusan statusline         # one line, for a status bar\n\nsusan plans              # what every live session is working through\nsusan plans <words>      # search every plan ever written\nsusan plans --index      # re-read every transcript from scratch\n\nsusan memory <words>     # what was decided, from sessions that no longer exist\nsusan memory --distill   # build it: shows the cost, waits for a keystroke\nsusan memory --status    # how many memories, and what is queued\n\nsusan agent create sales ~/plans/campaign-a ~/plans/campaign-b\nsusan agent list         # every domain agent, its folders and history\nsusan agent refresh sales\nsusan agent remove sales\n\nsusan queue push goclaw \"regenerate types\"    # hand work to another project\nsusan queue claim 3                           # take it\nsusan message send pharmadesk \"taking hosts.js\"\n\nsusan login              # sign this terminal in to a team hub\nsusan push               # send your decisions there — asks first, always\nsusan export             # write them to a file instead; nothing leaves\n\nsusan reset              # clear stale sessions; keeps plans and queue\nsusan doctor             # diagnose\n```\n\n---\n\n## A team, if you want one — `susan login`\n\nEverything above works alone, on one machine, forever. Nothing leaves it.\n\nA team is the other case: your colleague hits the problem you solved in\nMarch, and the transcript that explained it was deleted in April. `susan push`\nsends the decisions — never transcripts, never prompts, never file contents —\nto a hub the team can search, and to the agents working in it.\n\n```bash\nsusan login              # prints a short code, opens your browser\nsusan push               # shows exactly what would go, then asks\n```\n\n`login` never asks you to paste a token. It shows a code, you approve it in a\nbrowser that is already signed in, and this terminal collects a credential\nnobody typed. It lands in `~/.claude/susan/credentials.json` at mode 600,\ncarrying the hub URL beside the token — because a token alone does not say\nwhere to send, and a push that goes somewhere unintended and reports success\nis worse than one that fails.\n\n`susan push` prints the whole payload and the project names before asking. The\nanswer to \"what is it about to send\" should be readable, not trusted.\n\nSelf-hosting or pointing at a dev hub is `SUSAN_HUB_URL`; the public one is\n[susan.network](https://susan.network). To let your agents read the team's\ndecisions, context and skills, `susan login` wires the MCP server too.\n\n---\n\n## Memory, after the transcript is gone\n\nClaude Code keeps your session transcripts for about thirty days, then deletes\nthem. Susan reads what a session decided before that happens and keeps the\ndecision — a sentence, the quote it came from, and where to find it.\n\n```bash\nsusan memory --distill          # ~$0.035 of plan quota per session, ~20s each\nsusan memory \"retry wrapper\"\n```\n\n> No custom retry wrapper was added because the SDK already retries 429s.\n> `\"The SDK already retries 429s with backoff internally\"`\n> susan · ~/.claude/projects/-Users-d-projects-susan/a1b2.jsonl:284119\n\n**It uses the Claude Code subscription you already pay for.** Not an API key,\nnot a second bill — `claude -p` on your own plan. Susan never handles a\ncredential.\n\n**It is asked, never volunteered.** Nothing is injected into a session. A\nmemory you have to ask for is a wrong answer you can check; a memory pushed\ninto every session start is a wrong answer acted on everywhere, forever. Pull\nis what the numbers currently justify.\n\n| | Mechanism | Cost | Network |\n|---|---|---|---|\n| **Rules + FTS5** | keyword search over filtered text | free | none |\n| **Distillation** | your own Claude Code, `claude -p` | plan quota | yes |\n\nScored before it shipped, on hand-labelled sessions: `npm run eval` reports\nprecision and recall separately and refuses to pass below **0.95 precision**. A\nmemory layer that is 90% right is worse than none, because you stop being able\nto tell which 10% is wrong.\n\n## Domain agents — `@sales`, without the retyping\n\nEvery sales conversation used to start the same way: paste the campaign context,\nexplain the offer, again. `susan agent` ends that. Name a domain, point at the\nfolders that hold it, and Susan generates a Claude Code agent that opens already\nknowing them:\n\n```bash\nsusan agent create sales ~/projects/acme/plans/dubai-campaign ~/projects/acme/plans/fly91-outreach\n```\n\nType `@sales` in any new session and the agent reads the right entry document\nfresh (`STATUS.md` beats `plan.md` beats `README.md`), pulls every decision past\nsales sessions produced, and treats any \"never\"/\"only\" line in your documents as\nbinding.\n\nThree things keep it honest:\n\n- **The agent file is a router, never a copy.** It points at your folders; it\n  quotes nothing. Your documents stay the single source of truth and cannot go\n  stale inside the agent.\n- **Its memory is scoped, not duplicated.** Sessions that invoke `@sales` — or\n  that edited files under its folders — are the domain's history, and their\n  distilled decisions are what `@sales` remembers. One `memories` table, one\n  budget, no second store.\n- **It leaves the way it came.** `susan agent remove` and `susan uninstall`\n  delete exactly the files Susan generated. An agent file you wrote or rewrote\n  yourself is never touched.\n\n### Which tools she can read\n\nThere are two ways in, and which one a tool uses depends on one thing: does it run on\nthis machine, or in a browser?\n\n| Tool | How it reaches her | Status |\n|---|---|---|\n| **Claude Code** | she reads its transcripts + `TodoWrite` | works today |\n| **Codex** | she reads its transcripts + `session_index.jsonl` | works today — no `TodoWrite` equivalent, so its decisions come from distillation |\n| **Cursor** | it starts `susan-mcp` itself, like any MCP server | works today |\n| **ChatGPT web** | it calls her over HTTP — see `susan connect` | works today |\n| **Claude web** | it calls her over HTTP — see `susan connect` | works today |\n\n> **The web clients are not read; they ask.** Neither writes anything to your disk, so\n> there is nothing on disk to read — which is why the answer is a connection rather than\n> a parser. She cannot see what you typed into ChatGPT. ChatGPT can see your board.\n\n---\n\n## `susan connect` — for the tools with no filesystem\n\nClaude Code, Cursor and Codex all run here and start Susan themselves; they need nothing\nfrom this section. ChatGPT on the web and Claude on the web cannot spawn a process, so\nfor them she has to be a URL.\n\n```bash\nsusan connect            # read-only, bound to this machine, token required\nsusan connect --write    # also allow queueing tasks and leaving notes\nsusan connect --port=5000\nsusan connect token      # print the token again\n```\n\nShe prints a URL and a bearer token. Give both to the client as an MCP server.\n\n> **A URL on your laptop is not reachable from the web.** Both web clients call the URL\n> from *their* servers, not from the browser tab, so `127.0.0.1` will never resolve for\n> them however correct the config looks — the failure is silent, an empty tool list with\n> no error. Put a tunnel in front of it and hand over the tunnel address:\n>\n> ```bash\n> cloudflared tunnel --url http://127.0.0.1:4949\n> ```\n\n**What guards it**, since this is the one place Susan opens a port:\n\n| | |\n|---|---|\n| **A token, always** | Generated on first run, stored `0600`, compared in constant time. There is no unauthenticated mode, not even on loopback — every page your browser has open can reach `127.0.0.1`. |\n| **Read-only by default** | `--write` is opt-in. Without it the write tools are not merely refused, they are **not listed** — a tool advertised and then denied reads as a broken server and the agent will keep retrying it. |\n| **Loopback by default** | `--lan` widens it to your network. Nothing is exposed to the internet unless you tunnel it yourself. |\n| **It stops when you do** | No daemon, no launch agent. Close the terminal and the door closes. |\n\nShe never exposes your files this way. The tools return the board, plans, search and\nmemory — the same things any other MCP client sees, and nothing more.\n\n---\n\n## The MCP tools\n\nRegistered as `susan` when you run `susan init`.\n\n| Tool | Reads/writes | For |\n|---|---|---|\n| `susan_board` | read | What every other session is doing right now |\n| `susan_plans` | read | The todo list each other session is working through |\n| `susan_plans_search` | read | Search every plan ever written — \"what was I doing about X\" |\n| `susan_memory` | read | What was decided, including in sessions that no longer exist |\n| `susan_artifact_search` / `_save` | read / write | What past sessions found about a topic, and keeping what a new one finds |\n| `susan_context` | read + one mark | A context's folders, decisions and notes; calling it files the session under that context |\n| `susan_context_decide` / `_claim` | write | Record one decision against a context, or file the whole session there |\n| `susan_queue_push` | write | Hand a task to a session in another project |\n| `susan_queue_list` / `_claim` | read / write | See and take queued work |\n| `susan_message_send` | write | Leave a short note for another session |\n\nEvery write is local, additive and reversible. Nothing here needs a confirmation gate.\n\nThe same tools are what a remote client sees over `susan connect`, minus every write\nunless you passed `--write`. **That includes `susan_context`** — it marks the calling\nsession as the context's work, which is a write — so ChatGPT and Claude on the web\ncannot load a context from a read-only server. Start it with `--write` if that is\nwhat you want them to do.\n\n**Your agent keeps using `TodoWrite` exactly as before.** Susan reads that list; she does\nnot ask an agent to keep a second one. There is no `susan_todo_add`, on purpose — a tool\nthat manages Claude Code should not also be a reminder app.\n\n---\n\n## The browser board\n\n```bash\nsusan serve          # http://localhost:4747, this machine only\nsusan serve --lan    # also on your phone, over the same wifi\n```\n\n**`susan init` already started it**, and it comes back after a restart — there is no\nterminal to leave open and nothing to remember. `susan serve` above is for running it\nin the foreground when you want to watch it start.\n\n```bash\nsusan serve --install     # keep it up (init does this for you)\nsusan serve --uninstall   # stop it, and stop it starting on its own\nsusan doctor              # says whether the board is answering\n```\n\nBehind it is a launchd agent that starts at login and restarts the board if it stops.\n`susan uninstall` removes it along with everything else.\n\nEverything `susan watch` shows — every session's plan, struck through as it completes,\nin a window you can leave open on a second screen. It updates the instant anything\nchanges, in any session.\n\nTwo deliberate limits:\n\n- **Loopback by default.** A page that can edit your board does not go on the network\n  unless you pass `--lan`, and when you do, it says plainly that anyone on that network\n  can edit it.\n- **Plans are read-only here.** They belong to the session that wrote them; a browser\n  tab has no business ticking off another session's steps.\n- **It cannot claim queued work.** Claiming decides *which session does a job*, and that\n  belongs to the session whose agent will actually do it. Finish it, or drop it; do not\n  assign it.\n\n**Dropping work is undoable.** `drop` sits apart from `done`, in its own colour, and\noffers an Undo for seven seconds after — a confirmation dialog taxes every correct tap,\nan undo only costs the rare wrong one.\n\nThe page loads nothing from the internet — no fonts, no scripts, no analytics — and the\nserver sends a `Content-Security-Policy` that forbids it from trying.\n\n### Reading the board from somewhere else\n\n`GET /api/board` is what the page itself reads, and anything else may read it too.\n\n```json\n{\n  \"sessions\": [\n    {\n      \"id\": \"ba802d5a-…\",\n      \"name\": \"arkone-ai/4\",\n      \"project\": \"arkone-ai\",\n      \"branch\": \"arkone_ai_dev\",\n      \"subject\": \"where are the ICPs?\",\n      \"files\": 23,\n      \"recent_files\": [\"…/core/store.mjs\", \"…/bin/mimi.mjs\"],\n      \"idle_ms\": 24869,\n      \"idle\": \"24s\",\n      \"last_activity\": 1786169782995,\n      \"stale\": false,\n      \"plan\": {\n        \"done\": 5,\n        \"total\": 6,\n        \"items\": [{ \"content\": \"…\", \"status\": \"completed\" }]\n      }\n    }\n  ],\n  \"queue\": []\n}\n```\n\nTwo names are worth stating plainly, because both have an obvious wrong guess:\n\n| It is called | Not | Holds |\n|---|---|---|\n| `subject` | ~~`prompt`~~ | what the session is working on |\n| `plan.items` | ~~`todos`~~ | the steps, each `pending`, `in_progress` or `completed` |\n\n**`subject` is the session's opening prompt and does not change mid-session.** A long\nsession drifts far from what it was first asked; `plan` is what tracks the present. A\nboard that looks stale in the header while the plan below it moves is Susan working\ncorrectly, not caching.\n\n---\n\n## Delegation, not possession\n\n`susan_queue_push` hands work to another project. The receiving session does **not** start it on its own — queued work appears on that project's next session card and in the status line count, and the agent picks it up when you ask.\n\nA session that quietly began work you never requested, in a window you were not watching, is exactly the failure this tool exists to prevent.\n\n---\n\n## How she stays out of your way\n\n| Concern | What actually happens |\n|---|---|\n| **Nothing else can reach it** | The board refuses any request that did not come from its own page — wrong content type, foreign origin, or a rebound hostname all get a 403. A page you visit in another tab cannot touch your board. |\n| **Token cost** | The conflict check is a shell hook: **zero tokens** when there is no conflict. The card is at most ten lines, and nothing at all when you are working alone. |\n| **Latency** | The pre-edit hook's database work measures ~0.3ms. A 50ms circuit breaker guards it: if the board is ever slow, the hook goes quiet rather than making a file write feel sluggish. |\n| **Crashed sessions** | A session that dies without warning is swept after four hours of no activity. Nothing is ever locked, so a stale row costs you nothing. `susan reset` clears them now. |\n| **Broken hooks** | Every hook exits 0 unconditionally, wrapped at the outermost level. A bug in Susan must never break the session she runs inside. |\n| **Your settings** | `susan init` backs up `settings.json` with a timestamp and marks every key it adds. `susan uninstall` removes exactly those and nothing you wrote yourself. |\n\n---\n\n## What she touches\n\n```\n~/.claude/susan/susan.db        the board — sessions, plans, queue, messages\n~/.claude/projects/**.jsonl     READ ONLY — where the plans come from\n~/.claude/settings.json         four hooks, a status line, one MCP server\n~/.claude/settings.json.backup-<timestamp>\n~/.claude/agents/<name>.md      only if you ran `susan agent create <name>`\n```\n\nNothing is written anywhere else. No daemon, and no network of her own.\n\nShe opens a port only while you are standing in front of one: `susan serve` for the\nbrowser board, `susan connect` for a web client. Both stop when you close the terminal,\nand neither survives a reboot. There is nothing running when you have not asked for it.\n\nTo see the change before agreeing to it:\n\n```bash\nsusan init --dry-run\n```\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/arkone-ai/susan.git && cd susan\nnpm install\nnpm test        # 176 tests, no network, isolated databases\nnpm link        # put susan + susan-mcp on your PATH from the checkout\n```\n\nPoint her at a scratch database while developing, so your real board is never touched:\n\n```bash\nSUSAN_HOME=/tmp/susan-dev susan board\n```\n\n| Variable | Does |\n|---|---|\n| `SUSAN_HOME` | Where the database lives (default `~/.claude/susan`) |\n| `SUSAN_CLAUDE_DIR` | Where `settings.json` lives (default `~/.claude`) |\n| `SUSAN_DEBUG` | Print hook errors and over-budget warnings instead of failing silently |\n| `SUSAN_NO_BELL` | Suppress the terminal bell on a conflict |\n\nMIT.\n","readmeFilename":"README.md"}