{"_id":"@0xmmo/crew","_rev":"13-4acb7730a3cce88b956bd03f2f95ae7b","name":"@0xmmo/crew","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@0xmmo/crew","version":"0.1.0","keywords":["claude","claude-code","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.1.0","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"493c7203151079847d2ff8d81fed3bc523e28d1b","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.1.0.tgz","fileCount":4,"integrity":"sha512-1hSydUDQLj3uqt49KmAWWbIott8MoKLArnzPMhalLqxR4GlF6YrZbLWSqOHO2+mqn5zssqU3oHoyeekusP98uQ==","signatures":[{"sig":"MEYCIQDlT/5JO7/itU+8pL5ukCcf4izrITYMJiZzCfKXvWnb8wIhAMyC+bMsf8sCedBUaPYTyhr9AJ+SecLq/lJz4+s7G9MI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15845},"type":"commonjs","engines":{"node":">=18"},"gitHead":"2c7efcacd4a9feeac6ccc4db2ee8de26fd143300","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"See your active Claude Code sessions at a glance — status, recap, and a transcript tail. Human view or agent-consumable NDJSON.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.1.0_1782692820941_0.5833508884225533","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@0xmmo/crew","version":"0.1.1","keywords":["claude","claude-code","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.1.1","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"1016f0276a5e62652ff6a25499d5d24e09d1cbce","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.1.1.tgz","fileCount":4,"integrity":"sha512-MQCfwUVUMKscepf0dKQapmwztjJ016l50gVLNaZIDbDAXF2PLfCtIaf1n9LaIyt404jo0W/IMgX5MmdtDQJ1ig==","signatures":[{"sig":"MEYCIQDhAiSrIds5LIwpo1pruTABa7YKudgXnB+Q+M0KA0SNbQIhANW37M6KulMxxcUzCgJNSs+GmpjfmuQsfHlOFG7lhvtT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16955},"type":"commonjs","engines":{"node":">=18"},"gitHead":"fca0e27977844bc9cd0040e6be2ab0beed48edd8","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple multi-agent collaboration for Claude Code — let one Claude see what your other running Claude sessions are doing, in the terminal or as JSON.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.1.1_1782700826147_0.4607031477450583","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@0xmmo/crew","version":"0.1.4","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.1.4","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"13e14e7f26e1759e767bcac14ca8a18e75afc1ff","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.1.4.tgz","fileCount":6,"integrity":"sha512-iGAe//Em/OLuF8y5mRagzuIiY99Z8OGQQMzRItCQcVYS/9Rh9jPSOMnob6KcNKdB3d56QBb8uv/nNlC1T4qzMw==","signatures":[{"sig":"MEUCIQDBf5N9l+V1bKl/p4lrGcDiVw6qmSxNhq7xJztkJGbhMgIgRCM2PZzpsSmE3QDSMpkC4gfLR4XnTIz372FaQMeFgro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31923},"type":"commonjs","engines":{"node":">=18"},"gitHead":"aa473a0cf64e98b2d3aae3ba109da440d1dfee12","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Shared context for Claude Code agents — auto-injects what your other running sessions are doing into every session's context via hooks. Also a CLI to watch them yourself.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.1.4_1783031272634_0.00014149584391209835","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@0xmmo/crew","version":"0.2.0","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.0","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"3b7bd40f82f9316bcad6c21274b208fe1fff1a84","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.0.tgz","fileCount":7,"integrity":"sha512-GGTcgzXr0Vk9yb2LEbNDq7/hAEWSJlZ6mLEkknWFgc1ABhCTepUFT/rSqunwVSz6FSpluwK+QdG/7+gmqH04BA==","signatures":[{"sig":"MEUCIQCCE9SJ4DOJx6IiyNU72z16ibyZNrnhFkriQgrXLczaZAIgIBYGEOAfQ3Ma3igt0Y/xS1kzZshsA/QXLnsPbK0UK6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47655},"type":"commonjs","engines":{"node":">=18"},"gitHead":"bf75844644b90f05fab59bc4ce50d33932ee298a","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code agents coordinate and ship multiple features concurrently — no branching, no worktrees. Auto-injects what your other running sessions are doing into every session's context, with agent-to-agent messaging via `crew send`; CLI included.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.0_1783054803624_0.6135212724113195","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@0xmmo/crew","version":"0.2.1","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.1","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"11e242d07456647c2b136667f63431a2cb4139df","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.1.tgz","fileCount":7,"integrity":"sha512-/wPQlwBrbl+zrkVQersbYBRY3U/lmaiMUMSofxSQRLKvGbrdt5+EjzbFPsShP/ElfNKKOWq9zV/K3/RrOSq5Hw==","signatures":[{"sig":"MEQCIG3LUxHRCmmyNAOgaI+UWT4quqzkKG4qn6S9Dw5spYfbAiAwD+yivyMRIhD4ds1HmWn3uFfP02xnLwMLIdgOd9mWxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47825},"type":"commonjs","engines":{"node":">=18"},"gitHead":"88888cafa68cec284a12d76b37e5e66acf030179","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code agents coordinate and ship multiple features concurrently — no branching, no worktrees. Auto-injects what your other running sessions are doing into every session's context, with agent-to-agent messaging via `crew send`; CLI included.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.1_1783054932565_0.96469022640659","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@0xmmo/crew","version":"0.2.2","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.2","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"27c43ab83ae240697cc9a0ae996e32441ee1512f","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.2.tgz","fileCount":7,"integrity":"sha512-6GlwLWxD5eWh5khUNRaHPqN1feJFDhwadXGShKh/pBHBmJJMhekJvldy7ku5RdG5Bf5CU7rlP6ijEl4fhM2vxg==","signatures":[{"sig":"MEQCIDUYbhH+6+9Qm6lvJBMskpMzEh6G6le5uaBt6BNifQ+eAiBeDinJhx7Rw02u1uwshaRbzsO+ASPlHBM9VXhvNOa7Rw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47776},"type":"commonjs","engines":{"node":">=18"},"gitHead":"366a932d3abea9eb0753206280a4033c83500ac6","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code agents coordinate with shared context and agent-to-agent messaging. No branches. No worktrees.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.2_1783055638073_0.8500596171608865","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@0xmmo/crew","version":"0.2.3","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.3","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"361e6a602a6ecfd3b80bd328b6f4ab958689e459","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.3.tgz","fileCount":10,"integrity":"sha512-mOYxVlJV0EimratVqx5dkQoR25D9i0vryLRZRtOSF/TiBoNWjwsLoxOdBPbW8trPwYE/tvl4a36VlVnfjBHg6A==","signatures":[{"sig":"MEYCIQDNv2Rvr/eGz+ao6LeNpjaKtc9AGaMzkNg0fN7BWtNUCQIhAIX9wih9dSsxdlOrIsLZe8eF5cbYBXFUVd46gp8rEIDF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54230},"type":"commonjs","engines":{"node":">=18"},"gitHead":"0a9bd98f67b884b63314d44c0169e1e070098182","scripts":{"send":"npm run build && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","version":"node -e \"const fs=require('fs');const v=require('./package.json').version;const p='.claude-plugin/plugin.json';const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')\" && git add .claude-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code agents coordinate with shared context and agent-to-agent messaging. Ship at breakneck with no branches and no worktrees.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.3_1783138764759_0.6631990086673312","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@0xmmo/crew","version":"0.2.4","keywords":["claude","claude-code","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.4","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"8dba15f1f3006ca20252ae6914fe55623168492c","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.4.tgz","fileCount":10,"integrity":"sha512-pREMDhYnZMNehCzEhw0XxvPPUk8xcfX/HEk+e8lMzFP/bHxldiD0tCooFwh8jxoPvreaQuIpbfa4KdChPXX2jQ==","signatures":[{"sig":"MEYCIQCEk992ltdNiZnHyzgYKBcWBMehqWtsJfI6dg8gqtJqEwIhAOljCdEtrhObxSWjfU6E4dmnwH3m3bvGzF99ghUDcIuI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54704},"type":"commonjs","engines":{"node":">=18"},"gitHead":"4eceb1ebaa73343d09c6c3bbe6f31b52271e28f8","scripts":{"send":"npm run build && node -e \"const fs=require('fs');const v=require('./package.json').version.split('.');v[2]=+v[2]+1;const p='.claude-plugin/plugin.json';const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v.join('.');fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')\" && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","build":"tsc","version":"node -e \"const fs=require('fs');const v=require('./package.json').version;const p='.claude-plugin/plugin.json';const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')\" && git add .claude-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code agents talk to each other: live shared context across sessions and agent-to-agent messaging. Ship features in parallel, no branches, no worktrees.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.4_1783142574670_0.993074960192454","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@0xmmo/crew","version":"0.2.5","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.2.5","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"cc4da30944dba7249940a8b438a03780f2d004c0","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.2.5.tgz","fileCount":13,"integrity":"sha512-1Z+Rh0GDO+w1f0jHQNky6QBtFvAuBxbSMZpm2D77Q2jNuqFJHUIn91bwPPi/RLuy6/fJcQGknsZirjwutWJw4g==","signatures":[{"sig":"MEUCIA9RfbhQRDXBHTY80RE7md/jYS9lLPkf5dzXjhTsDqQgAiEAkQhoQswLZyRPY+9KImzRr83OS+INdHrYplzv/GU+xXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70747},"type":"commonjs","engines":{"node":">=18"},"gitHead":"83c47e3e5038a33fd95c8237b2b6a394dd6f09c1","scripts":{"send":"npm run build && node -e \"const fs=require('fs');const v=require('./package.json').version.split('.');v[2]=+v[2]+1;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v.join('.');fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","test":"npm run build && node --test test/*.test.cjs","build":"tsc","version":"node -e \"const fs=require('fs');const v=require('./package.json').version;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add .claude-plugin/plugin.json .codex-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code and Codex agents talk to each other: live shared context and agent-to-agent messaging across sessions.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.2.5_1784016802264_0.9076944068562469","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@0xmmo/crew","version":"0.3.0","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson","opencode","opencode-plugin"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.3.0","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"bfce49f3e17ef3c6476f766b3d114a7f855a51fd","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.3.0.tgz","fileCount":15,"integrity":"sha512-rQQK45m3Xv2Fm/xulY2xG37K1gQx204N+A1MxFoOpG9UD3djPytq5jnq9jo8NzbaRsHCxpi0u4iaMZIK5AqKRA==","signatures":[{"sig":"MEUCIBSIlD39plpJyUpsu7lT4JMClIU8paBG8SJzsVvO+RhfAiEAl01i84b0ZstOEpIiInc+8dNRFDcYlg+iLSvmLsJevz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93826},"type":"commonjs","engines":{"node":">=18"},"gitHead":"43ddacfa99ee15ac7b77ca3c25af56993cfb5cd2","scripts":{"send":"npm run build && node -e \"const fs=require('fs');const v=require('./package.json').version.split('.');v[2]=+v[2]+1;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v.join('.');fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","test":"npm run build && node --test test/*.test.cjs","build":"tsc","version":"node -e \"const fs=require('fs');const v=require('./package.json').version;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add .claude-plugin/plugin.json .codex-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code, Codex, and opencode agents talk to each other: live shared context and agent-to-agent messaging across sessions.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.3.0_1788135905097_0.3172548925806149","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@0xmmo/crew","version":"0.3.1","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson","opencode","opencode-plugin"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.3.1","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"c3fe94d5463b4e8f296e5c0b6e3280dda05f6bef","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.3.1.tgz","fileCount":15,"integrity":"sha512-rkN5DH7RTOWXhFF4X7RG5RwJl7Q1uGZ34xa4wY29a0NfoZaeiPREM0XVYnxXIgmF8ZcI2FnptF+BYkitvXZ3mQ==","signatures":[{"sig":"MEQCIFETqcbQ/PHyCXOCRf1AwMxXF2onWNQ2Gme3hcUr2hTgAiASqITYaYpyJ30OO5I37CJRv+inYJR5GTCXRgefZVwYPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94199},"type":"commonjs","engines":{"node":">=18"},"gitHead":"5fdd3f7a3041f413de4eafb4de3fd2c11f267d25","scripts":{"send":"npm run build && node -e \"const fs=require('fs');const v=require('./package.json').version.split('.');v[2]=+v[2]+1;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v.join('.');fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add . && (git diff --cached --quiet || git commit -am checkpoint) && npm version patch && npm login && npm publish","test":"npm run build && node --test test/*.test.cjs","build":"tsc","version":"node -e \"const fs=require('fs');const v=require('./package.json').version;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}\" && git add .claude-plugin/plugin.json .codex-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true"},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code, Codex, and opencode agents talk to each other: live shared context and agent-to-agent messaging across sessions.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.3.1_1788136539535_0.2923352381247952","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@0xmmo/crew","version":"0.3.2","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson","opencode","opencode-plugin"],"author":"","license":"MIT","_id":"@0xmmo/crew@0.3.2","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"homepage":"https://github.com/0xmmo/crew#readme","bugs":{"url":"https://github.com/0xmmo/crew/issues"},"bin":{"crew":"dist/crew.js"},"dist":{"shasum":"e3d2dee8713716abf324eb9d94ae266d18f05792","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.3.2.tgz","fileCount":15,"integrity":"sha512-rgZ/+AGRFDslifbgS0mnmh8i2kL8Isnt/Ns4sfTTMgbz1w4l7745xEhzkZWCDg659aL4F6v7n0tJBn2wcHXvXQ==","signatures":[{"sig":"MEUCIGWT1fQJvcMJv4wo94bVGMtraA96i86UMjdD5Q0Dwl9mAiEA99qqXWWfHb9aC+xPoGPusZGx0Qd1/AFtNSNjKXb6WJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC8H4u5luT06atBUAI/NU6KAMgdUNTQoDhbBgtgG3a+uAIgVw8s4LApaoNUZPKHKuASksB0MMrZxBQoKdqxMe1uVZs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105200},"type":"commonjs","engines":{"node":">=18"},"gitHead":"950be5bda647ecfe2d6d7ed2236d459b1ab9bac6","scripts":{"send":"npm run build && npm test && npm version patch --no-git-tag-version && npm run sync-manifests && git add -A && git commit -m \"$(node -p \"'v'+require('./package.json').version\")\" && git tag \"$(node -p \"'v'+require('./package.json').version\")\" && npm login && npm publish && git push origin main --tags","test":"npm run build && node --test test/*.test.cjs","build":"tsc","version":"npm run sync-manifests && git add .claude-plugin/plugin.json .codex-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true","sync-manifests":"node -e \"const fs=require('fs');const v=JSON.parse(fs.readFileSync('package.json','utf8')).version;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}console.log('manifests synced to '+v)\""},"_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code, Codex, and OpenCode agents talk to each other: live shared context and agent-to-agent messaging across sessions.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"tmp":"tmp/crew_0.3.2_1789341789274_0.2889578355004294","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"_id":"@0xmmo/crew@0.4.0","bin":{"crew":"dist/crew.js"},"bugs":{"url":"https://github.com/0xmmo/crew/issues"},"dist":{"shasum":"439db3d11841412970ae930eeb6b286bfb4df21f","tarball":"https://registry.npmjs.org/@0xmmo/crew/-/crew-0.4.0.tgz","fileCount":16,"integrity":"sha512-qUZHPrdBgf3tIL4lkEyn68cKeCTkAi9C3CA3TjoTsuIlO0LmdK3a2FuhA9DqxjfA0qXTAi6FG7ZUKhnh8xlf3w==","signatures":[{"sig":"MEQCHy0E82Xb03ccmwYu8zmHWmOefMOxv/hSH6U05lcSUmACIQDxnwLWuUtmdrHRpzImI3ZttIaxfHWW1w/x04dlLOyYjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHGmgbn5g1wsEg+DB+pE/rR+DqUdQlB3EHHpCN+ivNwRAiEA2YYEaOi026GADgje4UeGalDUoVqOzcFirf98UQTezY8="}],"unpackedSize":128122},"name":"@0xmmo/crew","type":"commonjs","author":"","engines":{"node":">=18"},"gitHead":"bbf91b4b1d263a6a0b587e01efef2fbc3fa42662","license":"MIT","scripts":{"send":"npm run build && npm test && npm version patch --no-git-tag-version && npm run sync-manifests && git add -A && git commit -m \"$(node -p \"'v'+require('./package.json').version\")\" && git tag \"$(node -p \"'v'+require('./package.json').version\")\" && npm login && npm publish && git push origin main --tags","test":"npm run build && node --test test/*.test.cjs","build":"tsc","version":"npm run sync-manifests && git add .claude-plugin/plugin.json .codex-plugin/plugin.json","typecheck":"tsc --noEmit","postinstall":"node dist/postinstall.js || true","sync-manifests":"node -e \"const fs=require('fs');const v=JSON.parse(fs.readFileSync('package.json','utf8')).version;for(const p of ['.claude-plugin/plugin.json','.codex-plugin/plugin.json']){const j=JSON.parse(fs.readFileSync(p,'utf8'));j.version=v;fs.writeFileSync(p,JSON.stringify(j,null,2)+'\\n')}console.log('manifests synced to '+v)\""},"version":"0.4.0","_npmUser":{"name":"0xmmo","email":"m.moustafa@outlook.com"},"homepage":"https://github.com/0xmmo/crew#readme","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson","opencode","opencode-plugin"],"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"_npmVersion":"10.8.2","description":"Let Claude Code, Codex, and OpenCode agents talk to each other: live shared context and agent-to-agent messaging across sessions.","directories":{},"maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","playwright-core":"^1.61.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/crew_0.4.0_1789343376604_0.08995911075888907"}}},"time":{"created":"2026-06-29T00:27:00.742Z","modified":"2026-09-13T23:49:36.907Z","0.1.0":"2026-06-29T00:27:01.070Z","0.1.1":"2026-06-29T02:40:26.265Z","0.1.4":"2026-07-02T22:27:52.761Z","0.2.0":"2026-07-03T05:00:03.758Z","0.2.1":"2026-07-03T05:02:12.686Z","0.2.2":"2026-07-03T05:13:58.218Z","0.2.3":"2026-07-04T04:19:24.916Z","0.2.4":"2026-07-04T05:22:54.799Z","0.2.5":"2026-07-14T08:13:22.387Z","0.3.0":"2026-08-31T00:25:05.243Z","0.3.1":"2026-08-31T00:35:39.677Z","0.3.2":"2026-09-13T23:23:09.354Z","0.4.0":"2026-09-13T23:49:36.683Z"},"bugs":{"url":"https://github.com/0xmmo/crew/issues"},"license":"MIT","homepage":"https://github.com/0xmmo/crew#readme","keywords":["claude","claude-code","codex","openai-codex","hooks","context","multi-agent","cli","sessions","agents","terminal","ndjson","opencode","opencode-plugin"],"repository":{"url":"git+https://github.com/0xmmo/crew.git","type":"git"},"description":"Let Claude Code, Codex, and OpenCode agents talk to each other: live shared context and agent-to-agent messaging across sessions.","maintainers":[{"name":"0xmmo","email":"m.moustafa@outlook.com"}],"readme":"<div align=\"center\">\n\n# crew\n\n**Let agents talk to each other.**\n\n<sub><b>Claude Code · Codex · OpenCode</b></sub>\n\n<sub>Ship features in parallel, no branches, no worktrees. Hand off work between sessions,<br>steer around each other's in-flight edits, announce deploys to every running agent.</sub>\n\n[![npm version](https://img.shields.io/npm/v/@0xmmo/crew?style=flat-square&color=e8a33d&labelColor=1a1a23)](https://www.npmjs.com/package/@0xmmo/crew)\n[![downloads](https://img.shields.io/npm/dm/@0xmmo/crew?style=flat-square&color=e8a33d&labelColor=1a1a23)](https://www.npmjs.com/package/@0xmmo/crew)\n[![node](https://img.shields.io/node/v/@0xmmo/crew?style=flat-square&color=e8a33d&labelColor=1a1a23)](https://www.npmjs.com/package/@0xmmo/crew)\n[![license](https://img.shields.io/npm/l/@0xmmo/crew?style=flat-square&color=e8a33d&labelColor=1a1a23)](https://github.com/0xmmo/crew/blob/main/LICENSE)\n\n<br>\n\n<img src=\"https://raw.githubusercontent.com/0xmmo/crew/main/assets/demo.gif\" alt=\"Two coding agents in the same checkout: crew injects each session's live status into the other, one steers around the other's in-flight refactor, and a crew send message lands mid-turn.\" width=\"830\">\n\n</div>\n\n<br>\n\ncrew auto-injects what your other running [Claude Code](https://claude.com/claude-code), [Codex](https://developers.openai.com/codex/), and [OpenCode](https://opencode.ai) sessions are doing (status, recap, and a tail of each transcript) into every session's context. All three products share one crew, so any of them can see and message the others. Agents steer around in-flight work while parallel sessions operate from one checkout instead of needing a worktree each. There's also a CLI for watching all of it yourself.\n\n*Just like autonomous cars don't need stoplights, agents don't need worktrees.*\n\n- **Shared context, live** — every session knows what the rest of the crew is doing, refreshed as it changes.\n- **Agent-to-agent mail** — `crew send` drops a message into another agent's context within seconds, even mid-turn.\n- **A human view** — one command shows every session's status, recap, and transcript tail; `--json` for scripts and agents.\n- **Two commands to set up** — `npm i -g`, then `crew install-hook` wires all three products; or install it as a plugin. Token-frugal and fail-safe by design; reads transcripts, never modifies them.\n\n## Install\n\n```sh\nnpm install -g @0xmmo/crew\ncrew install-hook      # wire the hook into Claude Code, Codex, and OpenCode\ncrew doctor            # confirm everything is connected\n```\n\n`crew install-hook` is the whole setup: it adds the hook to `~/.claude/settings.json` and `~/.codex/hooks.json`, and drops a generated crew plugin into `~/.config/opencode/plugins/`. It is idempotent and merges into settings you already have. (A global install also tries to do this from npm's postinstall, but npm hides that output and `ignore-scripts=true` skips it entirely, so don't count on it: run `crew install-hook` and let `crew doctor` tell you where you stand.) Requires Node.js ≥ 18. macOS and Linux.\n\nCodex reviews user-installed command hooks before running them. Start a new Codex session, open `/hooks`, and trust crew when prompted. Claude Code uses the hook immediately.\n\n### Or as a Claude Code plugin\n\n```\n/plugin marketplace add 0xmmo/crew\n/plugin install crew@0xmmo\n```\n\nSame thing, zero `settings.json` edits: the plugin ships the four hooks and its own copy of the binary (fetched from npm), and `/plugin` manages updates. The repository also includes a native Codex plugin manifest for Codex marketplaces and local plugin installs. When the global `crew` command isn't installed, injected guidance points agents at the plugin's own entry point instead, so messaging still works. Pick either path; if you end up with both, the plugin defers to the global install so nothing is injected twice. The global install is still the way to get `crew` on your own PATH and automatically cover both products.\n\n## What your agents see, live\n\nFrom then on, every Claude Code and Codex session starts with (and keeps getting, as things change) a context block like:\n\n```yaml\n2 other agent session(s) running on this machine right now. Consider them\nbefore starting overlapping work; run `crew` for the full view.\n\n• 4d3de8db — claude — busy — /Users/you/Projects/api\n  recap: Goal was fixing the imagent CPU spin, now resolved and documented.\n  17:41 › run the test suite\n  17:41 ⚙ Bash: npm test\n  17:42 ‹ All 142 tests pass.\n\n• b5e3454f — codex — idle — /Users/you/Projects/web\n  recap: Diagnosed the sandbox validator bug; awaiting go-ahead to implement.\n\nYou can message any of them: `crew send 4d3de8db \"text\"` drops the text into\nthat agent's context within seconds.\n```\n\nSo when an agent in one session is about to touch files another session is mid-way through, it knows, and it knows how to say something about it. A `crew send` from another agent (or from you in a plain terminal) lands the same way, even mid-turn:\n\n```yaml\n📨 Message from 4d3de8db (/Users/you/Projects/api, sent 2m ago):\n  heads up — refactoring src/settings.ts, hold off for 20 min\nReply with: `crew send 4d3de8db \"text\"`\n```\n\n## Messaging between agents\n\nAny session (or you, from a plain terminal) can drop a message straight into another agent's context:\n\n```sh\ncrew send b5e3 \"settings.ts is mine for the next 20 min\"   # target: shortId prefix, pid, or cwd substring\ncrew send --all \"deploying api to staging now\"             # broadcast to every other session\ncrew send fc22 \"npm support replied, name is free\" --ttl 2h  # expire undelivered mail (default 24h)\ncrew send 4d3d \"prod is broken, stop deploying\" --kickstart  # force the target to act on it (-k)\ncrew inbox                                                 # peek at your own pending mail\n```\n\nSender attribution is automatic: `crew send` walks up the process tree to find which session it was called from, so agents never have to identify themselves.\n\nWhen it arrives depends on what the target is doing:\n\n| Target state | Delivered |\n|---|---|\n| busy, mid-turn | after its next tool call, typically seconds |\n| finishing a turn | at turn end, and the agent acts on it before going idle |\n| idle | on its next user prompt — or within ~15s for a kickstart to OpenCode |\n\nAn idle Claude or Codex session can't be woken externally, so undelivered mail waits in `/tmp/crew-<uid>/inbox/` until its TTL expires; the `crew` view shows a 📨 pending count for it in the meantime. Once delivered, a message becomes part of the target's context, like anything else it read. Each message is delivered exactly once, even when hook events race. In Codex, pending mail at `Stop` deliberately continues the turn once so the agent can act on it before becoming idle.\n\n**`--kickstart` (`-k`)** turns a message from passive context into a directive. Normally mail delivered as a session finishes its turn is injected as context the agent *may* act on; a kickstart message instead force-continues the agent (via the `Stop` hook's `decision: block`), so it keeps working and acts on the message rather than going idle — the same continuation Codex mail already does, made explicit and on demand for Claude too. It catches the target the moment it *would* stop; a Claude or Codex session already sitting idle has no upcoming `Stop` to catch, so `crew send` warns you and the message waits like normal mail until the session next runs. An **OpenCode** target is the exception: crew's plugin runs inside the OpenCode process and can prompt an idle session from within, so a kickstart wakes it within ~15 seconds — plain mail still waits politely for its next turn.\n\n### Waking a fully-idle agent\n\nAn idle **OpenCode** session just wakes: send with `--kickstart` and the crew plugin's poller prompts it from inside the process within ~15 seconds.\n\nFor Claude and Codex, a session sitting idle at its prompt can't be woken by a hook — its `Stop` already fired, and Claude Code exposes no API to inject a prompt into a running interactive session ([open feature request](https://github.com/anthropics/claude-code/issues/27441)). Writing bytes to its terminal doesn't help either: Claude's input uses bracketed-paste mode, so a piped carriage return is swallowed as a literal newline rather than submitting.\n\nThe one mechanism that works is a terminal multiplexer, which owns the pty and can deliver a *standalone* Enter key event. If you run agents inside **tmux**, you can wake an idle one yourself:\n\n```sh\ntmux send-keys -t <target> -l -- \"$(crew inbox)\"   # or your own text\nsleep 0.4                                           # keep Enter a separate key event\ntmux send-keys -t <target> Enter                    # fires submit\n```\n\n(GNU `screen` has the equivalent `screen -S <sess> -X stuff`.) There's no clean, focus-free equivalent for VS Code integrated terminals or a bare terminal, so for those a kickstart message waits until the session next runs on its own.\n\n## The CLI\n\nThe same view, for humans:\n\n```sh\ncrew                  # human view, last 50 transcript entries per session\ncrew 10               # last 10 entries\ncrew --json           # NDJSON: one structured object per session\ncrew --json --full    # NDJSON without tool input/output truncation\ncrew --dir ~/work     # only sessions whose cwd is under ~/work\ncrew --dir            # only sessions under the current directory\ncrew send <t> \"msg\"   # message a session (t: shortId prefix, pid, cwd substring)\ncrew send <t> \"msg\" -k  # kickstart: force the target to act on the message\ncrew inbox            # your own pending messages\ncrew doctor           # is this machine wired up? --fix repairs, --json for agents\ncrew --help\n```\n\n```yaml\n🔵  4d3de8db   codex   pid 66643   status: busy\n   cwd: /Users/you/Projects/api\n   started: 6/28/2026, 4:40:36 PM\n\n   recap: Goal was fixing the imagent CPU spin, now resolved and documented.\n\n   last 3 transcript entries (of 215):\n   17:41 › run the test suite\n   17:41 ⚙ Bash: npm test\n   17:42 ‹ All 142 tests pass.\n```\n\n- **agent** — `claude`, `codex`, or `OpenCode`.\n- **status** — `busy` (working), `idle` (awaiting input), or Claude's `shell` state.\n- **recap** — the session's most recent completion/recap, when available.\n- **tail** — the last N transcript entries: `›` you, `‹` the agent, `⚙` tool call, `⟲` tool result.\n\n### `crew doctor`\n\nEvery failure crew has had in the field looked healthy from the outside: hooks silently not installed because npm skipped postinstall, a global install symlinked to a working tree, a sandbox denying the mailbox, an OpenCode plugin left over from an older release. `crew doctor` checks each of those and prints the command that fixes it:\n\n```\ncrew 0.4.0\n\n✓ Node.js                   v22.14.0 at /opt/homebrew/bin/node\n✓ crew on PATH              /opt/homebrew/bin/crew\n✓ Claude Code hook          ~/.claude/settings.json\n✗ Codex hook                not wired (npm has ignore-scripts=true, so postinstall never ran)\n                            → crew install-hook\n⚠ OpenCode hook             ~/.config/opencode/plugins/crew.js was generated by an older crew; re-render it\n                            → crew install-hook\n✓ Mailbox                   /tmp/crew-501/inbox writable\n✓ Legacy inboxes            empty\n✓ Session registry          ~/.crew/sessions: 3 live\n✓ Claude Code sessions dir  ~/.claude/sessions: 3 record(s)\n✓ OpenCode transcripts      sqlite3 3.43.2, ~/.local/share/opencode/opencode.db\n\n1 failing, 1 warning(s)\n```\n\nIt exits 1 when anything fails. `crew doctor --fix` applies the repairs crew owns (its own hooks, its own mailbox permissions, stale registry entries) and re-checks; it never edits a settings file it can't parse or a plugin it didn't generate. `crew doctor --json` prints `{\"schema\":1,\"version\":…,\"ok\":…,\"checks\":[{\"id\",\"label\",\"status\",\"detail\",\"fix\"}]}` for agents and scripts.\n\n### `--json` for agents\n\n`--json` prints newline-delimited JSON (NDJSON), one object per session, with explicit fields instead of glyphs — built for another agent or script to consume:\n\n```json\n{\"pid\":66643,\"sessionId\":\"4d3de8db-…\",\"shortId\":\"4d3de8db\",\"agent\":\"codex\",\"status\":\"busy\",\"cwd\":\"/Users/you/Projects/api\",\"startedAt\":\"2026-06-28T23:40:36.000Z\",\"transcript\":\"/Users/you/.codex/sessions/…/rollout-….jsonl\",\"recap\":\"…\",\"messageCount\":215,\"tailCount\":3,\"tail\":[{\"ts\":\"…\",\"role\":\"assistant\",\"kind\":\"text\",\"text\":\"All 142 tests pass.\"}]}\n```\n\nTool input/output is truncated by default; pass `--full` for the complete content.\n\n## How the injection works\n\n`crew install-hook` adds `crew --hook` to the same four lifecycle events in Claude Code and Codex (a plugin install registers them inside the plugin instead of user settings):\n\n- **`SessionStart`** — every new session (and every re-start after context compaction) opens knowing what the rest of the crew is doing.\n- **`UserPromptSubmit`** — the picture is refreshed before each of your messages, and queued mail is delivered with it.\n- **`PostToolUse`** — mail only: a busy agent receives messages after supported tool calls, typically within seconds of `crew send`.\n- **`Stop`** — mail only: an agent finishing its turn handles waiting messages instead of going idle. A `--kickstart` message force-continues the turn here (`decision: block`) so the agent acts on it rather than injecting it as passive context.\n\n**OpenCode has no hook file; it gets a generated plugin instead** (`~/.config/opencode/plugins/crew.js`), a thin adapter that runs inside the OpenCode process and shells back out to `crew --hook` with the same payloads: `chat.message` maps to `UserPromptSubmit` (context lands as a synthetic message part), `tool.execute.after` to `PostToolUse` (mail is appended to the tool result), and `session.idle` to `Stop`. It also tags every shell command with `CREW_SESSION_ID` so sender attribution works even though one OpenCode process hosts many sessions, and polls the inbox of idle sessions so a kickstart can wake them via the SDK. All behavior lives in the crew CLI the plugin calls, so upgrading crew upgrades running plugins without a reinstall. At `Stop`, plain mail is deliberately left queued — draining it into a session that's about to go idle would lose it — and only a pending kickstart triggers the wake.\n\nThe hook is careful about tokens and safety:\n\n- Emits **nothing** when no other sessions are running, and nothing on `UserPromptSubmit` when the crew status hasn't changed since the last emit (a per-session hash under your temp dir).\n- The `PostToolUse`/`Stop` modes do the bare minimum: refresh the live registry and check one inbox, with no transcript scan and total silence when there's no mail.\n- Tails are short in hook mode (5 entries per session, truncated) and capped at 8 sessions.\n- It always exits 0, so a broken or slow read can never block your prompt, your session, or an agent's turn.\n- The auto-install merges into existing Claude/Codex hook settings and refuses to write over a file it can't parse.\n\nManaging it:\n\n```sh\ncrew install-hook                # add it to Claude Code, Codex, and OpenCode (idempotent)\ncrew uninstall-hook              # remove it from all three products\ncrew doctor                      # verify the wiring; --fix re-runs install-hook for you\nCREW_NO_HOOK=1 npm i -g @0xmmo/crew   # install without postinstall touching hook settings\n```\n\nOr wire it manually; this hook object works in both `~/.claude/settings.json` and `~/.codex/hooks.json`:\n\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"crew --hook\" }] }\n    ],\n    \"UserPromptSubmit\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"crew --hook\" }] }\n    ],\n    \"PostToolUse\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"crew --hook\" }] }\n    ],\n    \"Stop\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"crew --hook\" }] }\n    ]\n  }\n}\n```\n\n## How discovery works\n\nEvery interactive Claude Code session writes `~/.claude/sessions/<pid>.json` while running. crew reads that native registry and pulls the corresponding transcript tail from `~/.claude/projects/`.\n\nCodex supplies `session_id`, `transcript_path`, `cwd`, and lifecycle state to hooks. crew records those fields in a small live registry under `~/.crew/sessions/`, verifies the owning process is still alive, and parses the useful user/assistant/tool subset of the rollout. Top-level interactive and `codex exec` sessions are included; internal Codex subagents are intentionally not listed as separate crew members because they share their parent's lifecycle and mailbox. Codex documents its transcript format as non-stable, so crew skips unknown rollout records defensively.\n\nOpenCode sessions register in the same `~/.crew/sessions/` registry via the generated plugin, which identifies itself over env (`CREW_AGENT`/`CREW_PID`) rather than process-tree guessing. Transcripts are read on demand from OpenCode's SQLite store (`~/.local/share/opencode/opencode.db`, message/part tables) through the `sqlite3` CLI — read-only, degrading to a status-only listing when `sqlite3` isn't available. Like the Codex rollout, that schema is treated as a convenience input, not a stable API. Subagent (child) sessions are skipped, as are crew's own injected context parts, and deleted sessions are dropped from the registry immediately.\n\nAll discovery paths are read-only with respect to agent state and transcripts. In hook mode crew excludes the session it is reporting to, so an agent never sees itself listed.\n\nSet `CLAUDE_HOME` or `CODEX_HOME` for non-default product state directories. The Claude hook installer also honors `CLAUDE_CONFIG_DIR`; OpenCode paths follow `XDG_CONFIG_HOME`/`XDG_DATA_HOME`; set `CREW_HOME` to move the shared registry and config from `~/.crew`, and `CREW_INBOX_ROOT` to move the mailbox (see below).\n\n## Where the mailbox lives\n\nConfig and the live-session registry live in `~/.crew`. Mail does not: it goes to **`/tmp/crew-<uid>/inbox/<session-id>/`**, one directory per user, created `0700`.\n\nAgents commonly run under sandboxes that deny writes anywhere under `$HOME`. With the mailbox in `~/.crew/inbox`, `crew send` failed with `EPERM` from inside such an agent while discovery and context hooks kept working — crew looked healthy while messaging was dead. `/tmp` is the one place sandboxes conventionally leave writable, so that is where mail goes.\n\nThe path is deliberately the literal `/tmp`, not `TMPDIR`. macOS points `TMPDIR` at a private per-login directory under `/var/folders`, and sandboxed processes are handed different values again; two sessions of the same user must agree on one path, or a message lands where nobody is looking. Every consumer — the CLI, the hooks, and the generated OpenCode plugin — resolves it through one place in crew.\n\nConsequences worth knowing:\n\n- **Mail is temporary.** `/tmp` is swept by the OS and cleared on reboot on many systems. Undelivered messages can disappear before their TTL expires. Mail was already best-effort with a 24h default TTL; this widens the window slightly. Nothing durable — config, the session registry — is stored there.\n- **Isolated `/tmp` namespaces are not handled automatically.** A container, a mount namespace, or a chroot with its own `/tmp` gets its own mailbox, and sessions across that boundary cannot see each other's mail. crew does not detect this. Point every session at one shared, writable directory with `CREW_INBOX_ROOT` if you need delivery to cross it.\n- **The directory is verified before use.** crew creates it `0700`, and refuses to use it if it is a symlink or owned by another uid — `/tmp` is world-writable, so the name could have been pre-created by someone else. A refusal is reported; nothing is ever reported as queued unless its write actually succeeded.\n- **Older inboxes are still drained.** Mail written by crew ≤ 0.3.x to `~/.crew/inbox` (or ≤ 0.2.x to `~/.claude/crew/inbox`) is still read, delivered, and expired from those locations. Only new mail goes to `/tmp`. Re-run `crew install-hook` after upgrading so the generated OpenCode plugin picks up the new location for its idle-session polling.\n\n## Development\n\n```sh\ngit clone https://github.com/0xmmo/crew && cd crew\nnpm install\nnpm run build\necho '{\"session_id\":\"x\",\"hook_event_name\":\"SessionStart\"}' | node dist/crew.js --hook\necho '{\"session_id\":\"x\",\"hook_event_name\":\"SessionStart\",\"cwd\":\"'$PWD'\",\"transcript_path\":\"/tmp/rollout-x.jsonl\",\"model\":\"gpt-5\"}' | node dist/crew.js --hook\nnode dist/crew.js --json\n\n# regenerate the demo GIF (assets/demo.html is the storyboard)\nnode assets/record.mjs /tmp/crew-frames 12\nffmpeg -framerate 12 -i /tmp/crew-frames/f%05d.png -vf \"scale=960:-1:flags=lanczos,palettegen=max_colors=128:stats_mode=diff\" /tmp/crew-palette.png\nffmpeg -framerate 12 -i /tmp/crew-frames/f%05d.png -i /tmp/crew-palette.png -lavfi \"scale=960:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=bayer:bayer_scale=4:diff_mode=rectangle\" -loop 0 assets/demo.gif\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}