{"_id":"@cullumco/cadence","_rev":"9-0e878fc7f671fb2b196a92016217fdc0","name":"@cullumco/cadence","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@cullumco/cadence","version":"0.1.0","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.0","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://github.com/cullumco/cadence","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"c8047f2d073d0bfbc7216ca21ef4ad7941f94af9","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.0.tgz","fileCount":22,"integrity":"sha512-Gm1tPKDyq7dNlHWqtZjoLWc9nxXucAjigVjzgKiKeMqrMOjCzgEwUayfiSw5rg5eaM/JC40JJve9dkAY2OT/Hg==","signatures":[{"sig":"MEUCIGMcWhvWYxC5l318QzawQxK5uz7cNrtrQv4sjdWVxdeSAiEAmlBkTBZ+OqX+OWLtwhVfa8lKOI6K3gWkhrw0iWuO4Xs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66838},"type":"module","engines":{"node":">=20"},"gitHead":"249ee1fee2a6931d394fe46781a6253accae60df","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.0_1780679762124_0.9801139089118336","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cullumco/cadence","version":"0.1.1","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.1","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://github.com/cullumco/cadence","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"2b3835c30f4b6731de6f69464a3a6d53e2c2b9a1","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.1.tgz","fileCount":24,"integrity":"sha512-/xLd7THiwIDH9AKNh5vPRC03c7kIob1YepjBLbCJ69AT3QAEyJviGZ1s0uFM4HwB5V92mmfOfZ1B7XGH913D3w==","signatures":[{"sig":"MEQCIGj7hHlMqVz31wph6DdRSDFcGGWFc6chNjXyoFWBmgwBAiBc3BcfmDP9+MOndoU2P1D2zXB+OSUv7/Hh074UlpDWRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78424},"type":"module","engines":{"node":">=20"},"gitHead":"a79d4ea4fc22b1ebb1d5ba536b9a7ef9c8978ce9","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.1_1780684666233_0.6895845297694474","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cullumco/cadence","version":"0.1.2","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.2","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cullumco.github.io/cadence/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"b72e2d987b7c845a234a5708e6689518f83f5cf5","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.2.tgz","fileCount":25,"integrity":"sha512-WkSmPEcLNXv8rF+fj956B0Ew7wgtSifYTp1UYPnfu9wy/l20iQeTQzKF9rgfGfDOKUTE1xkha1ZVR8mzVvnTzQ==","signatures":[{"sig":"MEUCICgNhsdPZFKFKqmTI/Vlisvx6VjjhhiBupWYzyI6vOmEAiEA5A5icrua7sAtxBTBDk6vHPy8mryszzR8+QV9QrB+IJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87374},"type":"module","engines":{"node":">=20"},"gitHead":"2c4b96b97a190146e2f9953fe13764bde8710d31","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.2_1780687377423_0.554511822748508","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cullumco/cadence","version":"0.1.3","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.3","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cullumco.github.io/cadence/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"7c8d020c49cb5774b302656d46151a6f2a05a76b","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.3.tgz","fileCount":26,"integrity":"sha512-HHLuGhYJ7pEoFA6VoEyHv+qAjpaiVwYcchDftYVeyF0i3+rFHFp6d03X6zT0h/KDhc8d7Zbvo+zxSj5pEARWpg==","signatures":[{"sig":"MEYCIQCjV8phNKNCvMNJeWJlin+RuxVsj201s1Havq7wIFmOeAIhAM1jChn5yqsajim0HgzdoSBBw9drnMKjyL5wlpHej9bv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101023},"type":"module","engines":{"node":">=20"},"gitHead":"c591c5f855bb5296f048586c98d87751fc1f0d91","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.3_1780690584994_0.057867872471311754","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cullumco/cadence","version":"0.1.4","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.4","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cullumco.github.io/cadence/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"fb8f5171d2edfda2e630e6e1dc3ea248186b39fe","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.4.tgz","fileCount":26,"integrity":"sha512-pWxwak/7t+K9hafbZyFfFB8CEnWjp/eXddWEUrRr4N8Y3aiJsMKOBD4Uss67Pv/TOVZQae+Wxl+Bs5ESEKczpg==","signatures":[{"sig":"MEUCIQDMu5NbcBgK8YTka8v44xPk5IY+6nZI5G7RrfTg2P1GfAIgbA0PBDxGJWij54bU6rabpV7oP8Nz/OKrLByBlEfXgzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101032},"type":"module","engines":{"node":">=20"},"gitHead":"d59c18dd950b9e32bb98e146e04770f12badffa8","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.4_1780694055541_0.846460791547087","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cullumco/cadence","version":"0.1.5","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.5","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cadence.cullum.co/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"8c3f8302cc2e17fd43b5362b1e24ed2fce99b077","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.5.tgz","fileCount":35,"integrity":"sha512-MZitDxu3hqz6C1o9VpQmBxfcD9ouTXumXIIJbF7xWny0sX0wiBBZDDwLV5NSPDfJD6DJmNZZvfqLMoPCQhfcCw==","signatures":[{"sig":"MEUCIEq/2i55naIsOt09Sndbd+LxIY/d/Wo/g1oGyw3w3WGjAiEAr5hvVgYYwZD9SX2WIUER0KbClen61N+ALtEhTK3bOv4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153975},"type":"module","engines":{"node":">=20"},"gitHead":"ee3bdc88730d17c48bb4a92cd69a3eef6baebf01","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.5_1781182593569_0.3718506886298478","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cullumco/cadence","version":"0.1.6","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.1.6","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cadence.cullum.co/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"826deeb03e6fcd1982511a8cd70c297cb667179f","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.1.6.tgz","fileCount":35,"integrity":"sha512-eDSmUzy+urFQapKCDu433rMN4+A+po722vcxk5qs6+odja/lQhl4iB3oFVY+s99gJxIi2xYJenGXpfQUrWQGFQ==","signatures":[{"sig":"MEUCIAGPSekdwuT3v0fDQHyvOyKS9/UTQX82mKPgf9ugkas5AiEAvAVRBz0dbIb6ektciPRgE4jtaGYME02S8dasbKA0cMo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160236},"type":"module","engines":{"node":">=20"},"gitHead":"56916830e0ccd190e40872f3a721b5c6deff6ef2","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.1.6_1781209569196_0.47912140179342955","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cullumco/cadence","version":"0.2.0","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"author":{"name":"Cullum&Co"},"license":"MIT","_id":"@cullumco/cadence@0.2.0","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"homepage":"https://cadence.cullum.co/","bugs":{"url":"https://github.com/cullumco/cadence/issues"},"bin":{"cadence":"bin/cadence"},"dist":{"shasum":"1a19b740634195b6cbdcd646fa79aca272c8a48a","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.2.0.tgz","fileCount":42,"integrity":"sha512-UjDfE6YeOXrCyw0BGVkHLA1jYoWcSZlh6NrsV/ZtsMIw2CBtNEjgBwRqH3SsuDXqjaYM34tw7nPjYNDDoNYRqg==","signatures":[{"sig":"MEQCIGw9a7M1IsW9wKt0gL0oyBWjcR78eCC3gGi/CMbRQeqbAiA5f1cwEbTGtT9Cx4HkvNCgjTJ+Wt7TlO856GQ5MOPSPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230889},"type":"module","engines":{"node":">=20"},"gitHead":"61422d4aa6a66e4614218463d9bb9c755fee4c25","scripts":{"cli":"node dist/cli.js","dev":"tsc --watch","hook":"node dist/hook.js","test":"node --test test/cadence.test.js","build":"tsc","prepack":"npm run build","verify:alpha":"node scripts/verify-alpha.mjs","release:alpha":"node scripts/release-alpha.mjs","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json"},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"repository":{"url":"git+https://github.com/cullumco/cadence.git","type":"git"},"_npmVersion":"11.6.2","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code. macOS-only alpha.","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/cadence_0.2.0_1781265640079_0.4562018122371314","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cullumco/cadence","version":"0.3.0","description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code and any agent harness. Richest signals on macOS; universal signals (time, git, activity, intent, self-report) everywhere.","type":"module","bin":{"cadence":"bin/cadence"},"homepage":"https://cadence.cullum.co/","repository":{"type":"git","url":"git+https://github.com/cullumco/cadence.git"},"bugs":{"url":"https://github.com/cullumco/cadence/issues"},"publishConfig":{"access":"public"},"scripts":{"build":"rm -rf dist && tsc","dev":"tsc --watch","test":"node --test test/cadence.test.js","test:coverage":"c8 --include 'dist/**/*.js' --exclude 'dist/**/*.d.ts' --reporter=text --reporter=html node --test test/cadence.test.js","prepack":"npm run build","prepublishOnly":"node scripts/verify-alpha.mjs --no-install-smoke","release:alpha":"node scripts/release-alpha.mjs","verify:alpha":"node scripts/verify-alpha.mjs","plugin:validate":"claude plugin validate .claude-plugin/plugin.json && claude plugin validate --strict .claude-plugin/marketplace.json","hook":"node dist/hook.js","cli":"node dist/cli.js"},"engines":{"node":">=20"},"devDependencies":{"@types/node":"^20.11.0","c8":"^10.1.3","typescript":"^5.4.0"},"keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"license":"MIT","author":{"name":"Cullum&Co"},"gitHead":"1c71aa5a5e92504ee50b508708bc05047a0b215f","_id":"@cullumco/cadence@0.3.0","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-9aJvYHrtkmEC1DiP1IlYJD7bhcjPdE6iiOgOWqLLD2ZI+qxxUS19HCHs2hCpq6YYZAZ0+zlHdQPMZjqFYUMhog==","shasum":"c15ac4cc8a8ebf92976ffe71f0bdd34d05e3e51b","tarball":"https://registry.npmjs.org/@cullumco/cadence/-/cadence-0.3.0.tgz","fileCount":46,"unpackedSize":286213,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGsO3tjL2VefrSSfm31WevaoGL2N1CmLiXdqDyIGrWBbAiALuhxFvDH5Qrik3adJKrnkBNTTzBkROLu1GsgdTb3BMg=="}]},"_npmUser":{"name":"cullumco","email":"scott@cullum.co"},"directories":{},"maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cadence_0.3.0_1783129460811_0.1950415119513862"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-05T17:16:01.639Z","modified":"2026-07-04T01:44:21.070Z","0.1.0":"2026-06-05T17:16:02.284Z","0.1.1":"2026-06-05T18:37:46.399Z","0.1.2":"2026-06-05T19:22:57.566Z","0.1.3":"2026-06-05T20:16:25.125Z","0.1.4":"2026-06-05T21:14:15.714Z","0.1.5":"2026-06-11T12:56:33.702Z","0.1.6":"2026-06-11T20:26:09.348Z","0.2.0":"2026-06-12T12:00:40.204Z","0.3.0":"2026-07-04T01:44:20.955Z"},"bugs":{"url":"https://github.com/cullumco/cadence/issues"},"author":{"name":"Cullum&Co"},"license":"MIT","homepage":"https://cadence.cullum.co/","keywords":["claude-code","claude","spotify","context","agent","hook","cadence","context-engineering"],"repository":{"type":"git","url":"git+https://github.com/cullumco/cadence.git"},"description":"Agents that read the room. Ambient context, cadence dials, and finish-line guardrails for Claude Code and any agent harness. Richest signals on macOS; universal signals (time, git, activity, intent, self-report) everywhere.","maintainers":[{"name":"cullumco","email":"scott@cullum.co"}],"readme":"# cadence\n\n> Agents that read the room.\n> Claude Code has one input channel: text. Cadence is the second.\n\nCadence is an ambient context layer for agents. The current alpha surface is a\nClaude Code hook: it injects your current **embodied state** — what you're\nlistening to, what you told it, how you want it to respond — into every prompt,\nthen asks Claude to *read your prompt through that lens*. The agent stops being\ndeaf to the room.\n\n**Richest signals on macOS; universal signals everywhere.** The deepest\nambient probes read the Mac around you. Every platform gets the dial-movers —\nprompt intent, self-report, git, time/day, typing tempo — and can link Spotify\nfor music (`cadence spotify connect`). The Mac-only probes degrade silently\noff macOS — a contract CI tests on Linux on every push.\n\nA [Cullum&Co](https://cullum.co) project · [cadence.cullum.co](https://cadence.cullum.co)\n\n## What it does\n\nBefore Claude sees your prompt, Cadence injects a `<user_state>` block:\n\n```\n<user_state>\n  signals:\n    music: \"You Fail Me\" — Converge (Spotify)\n    vibe: aggressive, energetic\n    self_report: \"two beers, shipping\"\n  cadence:  # inferred from signals, advisory\n    { pace=fast tone=warm posture=decisive proactivity=act-freely }\n  reframe: read my prompt as someone in this cadence meant it: keep it fast and\n    tight — answer first, trim the preamble; make the call rather than offering a\n    menu of options; act without stopping to check in; keep the tone warm and\n    casual. If my words clearly mean otherwise, follow my words.\n</user_state>\n```\n\nIt doesn't constrain the agent or rewrite your prompt — it gives the model the\ncontext your words are missing, and a lens for reading them. The lens always\ndefers to what you actually typed.\n\n## Same prompt, different room\n\n> \"how should I structure the retry logic?\"\n\n**Without Cadence** — every prompt reads the same. You get the survey: four\noptions, a trade-off table, and a closing \"Would you like me to implement one\nof these?\"\n\n**With Cadence, shipping cadence** — hardcore at 3 commits/hr, a \"let's ship\nit\" earlier in your prompt (or `cadence report \"ship mode\"`) →\n`{ pace=fast posture=decisive proactivity=act-freely }`. You get the call,\nmade: exponential backoff with jitter, three attempts, here's the diff, tests\npass.\n\n**With Cadence, thinking cadence** — ambient music, \"thinking through\ntradeoffs\" in your own words → `{ pace=deliberate posture=exploratory }`. You\nget the options laid out patiently, trade-offs actually explored, no pressure\nto pick one yet.\n\nSame words. The room around them changed, and the agent finally saw it. No\nsetup required for the intent read — your prompt itself is a signal; a\ndeliberate self-report just outranks it.\n\n## How it works\n\n**Signals → dials → a reframe lens.**\n\n1. **Signals** — what Cadence can sense right now:\n   - **environment** — time of day, day of week, weather (opt-in), battery, machine\n     uptime/load, dark mode, displays, wifi (opt-in), Focus/DND. Mostly zero-setup;\n     time/day work everywhere, the Mac-context probes are macOS. The one signal\n     that's always there: `context: friday afternoon, rainy, focus on`.\n     (Focus detection reads the DND database directly, so it needs your\n     terminal to have Full Disk Access — `cadence signals` tells you if it\n     doesn't.)\n   - **git** — commits this hour, dirty files, mid-merge/rebase, read from the\n     project you're in: `git: 6 dirty, mid-conflict`. Cross-platform.\n   - **activity** — prompt length and minutes since your last prompt, read from\n     the hook payload: `activity: { min_since_prompt=45 prompt_len=123 }`.\n   - **music** — what's playing (via macOS now-playing, any player), turned into\n     a clean *vibe* (mood words) via [MusicBrainz](https://musicbrainz.org). No\n     Spotify login, no API key, no Premium on macOS. Off the Mac, link Spotify\n     once with `cadence spotify connect` (browser OAuth, opt-in). Music moves\n     three dials — energy → pace + posture, organic texture → warm tone.\n   - **self-report** — what you tell it: `cadence report \"two beers, shipping\"`.\n   - **intent** — read from the prompt you just typed: \"let's ship this\" →\n     decisive/act-freely, \"help me debug\" → verify-first. Cross-platform, no\n     setup; this is what makes the same prompt read differently per room.\n\n   Time/day, self-report, git, and prompt intent move the dials (git reads\n   *what you're doing*: 3+ commits/hr → fast pace, mid-conflict → verify-first);\n   the rest render as context the agent reads (flavor). Self-report outranks\n   prompt intent outranks git — your deliberate \"I'm shipping\" beats a stray\n   \"ship\" in a prompt, which beats a mid-conflict read.\n2. **Dials** — four independent knobs, each `low | medium | high`, inferred from\n   the signals (or pinned by you):\n   - **pace** — deliberate ↔ fast\n   - **tone** — warm ↔ crisp\n   - **posture** — exploratory ↔ decisive\n   - **proactivity** — ask-first ↔ act-freely\n3. **Reframe** — a sentence composed from the dials telling the agent how to\n   *read* your prompt. Generated fresh each time; always ends \"if my words\n   clearly mean otherwise, follow my words.\"\n\nThe dials move mostly independently — high-energy-but-mellow music reads as\n\"fast pace, warm tone,\" something a single ship/think/debug label could never\nexpress. Music is the deliberate exception: it moves pace, posture, and tone\ntogether (you move *with* the music) but never proactivity — whether to act\nwithout checking in stays your call, not the soundtrack's.\n\n## Requirements\n\n- **Richest signals on macOS.** The deepest ambient probes — music via\n  AppleScript now-playing, battery, dark mode, displays, wifi (opt-in),\n  Focus/DND, focused app — read the Mac around you. On Linux, music comes in\n  via MPRIS (`playerctl`, covers Spotify and most players) and battery via\n  `/sys/class/power_supply` — both degrade silently if unavailable. On other\n  platforms Cadence still runs and still moves the dials: prompt intent,\n  self-report, git, time/day, and typing tempo work anywhere, Spotify can be\n  linked for music, and the platform-only probes degrade silently (CI runs the\n  suite on Linux to keep that true).\n- **Node 20+**\n- Claude Code for the alpha adapter\n\n## Install\n\nIn Claude Code:\n\n```text\n/plugin marketplace add cullumco/cadence\n/plugin install cadence@cadence\n/reload-plugins\n/cadence:setup\n```\n\n`/cadence:setup` is a short conversation, not a wizard — tell Claude how you\nwork, pick which signals you're willing to share, and see exactly what gets\ninjected. Or skip it and just set a self-report:\n\nIn Codex, the alpha surface is skill-driven rather than automatic prompt hooks:\n\n```text\nInstall the Cadence Codex plugin, then ask:\nUse Cadence to read the room.\n```\n\nThe Codex plugin exposes the same `cadence` CLI-backed readout and state skills,\nbut does not receive Cadence through Claude-style prompt lifecycle hooks. Ask\nCodex to use Cadence, or invoke the Cadence skill, and it will run `cadence test`\nand shape the reply from the current dials.\n\nSet a self-report so you can feel the difference:\n\n```text\n/cadence:state shipping, locked in\n```\n\nChange your mind anytime: `/cadence:pause` silences everything instantly,\n`/cadence:resume` brings it back.\n\nAlpha testers running from source — while `@cullumco/cadence` is pending npm\npublish — see [`ALPHA.md`](ALPHA.md).\n\nThe prompt hook has a ~1.5s budget and exits silently when it has nothing to\nsay, so it never blocks or slows a prompt. The Stop hook is conservative: it\nonly intervenes when you're explicitly in a shipping / act-freely cadence and\nClaude tries to end with a soft handoff like \"want me to do that next?\"\n\n### Music vibe (optional, macOS only)\n\nNothing to set up. If Spotify.app or Music.app is playing, Cadence reads the\ntrack, looks the artist's vibe up on MusicBrainz once, and caches it forever at\n`~/.cadence/vibe-cache.json`. If nothing's playing, the music signal is simply\nabsent.\n\n**Off macOS?** Run `cadence spotify connect <clientId>` once: register a Spotify\napp (add `http://127.0.0.1:8888/callback` as a redirect URI), and Cadence does\nthe browser OAuth and stores a refresh token. From then on it reads your\ncurrently-playing track cross-platform — identity only, vibe still from\nMusicBrainz, no audio-features.\n\n## Daily use\n\n```bash\ncadence                                # the live instrument: dials, meters, readout (q quits)\ncadence report \"two beers, shipping\"   # set self-reported state (expires in 2h)\ncadence report                         # print current self-report\ncadence clear                         # clear it\ncadence test                          # preview exactly what the hook would inject\ncadence signals                       # every signal — live value, or why it's absent\ncadence pause                         # silence all hooks (state survives untouched)\ncadence resume                        # start reading the room again\n```\n\nBare `cadence` in a terminal opens the live instrument — four dial faders,\nsignal meters, and the reframe readout, refreshed every 2s. Piped or in CI it\nprints the same static status it always has; `cadence --plain` forces the\nstatic view in a terminal.\n\n`cadence signals` is the legibility view: it never goes silent. Every signal\nCadence knows how to read is listed with its live value, or the exact reason\nit's absent — opt-in not taken, below a render threshold, missing permission\n(Focus needs Full Disk Access), or platform-gated.\n\nFrom inside Claude Code, the plugin skills cover the same ground without\nleaving the conversation:\n\n```text\n/cadence:setup                    # guided, conversational setup — shape the\n                                  # influence and pick your opt-in signals\n/cadence:state two beers, shipping\n/cadence:try                      # what is Cadence seeing right now?\n/cadence:pause                    # instant silence — prompts go through untouched\n/cadence:resume                   # back to reading the room\n```\n\n`/cadence:setup` is the recommended first run inside Claude Code: instead of a\nfixed wizard, you tell Claude how you work in plain language and it drives the\nCLI for you — state, dial pins, and which opt-in signals you're willing to\nshare.\n\n### Driving the dials by hand\n\nThe dials are inferred, but you can pin any of them — your pin wins, the rest\nkeep inferring:\n\n```bash\ncadence dials                  # show the mixing board and what's pinned\ncadence set pace fast          # pin a dial (accepts words OR low|medium|high)\ncadence set tone warm\ncadence unset pace             # back to inferred\ncadence unset all\n```\n\nPinned dials show with a `*` in the block so Claude knows they're your explicit\nchoice, not a guess. You can also pin per-session with env vars:\n`CADENCE_PACE=fast`, `CADENCE_TONE=warm`, etc.\n\n## The file that matters: `src/cadence.ts`\n\n`deriveCadence()` maps your signals to the four dials, and `buildReframe()`\ncomposes the lens. That's where your taste lives — which signal moves which dial,\nand how the lens reads. A working baseline ships so it runs end-to-end\nimmediately; the mapping is opinionated and meant to be yours.\n\n## Adapter posture\n\nClaude Code is the alpha surface, not the whole product. The agnostic product\nshape is:\n\n```\nsignals -> cadence dials -> context envelope -> adapter-specific delivery\n```\n\nToday the adapter-specific delivery is Claude Code's `UserPromptSubmit` and\n`Stop` hooks. Codex now has a skill-based adapter that reads the same state on\ndemand. The core signal types, cadence derivation, reframe lens, and rendering\nare kept separate so future adapters can deliver the same cadence state through\nother agent surfaces.\n\n## Use Cadence with any agent\n\n`cadence envelope` is the official generic integration primitive: it prints the\nexact `<user_state>` block the Claude Code hook injects — or *nothing at all* —\nso any agent harness with a pre-prompt hook can adopt Cadence in one line: run\n`cadence envelope` and prepend its stdout to the prompt.\n\nThe contract is designed so you can inject stdout verbatim, blindly:\n\n- **Empty stdout means inject nothing.** No signals and no pinned dials → no\n  output, exit 0 — the hook's silent-when-empty behavior for free.\n- **It never exits nonzero for signal failures**, and collection is bounded\n  (~2s), so a broken probe can't wedge or fail your prompt path.\n- **Paused is honest**: `cadence pause` makes it print a one-line paused\n  notice instead of a stale room.\n- **It's a pure read** — no `~/.cadence` writes, same read surface as the MCP\n  server.\n\n`cadence envelope --json` prints the structured state instead (signals, the\nfour dials, pinned, reframe) for harnesses that want to template it themselves.\n\nConcrete non-Claude example — wrapping [`llm`](https://llm.datasette.io) (or\nany prompt-taking CLI) so it reads the room first:\n\n```bash\n#!/usr/bin/env bash\n# ask — same prompt, different room, any model\nroom=\"$(cadence envelope)\"\nif [ -n \"$room\" ]; then\n  llm \"$(printf '%s\\n\\n%s' \"$room\" \"$*\")\"\nelse\n  llm \"$*\"\nfi\n```\n\nThe same pattern fits any harness with a pre-prompt/context hook: shell out to\n`cadence envelope`, prepend stdout. (Inside Claude Code you don't need it — the\nplugin's hooks already inject the room.)\n\n## Same room in Claude Desktop (MCP)\n\n`cadence mcp` runs a zero-dependency MCP stdio server exposing the same\n`<user_state>` block as a `cadence://user-state` resource (plus a JSON twin,\n`cadence://envelope`) and a `get_user_state` tool. Claude Desktop\n(Settings → Developer → Edit Config, `claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"cadence\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cullumco/cadence\", \"mcp\"]\n    }\n  }\n}\n```\n\n(If you installed globally, `\"command\": \"cadence\", \"args\": [\"mcp\"]` skips the\nnpx cold start. Cursor and other stdio MCP clients take the same command.)\n\nEvery read collects fresh signals — no cache, bounded at 2s. Notes:\n\n- **Don't add it inside Claude Code** — the hooks already inject the room\n  there; the MCP server would double it.\n- The desktop room is shallower than the Claude Code one: no live prompt means\n  no intent signal, and a desktop-launched server usually has a non-repo cwd,\n  so git is typically absent.\n- claude.ai *web* can't connect: web only speaks remote servers, and your\n  signals live on your machine.\n- `cadence pause` silences this surface too (reads answer with an honest\n  \"paused\" text rather than a stale room).\n\n## Alpha release checklist\n\n`@cullumco/cadence` is live on npm; each release is the same gated flow:\n\n```bash\nnpm run verify:alpha    # build + plugin validate + tests + dry-pack + install smoke test\nnpm run release:alpha   # the full gate, then npm publish\n# then: write .github/releases/vX.Y.Z.md and dispatch the Release workflow —\n# it creates the tag + GitHub Release from that file\ngh workflow run Release -f tag=vX.Y.Z -f target=<bump-commit>\n```\n\nCI runs the same gate on every push/PR to `main`\n(`.github/workflows/verify.yml`); `.github/workflows/release.yml` turns each\nrelease into a tag + GitHub Release whose body is the committed notes file.\n\n## What's next\n\nSee [`BACKLOG.md`](BACKLOG.md). Highlights:\n\n- **Git nudges** — *shipped:* they move the dials from *what you said* to *what\n  you're actually doing* (`3+ commits/hr → fast pace`, `mid-conflict →\n  verify-first`), applied below self-report so your explicit word still wins.\n- **Prompt intent** — *shipped:* ship/think/debug read straight from the prompt\n  you just typed, so the \"same prompt, different room\" behavior fires without a\n  separate `cadence report` step.\n- **Opt-in signals** — anything privacy-adjacent stays off until you turn it on\n  (`cadence enable <signal>`):\n  - **typing tempo** — *shipped (opt-in):* prompt rhythm beyond length —\n    rapid-fire short prompts read fast, one long considered prompt reads\n    deliberate.\n  - **focused app** — *shipped (opt-in, macOS):* the frontmost non-terminal app\n    (a browser, Slack, a PDF) renders as flavor. Read at prompt-submit, so it\n    only speaks when something other than your terminal/IDE is genuinely in\n    front. Flavor for now; a dial nudge stays a candidate.\n  - **esoteric flavor** — *shipped (opt-in):* `moon` phase (computed offline)\n    and a daily `horoscope` for your sign. Render-only — they color the room,\n    they never steer the work.\n  - **deeper Focus** — manual + scheduled Focus detection ship now; geofenced/\n    iPhone-synced Focus leaves no local trace and stays undetectable.\n- **Calendar proximity** — *shipped (opt-in):* paste your calendar's secret\n  ICS feed URL (`cadence calendar set-url <url>`) and \"next event in 12m\"\n  becomes wrap-up pressure — an event ≤15 min out tightens pace + posture.\n  Minutes-only by default; event titles are a separate sub-opt-in\n  (`cadence calendar titles on`). v1 parser skips recurring (RRULE) and\n  all-day events. Calendar *density* (how packed the day is) stays\n  intentionally unbuilt: Cadence targets solo builders deep in a project,\n  not people racing between meetings.\n- **After-the-fact injection** — shipped: a `PostToolUse` hook watches git-ish\n  commands and speaks once per transition — entering/leaving a merge/rebase\n  conflict, and destructive-op thrash (reset --hard streaks, force-pushes).\n  Next material event: failing-test transitions.\n\n## Caveats\n\n- **Richest signals on macOS.** The deepest ambient probes (music-via-OS,\n  battery, dark mode, displays, wifi (opt-in), Focus, focused app) are macOS.\n  Linux gets music (MPRIS via `playerctl`) and battery (sysfs). Other platforms\n  keep the universal dial-movers — intent, self-report, git, time/day, typing\n  tempo, linked Spotify — and the rest degrades silently.\n- **Spotify's audio-features API is not used** — Spotify deprecated it for new\n  apps (2024) and gated dev-mode behind Premium (2026), so vibe comes from\n  MusicBrainz, not Spotify. On macOS, Cadence reads what's playing at the OS\n  level (no Spotify account at all). The only Spotify API call is the still-live\n  `currently-playing` endpoint, and only if you opt in via `cadence spotify` to\n  get music off the Mac — identity only, never audio-features.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}