{"_id":"unsnooze","_rev":"29-41cbad9a13b54740d1509a623bcaa17a","name":"unsnooze","dist-tags":{"latest":"1.19.2"},"versions":{"1.0.0":{"name":"unsnooze","version":"1.0.0","keywords":["claude-code","codex","codex-cli","grok","usage-limit","rate-limit","auto-resume","tmux","ai-agents","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.0.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"4035a7b271b61c98a7d4a60bfef23b4edd723e3a","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.0.0.tgz","fileCount":27,"integrity":"sha512-tWgaQA+e4fPFGX9Qz3wIsYAbQe9wVFYiOsrcnikQ2DTAXid+y5zHKYCGaz8rdTWpdop3EvhX/qUGab/N2W0g/A==","signatures":[{"sig":"MEYCIQDPnk68SDdHahstxTRoapyVco6FZyTvTKQaRFAJc6yZ0wIhAJxL7kEVcbNHb6Ek+EWxTl9cc8W5OP3Ho7/ZXEkKG2Sh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105692},"type":"module","engines":{"node":">=20"},"gitHead":"524730e2fed93680f69bdfa99c7502b60f6fba4c","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.3","description":"Wakes every limit-stopped AI coding session (Claude Code, Codex CLI, Grok) in tmux the moment the usage limit resets.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.0.0_1783671690877_0.36659094284127924","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"unsnooze","version":"1.1.0","keywords":["claude-code","codex","codex-cli","grok","usage-limit","rate-limit","auto-resume","tmux","ai-agents","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.1.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"5deca8393846a742a8ce3de27b661902bcd99ab1","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.1.0.tgz","fileCount":27,"integrity":"sha512-HSnL+iLe2Bu4cEb0aKEHuViCQFyi84lVriHIwB4hi/7QuHRm55rt7IzrN1C2s5ykP+2GG/33dCpytB/IxBABzw==","signatures":[{"sig":"MEYCIQDVO2o9bCLF6VvtgKhDrZyfmr+eYMtc9eD0TKWoO+mJPwIhAPTfj/uQ9D6VdDqgoRgtX040tOXIf98IB2elwAJANMM3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110424},"type":"module","engines":{"node":">=20"},"gitHead":"7fd2faf2dc697abdd4d9077d4a435b4aff0470eb","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.3","description":"Wakes every limit-stopped AI coding session (Claude Code, Codex CLI, Grok) in tmux the moment the usage limit resets.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.1.0_1783679730793_0.5431307632459463","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"unsnooze","version":"1.2.0","keywords":["claude-code","codex","codex-cli","grok","usage-limit","rate-limit","auto-resume","tmux","ai-agents","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.2.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"bb1a64fd7a65590c737d7390774f7f6b47b2f6de","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.2.0.tgz","fileCount":30,"integrity":"sha512-e+5TDaNxiLJoNctC1fVpNpogu7IVZ1QeMRQ12cDjt0DuIWY6rEc4Y2gb6WjmGVcrH6HWfk0p1nAn0DzOgocvVA==","signatures":[{"sig":"MEYCIQCRoT8/Xp+KNf7I3s30fy2FDK/XyjBIp0t1hhiHqqR4tAIhAMbsvuYbEuQJnm3rYnxKgF9MhwWGJ3BRNPx7de98YLW6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145013},"type":"module","engines":{"node":">=20"},"gitHead":"a33bec2ce93f02b7eed02998362d0367e91044a0","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.3","description":"Wakes every limit-stopped AI coding session (Claude Code, Codex CLI, Grok) in tmux the moment the usage limit resets.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.2.0_1783705811432_0.45999288168167074","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"unsnooze","version":"1.3.0","keywords":["claude-code","codex","codex-cli","grok","usage-limit","rate-limit","auto-resume","tmux","ai-agents","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.3.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"6f2eef764a85e38496e54cc02affbe8199226538","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.3.0.tgz","fileCount":30,"integrity":"sha512-mLUnvvG/YIkCAK0E5WQtCSpzeZ+OJ8knXpn8LlDcgPf8dB7Y1FAZr3dD7SpS+mpiJiU5Uy94jwbe9qvR/32cdg==","signatures":[{"sig":"MEUCIHh/zWsqxh9DtI2Ki5UMVgyP9uEthzHiKOWv5w0wKkflAiEAhYRrODBmu72INs5Yb5/X2UxAWkpzWLxtu5QCtmiAYc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147364},"type":"module","engines":{"node":">=20"},"gitHead":"372a78723ca5d509276755a0c8e14e5828a3263e","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Wakes every limit-stopped AI coding session (Claude Code, Codex CLI, Grok) in tmux the moment the usage limit resets.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.3.0_1783781433787_0.918469112476703","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"unsnooze","version":"1.4.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","auto-resume","auto-retry","resume","retry","tmux","ai-agents","agentic-coding","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.4.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"d34cff0a6fa0b5ec3b37fc0973644000ed8abb7c","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.4.0.tgz","fileCount":31,"integrity":"sha512-9p/hFfHpOU/71ClZ6fCnLlBDtZzt+B/DOMvMB3E/Vf/Aofw3YPKpZsKc2xVWGUWyuSZl+gtIrL/4BHAXWPLGJg==","signatures":[{"sig":"MEYCIQDktYSa6zOgTK2yB1E1bv7ETR4F0PtZkM/fCsdOpQ7lVgIhAPbQEBXxReiGuReMeBuAPGVIjzN1i9jEcMXmv5IY+Z3v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157054},"type":"module","engines":{"node":">=20"},"gitHead":"063c9c9bbbfa911eee3aef89ba2dbd69aef50bc9","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI & Grok sessions in tmux when the usage limit (5-hour or weekly) resets. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.4.0_1783799048524_0.8474025797004938","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"unsnooze","version":"1.5.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","auto-resume","auto-retry","resume","retry","tmux","ai-agents","agentic-coding","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.5.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"87f21113556fc6b916ad984ff44c5b3f2d9c7c34","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.5.0.tgz","fileCount":31,"integrity":"sha512-baYE4PAUF0SlSdTfurtgeRCyygSXNIPHnsu43U6FIGPFtvp8l3l02abMTH3QwHcjXy/54DzcqlnhoMpqJdsqCQ==","signatures":[{"sig":"MEQCIBa9/Wi4aaHQfnG0kj6pB6uruSO8vuS6j4/yUon98BK4AiBTeSJiN6C558nCmk9ijKGzOGH3TXdD30mN0WMHOXlBMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159078},"type":"module","engines":{"node":">=20"},"gitHead":"e60310f77cee69c3f27b09c25a70b67b7536eb92","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI & Grok sessions in tmux when the usage limit (5-hour or weekly) resets. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.5.0_1783799645478_0.7994680938008181","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"unsnooze","version":"1.6.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","auto-resume","auto-retry","resume","retry","tmux","ai-agents","agentic-coding","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.6.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"114e45c45aa262ed26d9ca783a690e12a8082e4a","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.6.0.tgz","fileCount":32,"integrity":"sha512-Gvusd+8flYlCAQqip4I9VmpfX4PozI/hBcYTCNOnOBW/v2r13tfb/+H3hgWgNtBZZu9lYEwTWQ9wzIGXMUVqHA==","signatures":[{"sig":"MEYCIQDNfFTSdxvcGdZtvEA/gGGBG+r8aXT2a/yR1wp+SRQd9gIhAOXJAae38L2NjvxQLAaT/5YUmuSZKlEZRatH2d2N2rT1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165238},"type":"module","engines":{"node":">=20"},"gitHead":"f1b2f4b14439d40253fc8062ca814b3746ad1d91","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI & Grok sessions in tmux when the usage limit (5-hour or weekly) resets. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.6.0_1783802662942_0.7451132331265395","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"unsnooze","version":"1.7.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","qwen","qwen-code","kimi","kimi-cli","opencode","antigravity","antigravity-cli","openrouter","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","auto-resume","auto-retry","resume","retry","tmux","ai-agents","agentic-coding","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.7.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"40315ee2c4b1582e1c657b974581924d1a6d9d22","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.7.0.tgz","fileCount":36,"integrity":"sha512-yyielYkIA9hF2ldRs7EHeEhRHNA1ViZDyY/trNQFnzqnxEbuC4PftrWEGZUZ7CeLjMfXPofx2ciJAWun+TvK8Q==","signatures":[{"sig":"MEUCIHlFbKh2ulG25dTWvFEbboG9u6oxd+fe+dtGqB00RmdqAiEAgK+3bHbDxE67iOqQFLGugyEO4VQgLllLU8miBQmkY14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192688},"type":"module","engines":{"node":">=20"},"gitHead":"71750c0286a0838771f08284c28f918700860774","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity CLI sessions in tmux when the usage limit (5-hour or weekly) resets. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.7.0_1783853914227_0.26648063259850807","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"unsnooze","version":"1.8.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","qwen","qwen-code","kimi","kimi-cli","opencode","antigravity","antigravity-cli","openrouter","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.8.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"b83eaf0bf638656a75b19ac5d695afd55b4fd66c","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.8.0.tgz","fileCount":40,"integrity":"sha512-uk4HpJNAWz6hes8K0MulfW5PmxeM11FCLD08NC9dG4QI9eLv8wMtOhe1I4DxUZoZ+9Q9IHoLS+iX/FKEdQRfKA==","signatures":[{"sig":"MEUCIHloMnDw95BrgJS30hjxWFy84s/0Nqm7MMczY3utRikcAiEAvgN/wlBVmy1pMrQtAIB9uUAJloVs6rtb9eGPlgzqxPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234516},"type":"module","engines":{"node":">=20"},"gitHead":"2778fb3d37609847f605372af4c3e4e6375fd051","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity CLI sessions in tmux or Zellij when the usage limit (5-hour or weekly) resets. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.8.0_1783883786540_0.47725135365865223","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"unsnooze","version":"1.8.1","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.8.1","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"5b9a14af414b1968f446e7421c1ebd82678f5edb","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.8.1.tgz","fileCount":40,"integrity":"sha512-IEOK0N9I+LE2CeF7gFV3X8Jyl6fMKvY7E/xt0jpmLUikOEPHifc5yw5+AYnPSfRwF1J1B3i20ZEnRYcuUzOt5w==","signatures":[{"sig":"MEQCIQCqWPNqNpYP3LN04XX8W0IS8Rju7b2MKUYmEJ+fAg1sdgIfUZ7YAEs52g+rBVl46X3bug1zQvdXkQDXZ7c47VpWCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234937},"type":"module","engines":{"node":">=20"},"gitHead":"2a463b5150548ffb7f08ec013b54dd7d9fa43368","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.8.1_1783885520167_0.4356242508490191","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"unsnooze","version":"1.9.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.9.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"7cff9aebeed67e3f945286c447c4d6fddec82366","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.9.0.tgz","fileCount":40,"integrity":"sha512-ycl+MA/MjVNiT+gr3GCA4zTlEGttQCXUh5ufPSWLFjntYtpH928RJPr+IQWo/fWYGal4gS3zEe3hhYkClzkN3A==","signatures":[{"sig":"MEYCIQC/M1PL//pyCbhdjMY121wbEe6pgxmGVINE3xZ1vrjFMAIhANa60XaXbjvs3Y5IeHKQfo/3XC6EPx8sNBwO1Usqf50N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243851},"type":"module","engines":{"node":">=20"},"gitHead":"57dbb89d98b91cbbf3285e8b2ab719d356e846c7","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.3","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.9.0_1783930920708_0.34370730306640707","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"unsnooze","version":"1.10.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.10.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"c3960463be6cc4ab23514042aee18bd099978544","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.10.0.tgz","fileCount":42,"integrity":"sha512-Q3m0aImcO7huPoT3wVw6p3wqhWojKCjUL1+PA88Er5wcNt9CMffwOse9K1lVn+9puxRlNzz/PCAJhKEyplYapg==","signatures":[{"sig":"MEUCIBvEcUr6ZMVY5hTj9xhbsiKelX8UTNJYTwCXrBmFAdRtAiEAiRMfOQ7nrPHqyvklwOFyHk+jBmHTc4v0YyOks6fQmKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288404},"type":"module","engines":{"node":">=20"},"gitHead":"38e1b7526e857f9cfe8c71e545f67e384fe8752f","scripts":{"test":"node --test"},"_npmUser":{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"10.9.4","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.10.0_1784014892761_0.2934005058596294","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"unsnooze","version":"1.12.1","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.12.1","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"6fa3d307d3c566dc405c39e1c9c9a0a97924db2f","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.12.1.tgz","fileCount":44,"integrity":"sha512-1GWk5viyEQpxmhgY8CXXxHDWtLcVcQNZe+AY9uKryzV0wPn80C4FGMciGuGvzNx/jRURosA6l4R6j7w+3SR/Mg==","signatures":[{"sig":"MEUCIGK6FTxxYs5itWKUjKpHzVo4Nj7d2eVdvKTwUB/oQfCuAiEAv1yCmI4k4jeerejVb3OpMs81TKrao6w8IdbXeLC7PEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":352625},"type":"module","engines":{"node":">=20"},"gitHead":"16bc41a59295021e3bbb65f21e320afd513d89d9","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.12.1_1784199585750_0.07781083046291459","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"name":"unsnooze","version":"1.12.2","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.12.2","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://github.com/saaranshM/unsnooze#readme","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"a64a2c681c36c3c41c29ec5435e2bc91ae70cf6b","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.12.2.tgz","fileCount":44,"integrity":"sha512-CB7fv5FKMYONs0AKJDcoZnytJB3BzSA/r60U2gj7bBKVtPqF3M1yigOUgiIEYmyQbeMQRe9SXlrQjm5s5/6sgA==","signatures":[{"sig":"MEUCIQDWbudNWAnYlvjnY8Rr3nlTTvCCJUc0ZVtEUM5do9pOiQIgHAtvc324BTtiJ/r6tVeTFTAE1ePWSSE8dtviS0YliG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":355228},"type":"module","engines":{"node":">=20"},"gitHead":"b06383e3040521051674576fb7319af9fd5a545d","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.12.2_1784200033288_0.8088211645974297","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"unsnooze","version":"1.14.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.14.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.combustortech.in","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"4dec6633bb063c068d7ce27b9dabacfe12058ec1","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.14.0.tgz","fileCount":67,"integrity":"sha512-iQyw4l4k4N53QF+DgL8HyAXe5NGx/31KzAeo252SHaYkFGbWwr3dENxvv3SyJEELQuIxW0YSsnZGJiifYNsvjg==","signatures":[{"sig":"MEYCIQDHwpc0T96S16+LpWc4hutNgL+FJEyJxpzTNCfMXZmnSAIhAOQYjSZQia0NU2gpWDfbpgrVjipr5M4O73rHjeNwcBZT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":639990},"type":"module","engines":{"node":">=20"},"gitHead":"2c989f5b4a6e574c4302f3666cd8ba513c07217b","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps. Wakes every limit-stopped AI coding session automatically.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.14.0_1784445399970_0.2648221814575853","host":"s3://npm-registry-packages-npm-production"}},"1.14.1":{"name":"unsnooze","version":"1.14.1","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.14.1","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"0c08bff79575e398f54fa34a6f28176ab9a5027e","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.14.1.tgz","fileCount":67,"integrity":"sha512-kACKsg+eZi56ZvXZgnzli1cWZpwW8+PyA0dmBNwwFcHaHrtohPJOIf8fMFn6J7QM2AHobHcLspp/goAbA/K2bg==","signatures":[{"sig":"MEUCIDV6UwH/tY8ARZUOnN9Tpg+evZQori+1WnjGtpjiE6egAiEAqXm+kkCV7zhbbLXRxcjSsH2HPPEcVTAlDpI3x8ZeQ1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":640363},"type":"module","engines":{"node":">=20"},"gitHead":"8784a623aee8ac163bb5c6b1101b7993460b793b","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—across tmux, Zellij, VS Code, and desktop apps.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.14.1_1785838115781_0.18332453615666422","host":"s3://npm-registry-packages-npm-production"}},"1.14.2":{"name":"unsnooze","version":"1.14.2","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.14.2","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"e66a11a234ab5487b7cac0cfe4a0e005cce96c42","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.14.2.tgz","fileCount":67,"integrity":"sha512-MSVFBnpCPdug+kXlaa4E2KDdfC7ah5IlihfOcjbcFBfBNZLY985SdK9iUmjcZKTDYBYFq4gfTo0kCiHxtcbP1Q==","signatures":[{"sig":"MEUCIFseWKOj4NI3CaAJqCdZcKZSPNCFK/sXMTj+rrv+HaW+AiEAyD5RtQClsrXwmAjH5HKvd1d4CaKIJtLuN3XNIYRQozg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.14.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":660699},"type":"module","engines":{"node":">=20"},"gitHead":"b0682885845edf44b90d59e4b65b0418adb2f24b","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—across tmux, Zellij, VS Code, and desktop apps.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.14.2_1786017873217_0.2398798101270847","host":"s3://npm-registry-packages-npm-production"}},"1.14.3":{"name":"unsnooze","version":"1.14.3","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.14.3","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"32b1184ded63f2dde1f4350cb1c79da73f7b519c","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.14.3.tgz","fileCount":67,"integrity":"sha512-ygodlq1Bmv+G05CPHuudPEL1RqI4YPmtISdGW8RGciVZM+RE1CucpNrd3pSST0F6mSOiy4E8MFRuF2BosOaNOw==","signatures":[{"sig":"MEUCIByu2dx58z8qrCpU5SAcJQftNrqPRP4NFF2K63aVcq8fAiEApJA8EPcs2sjU4xdWI6JnVubEixUYkujVSSgnTbhThyU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.14.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":681926},"type":"module","engines":{"node":">=20"},"gitHead":"d2b3166e0e2ac8e6692c47869bce0ad476b679b0","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—across tmux, Zellij, VS Code, and desktop apps.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.14.3_1786189180099_0.8457598188208708","host":"s3://npm-registry-packages-npm-production"}},"1.14.4":{"name":"unsnooze","version":"1.14.4","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.14.4","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"db7dad0fa866b8b40793068fc63d02da8926f00f","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.14.4.tgz","fileCount":67,"integrity":"sha512-VUoTdEyTujtX+qqx/hOuj6mkJozDsBOeuGiEHc85NSBBFkrSjLB85kgFToxQWpD8m6CPFf5SbvNGH7Pw759A9Q==","signatures":[{"sig":"MEUCIQCt+XAPrSGpo3W6tiVsbS1dfzwI7gdSBKCSJrRl3DWO2QIgFi2nHiwaVAgbUwiz15c7jGXumX17tkNpdGFE0QixNis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.14.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":682835},"type":"module","engines":{"node":">=20"},"gitHead":"b697354e7714642915c37a2b729e7f4128bc3108","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—across tmux, Zellij, VS Code, and desktop apps.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.14.4_1786189464932_0.7244761273218108","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"unsnooze","version":"1.15.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.15.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"0941a9e28407b3f87359fda7821a3d972bb3b71f","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.15.0.tgz","fileCount":71,"integrity":"sha512-rdpQCdGJmmlQBvrbs3apudRwmRy9BnAozEoh8rHX7mmsxHHbjYIGwjz6n/wz02SZRH3H/pvLXo783OhNVGj47A==","signatures":[{"sig":"MEUCIGYmIzhA2r7ol9j1roTl4Eef1/N9dvxcT+0Xy4jn3qsRAiEA1xQpppoJt8kTQeUF9P1xrUeqV8NlWtNzmUrS6hSqsE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":753354},"type":"module","engines":{"node":">=20.12"},"gitHead":"2ed0170cc2e9cfa42b3635b1722f7da3ccb61112","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—across tmux, Zellij, herdr, VS Code, and desktop apps.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.15.0_1786827018258_0.6564716383074936","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"unsnooze","version":"1.16.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.16.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"79cb05652a581051b093784614a2f1947f781435","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.16.0.tgz","fileCount":74,"integrity":"sha512-rIEgoRpMmcX+jQ2S9x/0g+CkiNi0I0neESGv2HAGzBEsgb2BJqL1V1i7bVuYKf80FerbzlzRMwLZXhSWmtX0Lg==","signatures":[{"sig":"MEYCIQCz4ndzw9/xwvTkN5EWBw+IfUMoM6emaSZFOwiAEh0d7gIhANPckDj9vrZORQKeIMG3dPg0xWHzJEWm9R4SlAvUOVVN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":794862},"type":"module","engines":{"node":">=20.12"},"gitHead":"1a7ce93618612c56d5cf804d2db85f2a1aa0e6f3","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.16.0_1786827260495_0.09600768536554694","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"unsnooze","version":"1.16.1","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.16.1","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"23a617c8b22d269ebea26301894e05788f1cb82c","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.16.1.tgz","fileCount":74,"integrity":"sha512-llPC32XOOcoBop7UnE7dJAC88rccnD8wczL1K/oKZJ3FNgwwD7LED7cj0g72jTIG2EifrYuV1oihZ6dJpH88/w==","signatures":[{"sig":"MEQCIBloLmV4jr2Io9Gx9CDLayf5oE0iXqp4oslv3vLdqqTKAiAmL/mL3gIkKNQwm21Kzcegw60xtlF3YHfERBeN/tWShQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":797799},"type":"module","engines":{"node":">=20.12"},"gitHead":"15c2ef572501ff560497a1e77c0eabc51323b52b","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.16.1_1786827998596_0.4119733850518479","host":"s3://npm-registry-packages-npm-production"}},"1.16.2":{"name":"unsnooze","version":"1.16.2","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.16.2","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"ca248c3f60b78d949dd9a40115c3740d35a8319d","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.16.2.tgz","fileCount":74,"integrity":"sha512-fjepWqHQbnmaniZMB1z9nS7lI7hfXl9emEssCYr0+SIaQNFYtUbDZLfGYQXGTJNohlIAlbkgI73dU/8QDmMnJw==","signatures":[{"sig":"MEQCIG4+IyqIdGWU/z2f1KU/b7jotF2ideG0LIwzIYwK5WfkAiAe7ZMQc+KVdNw9Z59wyqsDuu2iCT/gXVCDqZYtH2aZEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDcYi2+MX0Z+Q778vAJz1SZ7bbyMoMokDzru/88SCwPjAiEAuhDWUxThzQvrD1UfVSDfqzsP5t/I66zCTRskYjL3eic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.16.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":801702},"type":"module","engines":{"node":">=20.12"},"gitHead":"440ce03d1a745431255dee02acd9e39143e9d3ac","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.16.2_1787391601312_0.3333565441940225","host":"s3://npm-registry-packages-npm-production"}},"1.16.3":{"name":"unsnooze","version":"1.16.3","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.16.3","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"032a7ba580ef72ab4b5bd5a0e4b68eefd114c416","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.16.3.tgz","fileCount":74,"integrity":"sha512-FayGYxCspq669wcQ52lcWbWbT7amLrfkODQIHdpc3yp8h5trGEIJer7Z25VJ5EI8+UIYxAznH0lHCLZ9ApGrsw==","signatures":[{"sig":"MEUCIQCF+Zf8S4sxUX7aHVDmtvvus6295WqncagT5LA/oiAmYQIgBdqcXZS4lnuEtiooQt9KYWO51unD56DX4sT/9K0aFyA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCrIVkZIe1hYcxD95gsmrc9FliMFRHu7Y7WqL+eb1VA4wIgT+YIY7Cm3QEb3WI0IUs06LdX27cxWZQe2nZ2ZO1oKMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.16.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":805068},"type":"module","engines":{"node":">=20.12"},"gitHead":"6b025a92464e768ac16eb36651edc0ec45a6d305","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.16.3_1787394279725_0.17729364871456132","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"unsnooze","version":"1.17.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.17.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"f02fc8bb441362809f8cd8c96a7c6559eafa69c1","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.17.0.tgz","fileCount":74,"integrity":"sha512-a3J9FvZ/jxfriJWa+gbX5p9juaGjZ34OYRC31+arAY60PcOWj4s4j41QtwWCxxZN50nppVkss0NwJ8sZMnL5pA==","signatures":[{"sig":"MEQCIBTupVFKZ6PkwCbpec5N3v+tjJgLQRXou78ZsnfiGK3+AiAyV8GwOBAT71QN8nM9xxr1w64LwlB6of8ZUbIBxtkmig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICi/AgH7yk+T5p5m8kD4fzTMslwubwAYkB6gtWXzwauNAiEAylbtP5pc6qPgSCa151fx7HIRqBByVc49amWpJZjsbXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":834716},"type":"module","engines":{"node":">=20.12"},"gitHead":"8fdf34fc5305a1b8726b83f2cb9a61c0f76d45e5","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, and Antigravity sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.17.0_1787504893039_0.3748301529304703","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"unsnooze","version":"1.18.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","cursor","cursor-cli","cursor-agent","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.18.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"cb3ae889ceb735d088610d3d7e7a5f8400004de5","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.18.0.tgz","fileCount":75,"integrity":"sha512-MyrvDFrMGJv0/tCtUgWsF6G8UJZrecrD7WZJUR7iDJDo48ODenDad2mimRO05YcB/nxbJM1vcHJm2c09FPQpyg==","signatures":[{"sig":"MEUCIQCK85JHuwubShAnGdGMBcGnK1gODLdNaUeg4+ocSgb9NgIgZmOxIdOPOouDWkYui1g5M4MZxiFtm769OhixlCC8fuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCtY4N1dfR4Hlgy8nqgAe92XBzICgx/iW6he61slGMAvAIgRUtdhVzZgRdlkt5UvJg/m2i24U52NMG5d+5+CwIoEN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":851204},"type":"module","engines":{"node":">=20.12"},"gitHead":"42cba157652d038c57e5c2b01ad4c27960e2c069","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, Antigravity, and Cursor CLI sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.18.0_1788371812379_0.2207373381862916","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"unsnooze","version":"1.19.0","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","cursor","cursor-cli","cursor-agent","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.19.0","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"e6cad2bbfeeac97a32e43eab55117024a03497c2","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.19.0.tgz","fileCount":76,"integrity":"sha512-+0+YWg7+L549hpeL0QYZQQUAN41GiuhnDFN9dLjCTri8O4ETpkiuAoWNGVAI+WdejB51gaiCcKYtnKO0wBz30g==","signatures":[{"sig":"MEYCIQDLdXqxfX7vWxsP3HjjMhlPAlhGReHQalInYuR08vBEjQIhAN4QFlyorP+V5syWH1JXSQkd2KzYGGyGQgrKMMcBhl9s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDmXMS9d7gwcRkhHn25NEFXbT0tBecg5r1mIj5RA8aAYAIhAPhYgfXvCvUE4f0FV/ASENCIbRRpCh+gZ3ft3eGNPC8o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":864069},"type":"module","engines":{"node":">=20.12"},"gitHead":"08238a1e8199f28447d278c17e6f6daaa140e20b","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, Antigravity, and Cursor CLI sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.19.0_1789037654640_0.6253590781779326","host":"s3://npm-registry-packages-npm-production"}},"1.19.1":{"name":"unsnooze","version":"1.19.1","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","cursor","cursor-cli","cursor-agent","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","_id":"unsnooze@1.19.1","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"homepage":"https://unsnooze.dev","bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"bin":{"unsnooze":"bin/unsnooze.js"},"dist":{"shasum":"0b9287eb1e94d8530743ae1ff98b410bb47de6f5","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.19.1.tgz","fileCount":77,"integrity":"sha512-9Q6Wed1JTx5JZKmapRoGqiaiCDbtAM3AY4nrWwx7fEiyHbhbtOJRtWQLa+QdETVQ0xmRlfodPLuOaaKRpD+gSA==","signatures":[{"sig":"MEYCIQDobCD+bTLLZ4L1pe2ydjnome5HyGLSz7tgW4c26jAdkgIhAIm5xTu+NQlU9CHAEkh1RIfxlhnsvNokHiTBmwh2Yyjf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDexuLE83ppq3AV9adh8j3YHqgoiNPCJXTH6fNQpBiV9wIgMLEaQVT7jdFY6ph4RhQ4Y7iRidyewFp4pwKHh8JKM/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":910514},"type":"module","engines":{"node":">=20.12"},"gitHead":"af23435994bdd020d19b2fd3a202a3f1f76c70c5","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, Antigravity, and Cursor CLI sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unsnooze_1.19.1_1789984310877_0.4609312924593161","host":"s3://npm-registry-packages-npm-production"}},"1.19.2":{"_id":"unsnooze@1.19.2","bin":{"unsnooze":"bin/unsnooze.js"},"bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"dist":{"shasum":"1760c0268ca4479d38fa33104e25d0e2adb781ca","tarball":"https://registry.npmjs.org/unsnooze/-/unsnooze-1.19.2.tgz","fileCount":77,"integrity":"sha512-zAVvLVvEjtZg66Xt2e1E4br7eUXL/vXoMiVJeOrZg6a4xjJTBycyLd/9f7F/xWjOjrSML+BDUwf91TCVMLQAXQ==","signatures":[{"sig":"MEQCIHq+C2S8vCDN+82tfmrRpqSL7TaeNgLKTp5YNvsyHWgEAiBxjpIsM3yBzrbyhI1spwCCh2tjhD1o+afWCHoy3PXIOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBWzo8dGUviy/VcFNRxy5beG9YRcoIcaZl3NNTR4uUuzAiAsDa2/6moqtIGnuhC0PVx5A5RUtTEUyJCKwZZCfjLb4g=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/unsnooze@1.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":940539},"name":"unsnooze","type":"module","author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"engines":{"node":">=20.12"},"gitHead":"dd8e3d9805b46b5c173cd8914c3d3531daae7526","license":"MIT","scripts":{"test":"node --test"},"version":"1.19.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8e0fbd6-84ea-4436-a660-5c785075a1c1"}},"homepage":"https://unsnooze.dev","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","cursor","cursor-cli","cursor-agent","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"_npmVersion":"11.5.1","description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, Antigravity, and Cursor CLI sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","directories":{},"maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","react":"^19.2.7","picocolors":"^1.1.1","@clack/prompts":"^1.7.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unsnooze_1.19.2_1790450432760_0.1274949182237366"}}},"time":{"created":"2026-07-10T08:21:30.829Z","modified":"2026-09-26T19:20:33.185Z","1.0.0":"2026-07-10T08:21:31.023Z","1.1.0":"2026-07-10T10:35:30.925Z","1.2.0":"2026-07-10T17:50:11.574Z","1.3.0":"2026-07-11T14:50:33.918Z","1.4.0":"2026-07-11T19:44:08.674Z","1.5.0":"2026-07-11T19:54:05.625Z","1.6.0":"2026-07-11T20:44:23.083Z","1.7.0":"2026-07-12T10:58:34.377Z","1.8.0":"2026-07-12T19:16:26.719Z","1.8.1":"2026-07-12T19:45:20.421Z","1.9.0":"2026-07-13T08:22:00.830Z","1.10.0":"2026-07-14T07:41:32.904Z","1.12.1":"2026-07-16T10:59:45.891Z","1.12.2":"2026-07-16T11:07:13.435Z","1.14.0":"2026-07-19T07:16:40.185Z","1.14.1":"2026-08-04T10:08:36.006Z","1.14.2":"2026-08-06T12:04:33.385Z","1.14.3":"2026-08-08T11:39:40.254Z","1.14.4":"2026-08-08T11:44:25.153Z","1.15.0":"2026-08-15T20:50:18.422Z","1.16.0":"2026-08-15T20:54:20.653Z","1.16.1":"2026-08-15T21:06:38.737Z","1.16.2":"2026-08-22T09:40:01.420Z","1.16.3":"2026-08-22T10:24:39.829Z","1.17.0":"2026-08-23T17:08:13.124Z","1.18.0":"2026-09-02T17:56:52.484Z","1.19.0":"2026-09-10T10:54:14.747Z","1.19.1":"2026-09-21T09:51:50.957Z","1.19.2":"2026-09-26T19:20:32.855Z"},"bugs":{"url":"https://github.com/saaranshM/unsnooze/issues"},"author":{"name":"Saaransh Menon","email":"saaransh.dev2811@gmail.com"},"license":"MIT","homepage":"https://unsnooze.dev","keywords":["claude","claude-code","codex","codex-cli","openai","anthropic","grok","xai","qwen","qwen-code","kimi","kimi-cli","moonshot","opencode","antigravity","cursor","cursor-cli","cursor-agent","antigravity-cli","gemini","google","openrouter","chatgpt","usage-limit","usage limit","rate-limit","rate limit","5-hour limit","weekly limit","auto-resume","auto-retry","resume","retry","tmux","zellij","herdr","ai-agents","agentic-coding","cli","developer-tools","windows","powershell","claude-design","mcp","headless","wsl","cmux"],"repository":{"url":"git+https://github.com/saaranshM/unsnooze.git","type":"git"},"description":"Automatically resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode, Antigravity, and Cursor CLI sessions when 5-hour or weekly usage limits reset—on macOS, Linux and Windows, with or without a terminal multiplexer.","maintainers":[{"name":"saaranshm","email":"saaransh.dev2811@gmail.com"}],"readme":"<div align=\"center\">\n\n<img src=\"assets/banner.svg\" alt=\"unsnooze — wakes every limit-stopped AI session the moment the limit resets\" width=\"880\"/>\n\n<br/>\n\n[![CI](https://github.com/saaranshM/unsnooze/actions/workflows/ci.yml/badge.svg)](https://github.com/saaranshM/unsnooze/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/unsnooze?color=f59e0b)](https://www.npmjs.com/package/unsnooze)\n[![node](https://img.shields.io/badge/node-%E2%89%A5%2020.12-3fb950)](package.json)\n[![license](https://img.shields.io/badge/license-MIT-8b949e)](LICENSE)\n\n**Automatically resume every limit-stopped AI coding session when its usage limit resets.**\n\n[Website](https://unsnooze.dev) · [Documentation](https://unsnooze.dev/docs/) · [Changelog](https://unsnooze.dev/changelog/) · [Feedback](https://unsnooze.dev/feedback/)\n\n**Claude Code · Codex CLI · Grok · Qwen · Kimi · OpenCode · Antigravity · Cursor** — when they hit the 5-hour or weekly usage limit\n(\"You've hit your usage limit\"), your session just… stops.<br/>\nunsnooze auto-resumes them: it tracks **every** limit-stopped session across all\nyour projects and **wakes each one up the moment the usage limit resets** — in\ntmux, Zellij, herdr or cmux, and on **macOS, Linux and Windows**, with or\nwithout a terminal multiplexer.\n\n```sh\nnpm install -g unsnooze && unsnooze setup\n```\n\n<img src=\"assets/demo.svg\" alt=\"terminal demo: limit banners detected in two sessions, unsnooze waits for the reset, then wakes both — good morning, the work is done\" width=\"880\"/>\n\n</div>\n\n## Why unsnooze\n\nOvernight and long-running agent work dies at the 5-hour / weekly limit, and every\nexisting tool solves only a slice of it:\n\n| | **unsnooze** | claude-auto-retry | autoclaude | hydra |\n|---|:---:|:---:|:---:|:---:|\n| Multi-CLI (Claude · Codex · Grok · Qwen · Kimi · OpenCode · Antigravity · Cursor) | ✅ | ❌ Claude only | ❌ Claude only | partial |\n| GUI sessions (VS Code ext, desktop apps) | ✅ watcher daemon | ❌ | ❌ | ❌ |\n| Waits for reset & resumes the **same** session | ✅ | ✅ | ✅ | ❌ switches provider |\n| All sessions at once (shared ledger + one daemon) | ✅ | ❌ one pane | ✅ | ✅ |\n| Revives sessions whose pane/process is **gone** | ✅ `--resume <id>` | ❌ | ❌ | ❌ |\n| Survives laptop sleep & weekly-scale waits | ✅ epoch polling | partial | partial | n/a |\n| Settings + first-run wizard | ✅ | ❌ | ❌ | ❌ |\n\n## Trust & security\n\nunsnooze is a **scheduler that presses your keys — not an auto-approver.** It waits\nfor your usage limit to reset, then resumes the *same* session. It never changes how\nyour agent handles permissions.\n\n- **Types only after proving the pane is yours.** Every keystroke requires both\n  *identity* (a tmux `@unsnooze_owner` stamp, else a lease = process id + birth\n  time — a mismatch vetoes, because pane ids get recycled) and *liveness* (your\n  agent is still running there). Pane closes require proven identity (idle\n  threshold too for `resumed` panes). Ownership unprovable → it reopens a fresh\n  session instead of typing.\n- **See before you trust: `unsnooze preview`.** A true dry-run — it prints exactly\n  what would be typed, where, and why (or what's holding it back), and sends\n  nothing. Preview shares its decision code with the real dispatcher, so it cannot\n  drift from what dispatch actually does.\n- **Answers Claude's limit menu safely — never a blind Enter.** It locates the\n  cursor and the **\"Stop and wait for limit to reset\"** option and computes the\n  exact moves. Unreadable menu → it presses nothing. It will never select\n  \"Upgrade your plan.\" Toggle with `menuAutoAnswer`.\n- **No `--dangerously-skip-permissions`, no auto-trust, no auto-approve.** unsnooze\n  never passes bypass flags, never presses \"Yes, I trust this folder,\" and never\n  touches MCP config. Whatever your agent does *after* resuming is governed by\n  **its own** permission model — the same as if you'd typed the message yourself.\n- **Nearly zero network, zero telemetry.** One version check to\n  `registry.npmjs.org` (nothing identifying; `updateCheck=false` turns it off), and\n  push notifications only if *you* configure an ntfy topic. State stays local under\n  `~/.unsnooze`.\n- **Reversible install.** The settings hook and rc-file wrappers are backed up\n  first (`*.unsnooze-orig` pristine + `*.unsnooze-bak` rolling); `unsnooze\n  uninstall` removes every change. Releases are published with npm provenance.\n- **Fleet adds no network surface.** No listening ports, no custom auth, no\n  tokens. Transport is your own OpenSSH (`~/.ssh/config`, keys, agent);\n  unsnooze never sets `StrictHostKeyChecking=no` and fails fast on unknown\n  hosts instead of auto-trusting them.\n- **The remote is the authority.** Fleet resume only marks a session due —\n  the remote daemon types under its own gates (foreground, idle, your\n  configured message only). A compromised viewer cannot make a remote type\n  anything else.\n- **Remote output is untrusted.** Everything a host returns is\n  control-character-stripped and length-capped before it touches your\n  terminal (ANSI-injection defense), and parsed fields are extracted —\n  never merged — into fresh objects.\n- **Lock a key to unsnooze (optional, recommended for automation):**\n  `command=\"unsnooze _remote\",restrict ssh-ed25519 AAAA… unsnooze-fleet`\n  in the remote `authorized_keys` confines that key to the fleet\n  entrypoint — it can never open a shell.\n\n**Honest limits:** unsnooze *does* inject keystrokes into your live terminal on\nyour behalf, and it does not sandbox your agent or defend against prompt\ninjection / malicious repos — that's your agent's job. Full threat model, residual\nrisks, and vulnerability reporting: **[SECURITY.md](SECURITY.md)**.\n\n## Supported CLIs\n\n- **Claude Code** — dual-channel detection: the `StopFailure` hook (authoritative,\n  carries `session_id`) plus multiplexer pane scraping for banners and the interactive\n  limit menu (always answered with *\"Stop and wait for limit to reset\"*, never a\n  blind Enter). Dead sessions revive via `claude --resume <id>`.\n- **OpenAI Codex CLI** — scrape-based (Codex fires no event on limits). Detects\n  the exact `■ You've hit your usage limit …` banner strings from the Codex\n  source, parses `try again at 3:51 PM` / `Feb 23rd, 2026 9:01 PM` /\n  `in 4 days 20 hours 9 minutes`. Dead sessions revive via\n  `codex resume <id> \"<message>\"` — the prompt travels in argv.\n- **Grok Build (xAI)** — ⚠️ *experimental*. Hook channel works (Grok reads\n  Claude-compatible hooks, including `StopFailure`); the limit banner text is\n  not publicly documented, so detection uses generic patterns with a safe\n  fallback. Hit a banner unsnooze missed? Run `unsnooze report` and paste the\n  capture into an issue — that's how this adapter gets good.\n- **Qwen Code** — ⚠️ *experimental*. Dual-channel: a Claude-shaped `StopFailure`\n  hook installed into `~/.qwen/settings.json` (fires with `error: rate_limit`)\n  plus scraping for the verbatim quota renders (`Qwen OAuth quota exceeded`,\n  Coding Plan `Allocated quota exceeded`, and OpenRouter `Rate limit exceeded:\n  limit_…` passthroughs). Qwen never shows a reset time, so waits use the\n  5-hour fallback and self-correct on verify. Dead sessions revive via\n  `qwen --resume <id>` (session ids come from the `*.runtime.json` sidecars\n  qwen writes for exactly this purpose).\n- **Kimi CLI (Moonshot)** — ⚠️ *experimental*. Scrape-based: kimi retries a 429\n  three times within seconds, then stops with a red `LLM provider error: Error\n  code: 429 … rate_limit_reached_error` line — that's the detection anchor.\n  The 429 body carries no reset time (5h fallback + verify). Dead sessions\n  revive via `kimi -r <id> -p \"<message>\"` — with a guard: kimi silently starts\n  a *new* session for unknown ids, so the id is verified on disk first\n  (`--continue` otherwise). `Membership expired` (402) is notify-only.\n- **OpenCode** — ⚠️ *experimental*, and a different shape: OpenCode *retries\n  rate limits itself, forever*, honoring `retry-after` (it will sleep hours\n  until the reset, showing `Rate Limited [retrying in 2h5m attempt #4]`). So\n  unsnooze records the stop but never touches a live self-retrying pane; its\n  job is reviving sessions whose process died mid-wait (laptop slept, tmux\n  gone) via `opencode -s <ses_id>`, with the reset time parsed straight from\n  the banner countdown. Zen plan banners (`5 hour/weekly/monthly usage limit\n  reached…`) and OpenRouter passthroughs are detected too; `insufficient\n  credits` (402) is notify-only.\n- **Antigravity CLI (Google, `agy`)** — ⚠️ *experimental*. The Gemini-CLI\n  successor. Scrapes the forum-reported quota strings (`Model quota limit\n  exceeded`, `Refreshes in 6 days and 18 hours` — parsed, multi-day refresh =\n  the weekly cap) and treats `503 MODEL_CAPACITY_EXHAUSTED` as a transient\n  overload, not a limit. Dead sessions revive via `agy --conversation=<id>`\n  (ids from `~/.gemini/antigravity-cli/history.jsonl`). Like Grok: closed\n  source, so `unsnooze report` captures make this adapter better.\n- **Cursor CLI (`cursor-agent`)** — ⚠️ *experimental*, and the only adapter\n  whose limit is **not waitable**. Cursor's included usage resets on your\n  monthly *billing cycle*, not a rolling window, so unsnooze deliberately never\n  schedules a wake for it: the banner is classified as a model limit, which\n  probes every 15/30/60 min and resumes the moment it clears (you switch to\n  Auto, enable on-demand, or the cycle rolls) instead of sleeping for weeks.\n  The banner text is server-provided — the CLI renders `Error: <title>` plus a\n  detail line and `key: value` extras — and the patterns are pinned against a\n  real captured limit (whose own reset date was a month out, which is the point).\n  `unsnooze report cursor` is how the rest gets better. Transport errors take the transient-overload ladder and\n  `Authentication required` is notify-only. Dead sessions revive via\n  `cursor-agent --resume=<id>` — ids come from `~/.cursor/chats/<md5 of the\n  cwd>/<chatId>/meta.json`, which records the `cwd` so every candidate is\n  verified before use — and `--continue` otherwise, which is workspace-scoped.\n\n  The wrapper shadows **`cursor-agent`** only. The bare `cursor` command is the\n  IDE launcher (`cursor .`) and is never touched; the newer `agent` alias is\n  left alone too, being too generic a name to shadow safely.\n\n**OpenRouter** (the API gateway) isn't a separate agent: its 429 bodies\n(`Rate limit exceeded: limit_rpd/…`, free-models-per-day) are detected inside\nthe CLIs that use it (OpenCode, Qwen Code), and credit exhaustion (402) is\nsurfaced as a notification — there's no reset to wait for, only a top-up.\n\n### Proxy launchers such as Headroom\n\n`headroom wrap claude` and `headroom wrap codex` resolve and launch the real\nagent executable directly. That bypasses Unsnooze's shell-function launcher,\nso no same-pane monitor is attached. Claude's installed `StopFailure` hook can\nstill record stops, as can the transcript/rollout watcher while the daemon,\n`guiWatch`, and that agent are enabled. For full pane monitoring too, configure\nHeadroom's provider-scope persistent routing, then start `claude` / `codex`\nnormally so Unsnooze remains the outer launcher. With Headroom v0.34, one\nexplicit setup is:\n\n```bash\nheadroom install apply --scope provider --providers manual --target claude --target codex\n```\n\n## Claude Design\n\nClaude Design shares your usual 5-hour and weekly limits with chat, Cowork and\nClaude Code — so a long design run stops the same way everything else does, and\nunsnooze resumes it the same way. What it needs first is a terminal to run in.\n\nClaude Design has three surfaces. The canvas at `claude.ai/design` and the\nClaude Desktop sidebar are web apps. The third is an official MCP server that\nClaude Code drives from your terminal, and that is the one unsnooze supports:\n\n```sh\nunsnooze design setup     # registers the claude-design MCP server\n# then, inside Claude Code:\n/design-login\nunsnooze design           # confirms it is registered and signed in\n```\n\nFor long design runs, give the session room to compact rather than stall:\n\n```sh\nunsnooze config set launchExtraArgs.claude \"--autocompact 400000\"\n```\n\n**unsnooze does not automate the web canvas, and will not.** Anthropic's\nConsumer Terms bar accessing Claude \"through automated or non-human means,\nwhether through a bot, script, or otherwise\", and accounts have been terminated\nfor it. Claude Code is the documented exemption — which is exactly what\nunsnooze drives. A browser-driving \"Design adapter\" is not a missing feature\nhere; it is one this project declines.\n\nTwo things worth knowing:\n\n- A signed-out `/design-login` is **not** a usage limit. Waiting will never\n  clear it, so unsnooze reports it separately instead of letting it look like a\n  stop that will resolve itself.\n- Design used to have its own weekly allowance. It does not now — everything\n  draws from one shared pool, which is why `unsnooze usage` already accounts\n  for design work without knowing it is design work.\n\n## GUI surfaces (VS Code extension, desktop apps)\n\nTerminal sessions are watched through the shell wrapper and tmux, Zellij, herdr,\nor cmux, with headless watching when no multiplexer is available. Sessions in\n**Claude Code's VS Code extension / desktop app** and **Codex's IDE\nextension / desktop app** have no pane to scrape — so `unsnooze daemon` tails\nthe session files those surfaces already write:\n\n- **Claude Code** records every rate-limit stop as a structured entry in its\n  `~/.claude/projects/**.jsonl` transcript (session id, cwd, reset time) —\n  shared by the CLI and the VS Code extension.\n- **Codex** writes a `rate_limits` snapshot (usage %, **exact epoch reset\n  time**) into every rollout under `~/.codex/sessions/` — shared by the CLI,\n  IDE extension, and the **unified ChatGPT desktop app** (July 2026: the Codex\n  app became the ChatGPT app; its bundled `codex app-server` writes the same\n  rollouts to the same store — verified against a real install). On machines\n  where Codex lives only inside ChatGPT.app (no `codex` on PATH), unsnooze\n  automatically resumes through the app-bundled binary\n  (`/Applications/ChatGPT.app/Contents/Resources/codex`).\n  The watcher also recognizes a reported 99% five-hour window followed within\n  one minute by an empty `premium` bucket with no credits, using the previous\n  future reset time. The snapshots must come from the same rollout; 99% alone\n  is not a stop signal. This works across watcher polls and daemon restarts.\n  Since codex-cli 0.145 the failed turn's `task_complete` also carries the\n  limit error itself (`codex_error_info: \"usage_limit_exceeded\"` plus the\n  banner text), and unsnooze reads that too — it is the only signal when\n  Codex runs behind an OpenAI-compatible proxy (`model_providers.<x>.base_url`),\n  where the rate-limit headers never reach Codex and every snapshot has empty\n  windows. The banner's time is parsed like a scraped pane; \"Try again later.\"\n  takes the probe path. Reverted threads (the desktop app's edit/regenerate,\n  `/undo`) continue in `rollout-<ts>-<thread id>_<rollout id>.jsonl`; those\n  files are watched and resumed by the stable thread id.\n- **Claude desktop (cowork) sessions** *(experimental, macOS)* run in\n  sandboxes under `~/Library/Application Support/Claude`; unsnooze watches\n  those too and revives with the session's isolated `CLAUDE_CONFIG_DIR`\n  (plus the keychain-scope override that keeps auth working — verified\n  against a real desktop session).\n\nWhen the limit resets, the session is revived **in a multiplexer pane** with\n`claude --resume <id>` / `codex resume <id>` — it's the same session file, so\nthe continued conversation stays visible in the GUI's own history. (Resuming\n*inside* the GUI panel isn't possible today: no extension/app exposes an\nIPC/URI that can send a prompt.)\n\nEnable it in `unsnooze setup` (installs a launchd agent / systemd user unit;\non Windows the daemon is started on demand instead — see [Windows](#windows)),\nor run `unsnooze install --daemon` / `unsnooze daemon` yourself. Turn it off\nanytime with `unsnooze config set guiWatch off`.\n\n## How it works\n\n<div align=\"center\">\n<img src=\"assets/how-it-works.png\" alt=\"architecture: claude/codex/grok panes are watched by unsnooze via hooks and banner scraping; stops land in state.json; the resumer daemon sleeps until the limit resets, then types into live panes or reopens dead ones until every session is running again\" width=\"880\"/>\n</div>\n\n<details>\n<summary>text version</summary>\n\n```\nclaude / codex / grok (shell wrapper) ──► unsnooze _run <agent> ──► CLI in mux pane\n                                              │\n                                              ├─ per-pane monitor (scrapes for limit\n                                              │  banners, drives Claude's limit menu,\n                                              │  seconds-scale retry on 5xx/overload)\n                                              │\nStopFailure hook (claude, grok) ──────────────┤\n                                              ▼\n                                ~/.unsnooze/state.json\n                                { agent, sessionId, cwd, pane, resetAt, status }\n                                              │\n                                              ▼\n                                resumer daemon (singleton, epoch-polling —\n                                survives laptop sleep and weekly-scale waits)\n                                              │\n                          ┌───────────────────┴────────────────────┐\n                 pane still alive?                          pane gone?\n                 send resume message into it                new multiplexer pane,\n                 (only if the CLI is foreground             `unsnooze _run <agent>\n                 and not mid-stream)                        --resume <id>`, verify\n```\n\n</details>\n\nDetection uses agent hooks, saved session files, and terminal banners. Reset\ntimes come from the agent's saved timestamp or the banner text, parsed DST-safe.\nWhen no reset time is available, unsnooze probes on a backoff schedule. Every\nresume is verified afterwards (banner came back → reschedule from the fresh\nbanner, capped at 5 attempts).\n\n## Know the wall before you hit it\n\nRecovery (auto-resume) is only half the job. **Prevention** is knowing when the\nwall is coming — so you can `/compact`, pause, or switch models *before* a stop.\n\n```sh\nunsnooze usage                         # burn rate, % used, time-to-limit\nunsnooze usage --json                  # stable machine shape (exit 2 past warn %)\nunsnooze usage --install-statusline    # opt-in: exact Claude % via statusline\nunsnooze usage --uninstall-statusline  # remove the shim, restore your statusLine\n```\n\n```text\n$ unsnooze usage\nunsnooze usage — account burn & time-to-limit  (daemon: running · warnings at 80,95%)\n\n  claude  5h      [█████████████░░░░░░░]  ~64%  (calibrated from 4 stops)\n          burn    ~31k weighted tok/min over last 42 active min\n          wall    ~1h 10m at this pace · window resets 8:00 pm (absolute)\n\n  codex   5h      [███░░░░░░░░░░░░░░░░░]  5% used  (exact)\n          monthly [██░░░░░░░░░░░░░░░░░░]  5% used  (exact) · resets Aug 11\n          burn    idle — no active burn\n\n  Estimates are a lower bound: Claude quotas are account-pooled with claude.ai/Desktop.\n  Exact Claude percentages available via: unsnooze usage --install-statusline\n```\n\n| What you get | How |\n|---|---|\n| **Honest labels** | Every figure is tagged `(exact)`, `(calibrated from N stops)`, or `(estimated — percentage unavailable)`. Never a bare %. |\n| **Account-wide burn** | Sums all active sessions **and** subagents (the limit is per-account, not per-pane). Idle gaps >5 min are excluded so a quiet hour doesn't hide a fast burn. |\n| **Time-to-wall** | ETA as a band (not a false-precision minute), cross-checked against known reset times. Weekly shown info-only — no unstable weekly ETA. |\n| **Pre-wall warnings** | Daemon notifies at `%` bands (`usageWarnAt`, default `80,95`) **and** time tiers (30 / 10 min). Deduped once per window. |\n| **`/compact` nudge only** | Warnings may *suggest* `/compact` so the eventual wake is cheap. unsnooze **never auto-types it** (same security rule as resume: types only your configured message). |\n\n**Provenance ladder** (why this isn't another guessed-quota dashboard):\n\n1. **`(exact)`** — Codex when a recent local rollout contains `token_count.rate_limits` (`used_percent` + epoch reset). Claude only with the opt-in statusline shim (server-authoritative `rate_limits` from [Claude Code's statusline JSON](https://code.claude.com/docs/en/statusline)).\n2. **`(calibrated from N stops)`** — Claude 5-hour token burn vs a ceiling learned from **your matching usable calibration samples**: a stop classified as `5h`, with a nonzero local token sample from the same model pool when known, otherwise an unpooled fallback sample. A stop can still be valid for revival without meeting those calibration requirements. Not plan presets, not circular P90-of-history.\n3. **`(estimated — percentage unavailable)`** — used tokens + burn are shown when available, but there is no exact percentage (and a Claude 5-hour row has no matching usable calibration ceiling yet).\n\n**Honest limits:** Claude transcript sums are a **lower bound** — subscription quotas are account-pooled with claude.ai and the Desktop app. Without the statusline shim, Claude tops out at calibrated/estimated. Exact Claude % needs Pro/Max after the first API response of a session (absent after `/clear` and on API auth).\n\n## Usage\n\nOn an interactive TTY, `status` / `usage` / `sessions` open a **live dashboard**\n(`unsnooze dashboard`) with the brand logo (`❯` + rising `zzz`), tabs, live\nrefresh until you press **`q`** — and mouse support: click tabs and rows,\nwheel to scroll (toggle with `m`; hold Shift — Option in iTerm2 — to select text). Pipes, `NO_COLOR`, `CI`, and `--json` stay plain.\n\n```sh\nclaude / codex / grok                  # normal usage — wrapped automatically\nunsnooze status                        # tracked sessions + reset countdowns\nunsnooze dashboard [tab]               # live TUI (status|usage|sessions|doctor|logs|fleet|prompts)\nunsnooze usage [--json]                # account burn & time-to-limit forecast\nunsnooze usage --install-statusline    # opt-in exact Claude % (chains your statusLine)\nunsnooze resume-now [id|--all]         # don't wait for the reset time\nunsnooze cancel [id|--all]             # stop tracking a session\nunsnooze message <id> \"text\"           # per-session wake message (--clear to reset)\nunsnooze preview [id]                  # dry-run: what WOULD happen right now, and why —\n                                       # nothing is typed or opened\nunsnooze sessions                      # list unsnooze-owned mux sessions + panes\nunsnooze reap [--dry-run|--yes]        # close finished panes / empty sessions (default dry-run)\nunsnooze doctor [--fix]                # install health check + retire old csg leftovers\nunsnooze prompt add [--agent id] [--project path] [--at time|--now] \"text\"\n                                       # queue a prompt for a NEW session (see Queued prompts)\nunsnooze prompt list [--json]          # list queued prompts\nunsnooze prompt remove <id>            # cancel a queued prompt\nunsnooze prompt clear                  # cancel all pending queued prompts\nunsnooze config list                   # settings (see below)\nunsnooze config set <k> <v>            # e.g. autoResume off\nunsnooze logs [-f]                     # what unsnooze has been doing\nunsnooze update                        # update unsnooze itself\nunsnooze daemon                        # persistent GUI-session watcher (usually run\n                                       # by launchd/systemd via `install --daemon`;\n                                       # on Windows, started on demand)\nunsnooze report [agent]                # capture a pane to report an undetected banner\nunsnooze uninstall [--purge]           # remove wrappers + hooks (+ state with --purge)\nunsnooze help                          # full command list (also -h / --help)\n```\n\n## Queued prompts\n\nQueue a prompt now; unsnooze types it into a **brand-new** agent session — a\nfresh window in a project directory — once a usage limit clears (or at a time\nyou choose). It's one-shot: each entry is delivered at most once.\n\n```sh\nunsnooze prompt add \"run the full test suite and fix any failures\"\n# → interactive agent picker on a TTY; queued for next-reset in the cwd\n\nunsnooze prompt add --agent codex --project ~/code/api --now \"ship the release\"\nunsnooze prompt add --at \"+2h30m\" \"rebase onto main\"   # relative duration\nunsnooze prompt add --at \"9pm\" \"nightly cleanup pass\"  # next occurrence of a clock time\nunsnooze prompt add --at 1755000000 \"...\"              # epoch (seconds or ms), or an ISO-8601 timestamp\n\nunsnooze prompt list [--json]   # id, agent, due, status, cwd, prompt preview\nunsnooze prompt remove <id>     # cancel one pending/launching entry\nunsnooze prompt clear           # cancel every pending/launching entry\n```\n\nModes:\n\n- **next-reset** (default) — delivered once no future reset time is known for\n  that agent, i.e. once the current limit clears. If unsnooze holds **no\n  reset signal at all** for that agent when you add the entry, there's\n  nothing to wait on — it delivers on the very next daemon tick, and\n  `prompt add` prints a notice to that effect right away. Use `--at` if you\n  want a specific time instead.\n- `--now` — deliver on the next daemon tick, no reset wait at all.\n- `--at <time>` — deliver at a specific time: epoch (seconds or\n  milliseconds), an ISO-8601 timestamp, a `+2h30m`-style relative duration,\n  or a bare clock time (`9pm`, `2:05pm`, `14:30`) rolled to its next local\n  occurrence.\n\nIf a delivery attempt lands on a pane that's still limited — the reset\nhadn't actually cleared, or a fresh `--now`/`--at` session hits the wall\nimmediately — the entry goes back to pending behind a backoff floor before\nit's retried. That floor applies to every mode, so a failing `--now`/`--at`\nentry can't burn through every retry in the first few seconds the way an\nunthrottled retry loop would. Verified delivery (capped at 5 attempts,\nsame as resume) marks it `failed` and sends a notification.\n\n`autoResume` does **not** gate prompt delivery — the queue runs independently\nof session tracking, even with `autoResume off`.\n\nA far-future `--at` entry is expected to keep a transient resumer process\nalive (checking in each tick) until its delivery time arrives, however long\nthat is — this is intended, not a leak.\n\n**Fleet:** `--host <name>` queues on a registered host instead of locally.\n`--project` (an absolute remote path) and `--agent` are both required — there's\nno local cwd to default to and no interactive picker over an ssh round-trip.\nThe remote host re-validates everything server-side. Delivery feedback comes\nfrom `unsnooze fleet` / the dashboard's Fleet tab (per-host queued count) and\nthat host's own notifications (ntfy reaches your phone from any host, not\njust the one you're sitting at). A host can refuse all queue traffic with\n`remoteQueue: false` (`unsnooze config set remoteQueue off`, env\n`UNSNOOZE_REMOTE_QUEUE=0`, **set on the host being controlled**) — the queue\nverbs then answer a typed \"disabled\" instead of silently dropping; a remote\nthat predates this feature reports a clear \"too old\" error instead of\nfailing silently.\n\n```sh\nunsnooze prompt add --host gpu-box --project /home/me/repo --agent claude --now \"...\"\nunsnooze prompt list --host gpu-box\n```\n\n**Dashboard:** the **Prompts** tab (`7`) lists queued entries; `a` opens an\nadd form (path → agent → when — with a time prompt if you pick \"at\" — → a\nhost step if you have hosts registered → prompt text), `d`/`x` removes the\nselected entry. The Status tab shows a `<n> prompt(s) queued — tab 7` hint\nwhenever entries are pending or launching.\n\n## Fleet: sessions on every machine\n\nSee and act on unsnooze sessions on other machines from one terminal — over\nyour own SSH, no new service to run.\n\n```sh\nunsnooze hosts add work you@work-box.local   # register an ssh destination\nunsnooze hosts list                          # registered hosts\nunsnooze hosts rm work                       # forget a host\nunsnooze fleet [--json]                      # every host's sessions, fanned out over ssh\nunsnooze dashboard fleet                     # live Fleet tab — R resumes a selected stopped session (C cancels)\n```\n\nA registered host needs **unsnooze installed** and **ssh key auth** (no\npasswords) — nothing new to open or configure; fleet rides your existing\n`~/.ssh/config`, keys, and agent. **Before adding a host, connect to it the\nnormal way once** (`ssh <host>`) so OpenSSH pins the host key itself —\nunsnooze never weakens host-key checking to skip that step, so an unknown or\nchanged host fails fast instead of being silently trusted.\n\nFleet is *see and mark*, not *type remotely*: `unsnooze fleet` and the\ndashboard's **Fleet** tab list every reachable host's tracked sessions\n(state, reset countdown, attach hint). Selecting a stopped remote session and\npressing **`R`** (uppercase — lowercase `r` refreshes) only marks it due — the\nremote's own daemon does the actual keystrokes, under the same\nownership/liveness/menu gates as a local session.\nResumed and stopped sessions print an attach hint\n(`ssh -t <host> 'tmux new -A -s <session>'` / `zellij attach <session>` /\n`ssh -t <host> 'herdr session attach <session>'`) so\nyou can hop over and watch. An unreachable or out-of-date host shows\n`unreachable`/`skew` rather than blocking the rest of the fleet, and falls\nback to its last-known state (marked `stale`) for up to 24h.\n\n### Auth: keys (default) or password\n\nEvery host picks its own auth, per host — unsnooze imposes no policy:\n\n- **`key`** (default, unchanged) — the BatchMode-hardened path above. Nothing\n  about a key host changes.\n- **`password`, interactive** (`--source prompt`, the default source when you\n  pass `--auth password` with nothing else) — typed at run time, no-echo, on\n  whichever terminal is running `unsnooze fleet`/`hosts test`. Nothing is\n  stored. There's no terminal under the background daemon, so a `prompt`\n  host is naturally interactive-only — it shows `needs-auth` when the daemon\n  or a piped/non-TTY caller tries it.\n- **`password`, stored** (`--source env|keychain|command`) — resolved\n  automatically, so the daemon and `unsnooze fleet` can reach it unattended.\n\n```sh\nunsnooze hosts add <name> <dest>\n    [--auth key|password]                  # default: key\n    [--source prompt|env|keychain|command] # default: prompt, once --auth password is set\n    [--env <VARNAME>]                      # env source: var to read (default UNSNOOZE_PW_<NAME>)\n    [--service <s> --account <a>]          # keychain source (macOS only)\n    [--cmd '<command>']                    # command source: program whose stdout is the password\nunsnooze hosts test <name>                 # pre-flight: resolves the source (never prints the\n                                            #   secret) then a real ssh reachability probe\n```\n\nExamples:\n\n```sh\nunsnooze hosts add laptop me@laptop.local --auth password\n# → prompts for a password every time it's used from a real terminal\n\nunsnooze hosts add gpu ubuntu@gpu.example.com --auth password --source env --env UNSNOOZE_PW_GPU\n# → export UNSNOOZE_PW_GPU=... in your shell/session first\n\nunsnooze hosts add mac me@mac-mini.local --auth password --source keychain --service unsnooze-mac --account me\n# → macOS only; reads via `security find-generic-password`\n\nunsnooze hosts add ci ci@build.example.com --auth password --source command --cmd 'op read op://vault/ci/password'\n# → any OS; runs your own secret manager and reads its stdout\n\nunsnooze hosts test gpu   # resolves the credential + probes reachability; prints \"auth ok\" or a hint, never the secret\n```\n\n**`command` is the portable, first-class source** — plug in whatever secret\nmanager you already run. Per-OS one-liners for `--cmd`:\n\n| OS | Example `--cmd` |\n|---|---|\n| macOS | `security find-generic-password -s <service> -a <account> -w` |\n| Linux | `pass show <path>` &nbsp;or&nbsp; `secret-tool lookup <attr> <value> ...` |\n| Windows | `powershell -Command \"...\"` (e.g. wrapping `Get-StoredCredential`) &nbsp;or&nbsp; `op read op://vault/item/password` |\n| any OS | `op read op://vault/item/password` (1Password CLI), or any other manager's read command |\n\n`keychain` is a convenience built-in for **macOS only** (`security\nfind-generic-password`) — there's no dependable dependency-free store to\nshell out to on Windows or Linux, so those use `--source command` with the\nrecipes above instead.\n\n**Security posture:** the password reaches `ssh` through OpenSSH's own\n`SSH_ASKPASS` hook — it never appears on `argv`, in `ps`, or in unsnooze's\nown environment; it flows helper-stdout → ssh, in-process, for that one ssh\nchild only. unsnooze itself **stores no plaintext**: `keychain`/`command`\ndelegate entirely to the OS store or your own manager, and `env` is\nuser-managed (readable by your own shell already — positioned as a\nlow-friction/CI convenience, not secret-manager-grade). Keys remain the\ndefault and their BatchMode-hardened path is untouched by any of this.\n\n**Windows note:** native `ssh.exe` (Windows' built-in OpenSSH client) prompts\nfine out of the box for an **interactive** `prompt`-source host — no shim\nneeded, it's the zero-friction path. **Stored** sources (`env`/`keychain`/\n`command`) need a non-interactive askpass helper, and native `ssh.exe`\nrequires that to be a real launchable `.exe` — it won't reliably run a `.js`\nor npm's `.cmd` shim. Until unsnooze ships that native launcher, use a\n**Git-for-Windows or WSL `ssh`** (both accept the script-based helper the\nsame way macOS/Linux do — common on dev machines already) for stored\npassword hosts on Windows; a plain `ssh <host>` prompt works with native\n`ssh.exe` regardless.\n\n## Settings\n\n`unsnooze setup` writes `~/.unsnooze/config.json`; change anything later with\n`unsnooze config set`:\n\n| key | default | meaning |\n|---|---|---|\n| `multiplexer` | `auto` | Backend to use: `auto`, `tmux`, `zellij`, `herdr`, `cmux`, or `headless`. `auto` prefers the current multiplexer (tmux/zellij ambient env, then `CMUX_SOCKET_PATH`); with no ambient env it falls back to whichever of tmux/zellij is installed, tmux as the tie-breaker — cmux is only selected via its ambient env or an explicit setting, never by this installed-backend fallback, since it has no attach-from-outside path to wrap into. cmux support covers resume-in-place (detect, capture, send); it has no joinable named-session model, so idle-session reaping (`unsnooze reap`) does not cover cmux panes, and no attach hint is shown for cmux sessions. `headless` is the no-multiplexer mode (see [Watching without a multiplexer](#watching-without-a-multiplexer)) — `auto` falls back to it only when no multiplexer is installed at all, never ahead of one. |\n| `autoResume` | `true` | Master switch. Off = stops are still tracked, but nothing is resumed until you run `unsnooze resume-now` or turn it back on. |\n| `menuAutoAnswer` | `true` | May unsnooze answer Claude's limit menu (send keys in your pane)? Off = watch-only. |\n| `notifications` | `true` | Master switch for all notifications (limit detected / session resumed / gave up). Off = silence every channel. |\n| `notifyChannel` | `auto` | How to deliver: `auto`, `native`, `osc`, or `bell` (see [Notification channels](#notification-channels)). Env: `UNSNOOZE_NOTIFY_CHANNEL`. |\n| `guiWatch` | `true` | May the daemon watch session files for GUI-surface stops (VS Code extension, desktop apps)? Needs the daemon running (`unsnooze install --daemon`). |\n| `resumeMessage` | *\"Continue where you left off…\"* | The message sent to wake a session. Override it for a single session with `unsnooze message <id> \"…\"` — visible in `unsnooze status`. |\n| `resumeMessages.claude` / `.codex` / `.grok` / `.qwen` / `.kimi` / `.opencode` / `.agy` / `.cursor` | `\"\"` | Per-agent override of `resumeMessage`. Empty = use the global message; clear one with `unsnooze config set resumeMessages.claude \"\"`. |\n| `resumeExtraArgs.claude` / `.codex` / `.grok` / `.qwen` / `.kimi` / `.opencode` / `.agy` / `.cursor` | `\"\"` | Extra flags for launches unsnooze performs itself. A revival spawns the agent binary directly, so flags you normally get from a shell alias or wrapper (`--dangerously-skip-permissions`, `--model …`) do not apply unless you put them here. Quoting is respected: `--append-system-prompt \"stay in this repo\"` is two arguments, not five. `config.json` may also hold an array (`[\"--append-system-prompt\", \"stay in this repo\"]`), which skips parsing entirely. |\n| `launchExtraArgs.claude` / `.codex` / `.grok` / `.qwen` / `.kimi` / `.opencode` / `.agy` / `.cursor` | `\"\"` | Extra flags for the sessions **you** start through the shell wrapper — the launch-side twin of `resumeExtraArgs`. Use it for flags that have to hold for the whole session: `unsnooze config set launchExtraArgs.claude \"--autocompact 400000\"` keeps a long, context-heavy run compacting instead of stalling. Flags are placed before your own arguments, since `claude \"do the thing\"` puts a positional prompt there. Revivals inherit them too, so a flag survives the wake. |\n| `agents.claude` / `agents.codex` | `true` | Which CLIs are guarded. |\n| `agents.grok` / `agents.qwen` / `agents.kimi` / `agents.opencode` / `agents.agy` / `agents.cursor` | `false` | Experimental adapters — off by default; enable in `unsnooze setup` or `unsnooze config set agents.qwen on`. |\n| `workspaceGuard` | `inform` | Repo changed while a session slept? `inform` wakes it with a heads-up in the message; `pause` holds it (desktop notification, diff shown on `resume-now`); `off` disables. |\n| `contextGuard` | `inform` | Big cold context at wake? Waking a session re-reads its **entire context at full uncached price** ([why](#why-did-resuming-a-big-session-eat-so-much-of-my-quota)). `inform` resumes and notifies you of the size; `pause` holds sessions above the threshold for `unsnooze resume-now`; `off` disables. Claude Code only for now. |\n| `contextGuardTokens` | `100000` | Context-size threshold (tokens) at which `contextGuard` notifies or holds. |\n| `usageWarn` | `notify` | Pre-wall usage warnings from the daemon (`unsnooze usage`): `notify` or `off`. Needs `notifications` on and the daemon running. Env: `UNSNOOZE_USAGE_WARN`. |\n| `usageWarnAt` | `80,95` | Percent thresholds for usage warnings (comma-separated). Non-numeric values fall back to the default — never silently disable. Time tiers (30 / 10 min) are constants, not config keys. Env: `UNSNOOZE_USAGE_WARN_AT`. |\n| `mouse` | `true` | Mouse support in `unsnooze dashboard`: click tabs and session rows, wheel-scroll lists/logs, clickable footer hints. Toggle live with `m`. Hold Shift (Option in iTerm2) to select text while it's on. Env: `UNSNOOZE_MOUSE`. |\n| `reapResumed` | `false` | Opt-in: auto-close `resumed` panes idle longer than `reapIdleAfter`. Off by default — use `unsnooze reap --yes` for explicit cleanup. |\n| `reapIdleAfter` | `604800000` (7d) | Idle age (ms) before an opt-in auto-reap closes a `resumed` pane. |\n| `updateCheck` | `true` | Daily new-version check (a plain GET to the npm registry, nothing identifying is sent). Notices after commands + one desktop toast per version. |\n| `ntfyTopic` | `\"\"` | [ntfy](https://ntfy.sh) push notifications — **off until set**. Fires *alongside* the local channel on limit-hit / resumed / gave-up. ⚠️ ntfy.sh topics are public — the name is the password. Use an unguessable one, e.g. `unsnooze-$(openssl rand -hex 8)`, a token, or a self-hosted server. |\n| `ntfyServer` | `https://ntfy.sh` | ntfy server base URL (self-hosted servers welcome). |\n| `ntfyToken` | `\"\"` | Optional `tk_…` access token (`Authorization: Bearer`) for reserved topics / authed servers. |\n| `ntfyPrivacy` | `full` | `terse` keeps directory paths out of pushed bodies (titles only) — recommended on public ntfy.sh topics. |\n| `remoteQueue` | `true` | Set **on the host being controlled**: may other hosts queue prompts on this one (`unsnooze prompt add --host <this>`)? Off = the queue verbs answer a typed `disabled` instead of silently dropping. Env: `UNSNOOZE_REMOTE_QUEUE`. |\n\nEvery setting also has a `UNSNOOZE_*` env override (see `src/settings.js`), and\nall timings/paths are tunable via `UNSNOOZE_*` env vars (see `src/config.js`).\n\n### Multiplexer session names\n\nInteractive launches own the base session name (default **`unsnooze`**); a second\nconcurrent terminal takes `unsnooze-2`, etc. The resumer daemon may **join** a\nlive session but only ever **creates** `unsnooze-resumed`, so a revived agent\nnever steals the interactive name.\n\n| env | default | meaning |\n|---|---|---|\n| `UNSNOOZE_SESSION_NAME` | `unsnooze` | Interactive base session name (also accepts legacy `UNSNOOZE_TMUX_SESSION`). |\n| `UNSNOOZE_RESUME_SESSION` | `<base>-resumed` | Session the daemon creates when the pane's original session is gone. |\n\nFind revived agents with `unsnooze status` (prints an attach hint when the\nsession is live), `unsnooze sessions`, or e.g. `tmux attach -t unsnooze-resumed`.\n\n### Notification channels\n\nWhen a limit is hit, a session resumes, or unsnooze gives up, it can alert you\nvia an OS toast, a terminal OSC sequence, a BEL, or a mix — controlled by\n`notifyChannel` (default `auto`). `notifications=false` (or\n`UNSNOOZE_NOTIFICATIONS=off`) turns every channel off.\n\n| channel | what it does |\n|---|---|\n| `auto` | OSC (when the terminal supports it) **plus** BEL on the pane tty; falls back to native only if OSC delivered nothing (avoids double banners). No pane / non-tmux mux → native. |\n| `native` | OS toast (macOS `osascript`, Linux `notify-send`, WSL/Windows PowerShell toast); tmux `display-message` as a last-resort statusline fallback on other platforms. |\n| `osc` | Force OSC to attached client ttys; native if zero deliveries. |\n| `bell` | BEL to the pane tty; native if undeliverable. |\n\n**Terminal support (OSC)** — detection uses `TERM_PROGRAM` / termname / known\nenv markers:\n\n| terminals | sequence |\n|---|---|\n| iTerm2, kitty, WezTerm, Ghostty, Warp | OSC 9 (`\\x1b]9;title: body\\x07`) |\n| rxvt / urxvt | OSC 777 (`\\x1b]777;notify;title;body\\x07`) |\n| Apple Terminal, VS Code, Alacritty, Zed | denylisted — OSC skipped (prefer `native`; force `osc` does not unlock these) |\n| unknown | skipped in `auto`; OSC 9 when `notifyChannel=osc` |\n\n**tmux only for OSC/BEL.** Those paths write to the client's tty (OSC) or the\npane's tty (BEL), which requires tmux's client/pane tty APIs. **Zellij has no\nequivalent**, so OSC/BEL are not attempted under Zellij — notifications fall\nback to native (and Zellij has no statusline-inject equivalent either). GUI\nwatcher stops (no pane context) always use native.\n\n## Safety properties\n\n- **Never injects blind**: keys are only sent when the pane's foreground\n  process is the agent CLI and no \"esc to interrupt\"-style busy footer is\n  visible. Recycled pane ids can't receive stray messages.\n- **Never picks a menu option blind**: if Claude's limit menu layout can't be\n  read, unsnooze does not press Enter (that could confirm \"Upgrade your plan\").\n- **Sleep-safe waits**: the resumer polls wall-clock against the target epoch\n  every 30s instead of one long timer — a laptop asleep past the reset fires\n  on the next tick. Weekly limits are just a bigger epoch.\n- **Verified resumes**: after dispatch it re-captures the pane; if the limit\n  banner reappears (reset time misparsed / not actually reset), it reschedules\n  from the fresh banner, capped at 5 attempts.\n- **Concurrent-writer safe**: state updates go through a mkdir lock + atomic\n  rename; corrupt state is quarantined, never fatal (the hook path must never\n  block the CLI).\n- **Overload ≠ limit**: 5xx/529/429 transient errors take a seconds-scale\n  backoff path ([30,60,120,240,300]s ± jitter) and never enter the ledger.\n- **Stale-workspace guard**: the repo's HEAD + dirty state are fingerprinted\n  when a session stops. If another session (or you) changed the repo before\n  the wake, the resumed agent is told to re-read before acting — or, with\n  `workspaceGuard=pause`, the session is held and `unsnooze resume-now`\n  shows the diff first.\n- **Cold-cache wake guard**: waking a session after hours means the provider's\n  prompt cache is long expired — the first message re-reads the entire\n  context at full price, and a fat session can eat a real slice of the fresh\n  quota window. unsnooze estimates the size from the session transcript\n  (shown as `ctx ~152k tok` in `unsnooze status`) and, per `contextGuard`,\n  notifies you or holds the session instead of spending it silently.\n\n## Requirements\n\n- Node ≥ 20.12\n- macOS, Linux, or Windows — natively on all three (see\n  [Watching without a multiplexer](#watching-without-a-multiplexer))\n- tmux ≥ 3.2, Zellij, **or** herdr ≥ 0.8.0 for pane-level watching. Optional:\n  without one, unsnooze runs `headless` and still catches and resumes stops.\n- zsh or bash (wrappers go into `~/.zshrc` / `~/.bashrc`), fish (wrappers go\n  into `~/.config/fish/config.fish`), or PowerShell\n  (wrappers go into `$PROFILE.CurrentUserAllHosts`)\n\nFish wrappers are installed when fish is the login shell or its config already\nexists. An absolute `XDG_CONFIG_HOME` changes the config location to\n`$XDG_CONFIG_HOME/fish/config.fish`; `unsnooze install --fishrc <path>` and\n`unsnooze uninstall --fishrc <path>` override it explicitly. After upgrading an\nexisting install, run `unsnooze setup` and open a new shell to load the wrappers.\n\nAgent help/version commands, such as `claude --help` and `codex --version`, run\ndirectly without a multiplexer session, pane monitor, `launchExtraArgs`, or an\nunsnooze update notice. `unsnooze help` still shows unsnooze's own commands.\n\n### Supported terminals\n\nunsnooze drives four terminal multiplexers, and works without one.\n\n| | [tmux](https://github.com/tmux/tmux) ≥ 3.2 | [Zellij](https://zellij.dev) | [herdr](https://herdr.dev) ≥ 0.8.0 | [cmux](https://cmux.dev) | `headless` |\n|---|:---:|:---:|:---:|:---:|:---:|\n| Detect a limit stop | pane + hook + transcript | pane + hook + transcript | pane + hook + transcript | pane + hook + transcript | hook + transcript |\n| Resume a live session in place | ✅ | ✅ | ✅ | ✅ | — |\n| Answer Claude's limit menu | ✅ | ✅ | ✅ | ✅ | — |\n| Revive a session whose pane died | ✅ | ✅ | ✅¹ | ✅² | ✅³ |\n| Wrap a bare `claude` into a managed session | ✅ | ✅ | ✅ | — | n/a⁴ |\n| `unsnooze reap` idle sessions | ✅ | ✅ | ✅ | — | — |\n| `attach:` hint in `unsnooze status` | ✅ | ✅ | ✅ | — | — |\n| OSC notifications to your terminal | ✅ | — | — | — | — |\n\n¹ Into a fresh session name (`unsnooze-2`), never by restarting the stopped one —\nherdr restores saved agent panes itself, so a revival on top would resume the\nsame conversation twice.\n² Into a fresh workspace; cmux has no joinable named-session model.\n³ As a detached process. Its output goes to `~/.unsnooze/headless/<session>.log`,\nsince there is no scrollback to read it out of later; the prompt rides in argv\n(`claude --resume <id> \"…\"`, `codex exec resume <id> \"…\"`), and a revival that\nexits non-zero is retried, with its last output as the `last error` in\n`unsnooze status`.\n⁴ Nothing to wrap into — your own terminal is the session.\n\nPick one explicitly with `unsnooze config set multiplexer tmux|zellij|herdr|cmux|headless`.\nOn `auto`, unsnooze uses the multiplexer you are currently inside; failing that,\nthe only one installed (tmux breaks ties); failing that, `headless`.\n\n**Install:** `brew install tmux` or `brew install zellij` on macOS,\n`sudo apt install tmux` on Linux/WSL. herdr comes from\n[herdr.dev](https://herdr.dev) — Homebrew still ships 0.7.3, which `available()`\nrefuses, so take the release binary.\n\n### Watching without a multiplexer\n\nA terminal pane is only one of unsnooze's three detection channels. The Claude\nCode **StopFailure hook** and the **session transcript watcher** need no pane at\nall — which is what makes native Windows, bare servers and CI work.\n\nWhen no multiplexer is installed, `multiplexer: auto` resolves to `headless`:\n\n| | with tmux/Zellij/herdr | `headless` |\n|---|---|---|\n| detects limit stops | pane scrape + hook + transcript | hook + transcript |\n| resumes at reset | yes | yes |\n| answers Claude's limit menu | yes | no |\n| waits out a busy pane | yes | no |\n| revived session | live pane you can attach to | detached process, output in `~/.unsnooze/headless/` |\n\n`headless` is never chosen ahead of a real multiplexer — only when none is\ninstalled, or when you ask for it with\n`unsnooze config set multiplexer headless`. If you want the full behaviour on\nWindows, WSL is still the better home.\n\n### Windows\n\nNative Windows works: PowerShell wrappers, a cmd-safe StopFailure hook, and a\ndaemon started on demand. Install as usual and run `unsnooze doctor` to confirm.\n\nunsnooze registers nothing to run at sign-in on Windows — no Scheduled Task, Run\nkey or Startup-folder entry. (Up to 1.19.1 it created a logon Scheduled Task,\nand Microsoft Defender flagged setup as `Trojan:Win32/Commando.A!ml` for it;\n`unsnooze uninstall` removes one left behind.)\nSetup starts the daemon instead, and every agent you launch from PowerShell and\nevery Claude Code StopFailure hook starts it again whenever it is not running,\nso after a restart it is back as soon as you use an agent. If you only use the\nCodex app or IDE, nothing you do passes through a wrapper or the hook: run\n`unsnooze install --daemon` after signing in to start it.\n\nThree honest caveats. Nothing supervises the daemon the way launchd and systemd\ndo, and a running daemon keeps the code it started with, so after upgrading\nunsnooze re-run `unsnooze install --daemon` (or sign out and back in). The\ndaemon also keeps the `PATH` it was born with: an agent whose install directory\nchanges on update (the Codex Desktop/Store runtime lives under\n`%LOCALAPPDATA%\\OpenAI\\Codex\\bin\\<hash>`) can vanish from the daemon's view\nwhile your shell still finds it — unsnooze looks that directory up at launch\ntime, `unsnooze doctor` prints what each agent resolves to, and\n`UNSNOOZE_CODEX_BIN` (or `UNSNOOZE_CLAUDE_BIN`, …) pins a path; point it at an\n`.exe`, since Node cannot launch a `.cmd` shim directly. And stored-password\nfleet hosts still need Git-for-Windows or WSL `ssh`; native `ssh.exe` requires\nan `.exe` askpass helper unsnooze does not yet ship.\n\nWSL remains the richer option, because that is where the Unix multiplexers live\n— and where the agent CLIs often already are:\n\n```sh\n# inside your WSL distro (Ubuntu etc.)\nsudo apt install tmux             # or install Zellij: https://zellij.dev/documentation/installation\n# install herdr from https://herdr.dev (requires herdr >= 0.8.0)\nnpm install -g unsnooze && unsnooze setup\n```\n\nOn macOS, install either backend with `brew install tmux` or\n`brew install zellij`; install herdr from [herdr.dev](https://herdr.dev).\nherdr >= 0.8.0, which is the version the backend is verified against; older 0.x\nreleases are refused by available(). Homebrew currently ships 0.7.3, so install\nthe release binary from herdr.dev or GitHub rather than `brew install herdr`.\nIn `auto` mode unsnooze uses the multiplexer you are currently inside; choose one\nexplicitly with `unsnooze config set multiplexer tmux`, `zellij`, or `herdr`.\n\n#### herdr specifics\n\nherdr differs from tmux and Zellij in four ways that are visible in use:\n\n- **unsnooze never restarts a stopped herdr session.** herdr restores saved\n  agent panes when a session restarts (`resume_agents_on_restore` is on by\n  default), so restarting one can bring your agent back by itself — and a\n  revival on top of that would resume the same conversation twice. Reviving\n  into a stopped session therefore creates `unsnooze-2` (and so on) rather than\n  reusing the name. If you restart a stopped session yourself and herdr brings\n  the agent back, unsnooze may still open a fresh pane for it; that case is not\n  yet detected.\n- **A revived session opens a tab, not a workspace.** A herdr workspace is the\n  project — per repo, the way a tmux *session* is — while a tab is what tmux\n  calls a window. So a revival opens a new tab in whichever workspace herdr\n  already has open on that directory, and only creates a workspace when there\n  is none. (A tab rather than a split: a revived agent draws a full-screen TUI,\n  and halving the pane you are looking at would leave two terminals too narrow\n  to use. Neither steals focus.)\n- **Multi-line resume messages are carried, not typed.** herdr starts a pane\n  command by typing it into the pane's shell, where a newline would submit half\n  a command and a tab would be a completion request. Any such argument is passed\n  through the new tab's environment instead and referenced by the typed line, so\n  a multi-paragraph `resumeMessage` reaches the agent as one argument, byte for\n  byte. (A NUL byte is still refused — an environment value cannot hold one.)\n- **A custom `HERDR_SOCKET_PATH` that does not match the session being\n  addressed disables watching for that pane.** herdr pane ids are per-server,\n  so acting on one from the wrong server could type into an unrelated terminal.\n  The agent still runs; unsnooze says why it is not watching.\n\nEverything works as on Linux, including desktop notifications: inside WSL,\nunsnooze raises **native Windows toasts** through `powershell.exe` (no\n`notify-send` or X server needed).\n\n## FAQ\n\n### What does \"You've hit your usage limit\" mean in Claude Code?\n\nClaude subscription plans meter usage in a rolling 5-hour window plus a weekly\ncap. When either runs out, Claude Code stops mid-task and shows the banner with\na reset time (\"resets 3pm\"). Nothing is lost — the session can be resumed with\n`claude --resume <id>` once the limit resets. unsnooze does exactly that,\nautomatically, for every stopped session.\n\n### What about Codex — \"You've hit your usage limit. Try again at …\"?\n\nSame idea: ChatGPT-plan Codex has 5-hour and weekly windows. The Codex TUI\nstays open at the composer after the banner, so unsnooze either types into the\nlive pane or reopens the session with `codex resume <id>` at the reset time it\nparsed from the banner.\n\n### Does this get around the rate limit?\n\nNo. unsnooze waits for the reset exactly like you would, resumes once, and\nverifies the limit actually lifted. It replaces the 4am alarm, not the limit.\n\n### How do I update, and how do I know when to?\n\n`unsnooze update` (or `npm i -g unsnooze`). unsnooze checks the npm registry at most once a day and\ntells you when a newer version exists (a line after CLI commands, plus one\ndesktop notification per version); after updating, the next command shows a\nshort \"what's new\" from the changelog. It's a plain registry GET with nothing\nidentifying — turn it off with `unsnooze config set updateCheck off`.\n\n### What if another session changed the repo while one was stopped?\n\nunsnooze fingerprints the workspace (HEAD + uncommitted state) at stop time\nand re-checks at wake. By default the session still resumes, but the wake\nmessage includes what changed (\"HEAD abc1234 → def5678 — re-read before\ncontinuing\"). Set `workspaceGuard` to `pause` to hold such sessions for a\nmanual `unsnooze resume-now` (which prints the diff stat), or `off` to\ndisable the check.\n\n### Why did resuming a big session eat so much of my quota?\n\nBecause of prompt-cache expiry, not because of unsnooze. Providers cache your\nsession's context so each turn only pays full price for what's new — but that\ncache lives ~5 minutes. After hours stopped at a limit, the cache is long\ngone, so the **first** wake message (unsnooze's, or a hand-typed \"continue\" —\nidentical cost either way; the wake message itself is ~30 tokens) makes the\nAPI re-read the entire conversation at full uncached price. A ~150k-token\nsession on a top-tier model can cost a meaningful slice of a fresh 5-hour\nwindow the moment it wakes, before any new work happens.\n\nWhat actually helps: `/compact` (or starting a fresh session with a handoff\nsummary) *before* you hit the limit, and keeping overnight sessions lean.\nWhat unsnooze does: the `contextGuard` setting estimates the context size\nfrom the session transcript before waking. `inform` (default) resumes and\nnotifies you of the price; `pause` holds sessions above `contextGuardTokens`\n(default 100k) until you decide with `unsnooze resume-now`; the estimate is\nalso visible per-session in `unsnooze status` (`ctx ~152k tok`).\n\n### Does it work if my laptop was asleep or the terminal was closed?\n\nYes — reset times are stored as absolute timestamps and checked every 30\nseconds, so a laptop that slept through the reset resumes on the next tick,\nand dead panes are reopened by session id in a fresh multiplexer pane.\n\n## Development\n\n```sh\nnpm test                     # unit tests (node:test)\n./scripts/e2e-simulate.sh    # full detect → wait → re-open cycle in a\n                             # scratch tmux session (no real limits needed)\nbash -n scripts/e2e-zellij.sh # syntax-check the reserved-session Zellij smoke test\nnode scripts/e2e-herdr.mjs    # drives src/multiplexers/herdr.js against a real herdr (not run by CI)\nvhs demo/demo.tape           # regenerate assets/demo.gif (brew install vhs)\n```\n\nReleases are tagged (`git tag v<version> && git push origin v<version>`) and\npublished to npm by CI with [provenance](https://docs.npmjs.com/generating-provenance-statements)\nvia trusted publishing — see `.github/workflows/release.yml`.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}