{"_id":"@aicoo/dm-agent","_rev":"12-4b3501c0c8716c642626b14c191f59a2","name":"@aicoo/dm-agent","dist-tags":{"latest":"0.4.3"},"versions":{"0.1.0":{"name":"@aicoo/dm-agent","version":"0.1.0","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.1.0","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"8299523e6cf064abab320a269eccfb2e0d2f9fab","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.1.0.tgz","fileCount":8,"integrity":"sha512-d+Maw83ArCLKZ0Bn5t3E1vEQRaqtH1KLW5s/6I5qXZtk64/84Kc4cpwFty0utrGhPyJ+dfrcxb8vbWxeg56hhw==","signatures":[{"sig":"MEUCIQDyhTDuESDCv0Rd/HLaP/dpx3+pNbiEupIh1zHy4vc3uAIgGYYtrwBwNYE56h1Z9JsqDh4glk64FUj80wctWKX2qNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40252},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.1.0_1785709818568_0.7880314492190894","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aicoo/dm-agent","version":"0.1.1","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.1.1","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"f02e8b643940838490a2e457ae86fcb267d20cc7","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.1.1.tgz","fileCount":8,"integrity":"sha512-R769d/zRdjQNqV8ffnG3WE89RMeA1y3VFnJyXbvZk0lg18sobqNDq+Nzn4ticbyU8vdiBzT45Xa0wAl6wy1pYA==","signatures":[{"sig":"MEUCIHNYevmZD/0ujM51i8hz7cHf2a9yq9992Cj5lpGq8xobAiEAg+i+7hBj3rben656RkM+F7rcecGgwfC4zDrFhZM4Yzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40679},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.1.1_1785710515540_0.5274283556875372","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aicoo/dm-agent","version":"0.2.1","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.2.1","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"9f8c4e9571403838987f1ec438c5197d622329f5","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.2.1.tgz","fileCount":13,"integrity":"sha512-cPZFWcZiyGyBMA5v/zaW312O6HiDVs8z/x/GQ1Jz+utuJcwZetexqoxeJutnSX1xAGTyc9Hf1vDTsHEQpkL3EA==","signatures":[{"sig":"MEUCIEzHhwfX8CnMGAiPPCHQA293j92EymCowTzJ08dbabGVAiEA4s9zEZwgiN41twO54DXD0BNynidwfYbapoWT5m2gfBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87556},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.2.1_1785745719344_0.9648890282301799","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aicoo/dm-agent","version":"0.2.2","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.2.2","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"b9dc98e8e468b99ff616cf59a8f4d92c8fca00ce","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.2.2.tgz","fileCount":13,"integrity":"sha512-EZCNqfdM1oIH56Z4S5I5/6hGrpNh9AUPPje6iDyALcxETVm9h0Gu4RF48mqmNjgmzJPbPG7p3S1VdO9TkhKR1g==","signatures":[{"sig":"MEYCIQC31XVjCQUKF0yzlhPIRw2GbH6C5DfvOG+jKpnkcIRlAgIhAP8vkHYbpse6RliSnM0AhqZfo8XIDL+GZuGP17J2j9di","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93451},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.2.2_1785759148010_0.7880299358487843","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@aicoo/dm-agent","version":"0.2.3","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.2.3","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"9f352bb6ec56f9e28863b0300b1bafae40754023","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.2.3.tgz","fileCount":13,"integrity":"sha512-EODWACi3PWCRlJ9fMKgB4RlDKubUfkecueXO9CDsso9iwqdiP6ppsmbYAhHHQkUrLf/UBCay4QXIbmtXjVIijQ==","signatures":[{"sig":"MEUCIGZ1N+STLB8BK0r0JsS5CHn2BoBv8zxf4pzwUvfux09CAiEAwYGh7FkeKEjW6jd2Xug2lP4yGlE01W90UOI+8Wr4fyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97639},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.2.3_1785761025123_0.9860469485455023","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aicoo/dm-agent","version":"0.3.0","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.3.0","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"19d5aa81a6cfa60b579ab3a51ea24fe3768b7b60","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.3.0.tgz","fileCount":13,"integrity":"sha512-Fwv+SLzXPpq1SeJ05YXqbrQlZ7ESfgG4ee4t7O0YB1Ob5bagg2LP8aDB6Fte61u3y/OxLyVAzOcTqVYdIhMI5Q==","signatures":[{"sig":"MEYCIQCSLVeLO/y5ht9LFHkfA4D0giAfjqIjuWjGIq0PEshMxAIhAKEqGWo0E+lZVfeRA/tCdizh5bJjdzxFU7cx8AwHdZPt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117932},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.3.0_1785780981962_0.8619068943246144","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aicoo/dm-agent","version":"0.3.1","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.3.1","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"bea7db186ff462fbea7c2922d3657c17f6b3dde9","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.3.1.tgz","fileCount":13,"integrity":"sha512-myjhCPiv2WujdZXC5AuP5Qyp3AEU1Z+xIy3APFRQOPc5QMoRhq6bxenUxyMl3CG/OJMdoj9VnXK1C6pIQNrufQ==","signatures":[{"sig":"MEUCIFZo+Mcg+Ootta8rqGlArcwm+t8OplU5zNVWs5FdSEuFAiEAo3Cs41GBArnAhhQw9LBzE532LAhicm/qszRrTpQqfUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117932},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.3.1_1785781785583_0.5604860095844681","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aicoo/dm-agent","version":"0.4.0","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.4.0","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"ef6ea6b93da5dd9525aa2bdb5af37a50883e0053","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.4.0.tgz","fileCount":13,"integrity":"sha512-15M7FC5dr7CJWsAxuRc5X2KjCmIBkwgJnwZSpzjXEVI72UuZPCDQ0ijobk2dDTCmNLiVpJ/OPIbQQn4hiUExEw==","signatures":[{"sig":"MEYCIQDrzzrPpC0K5cYobjzYWQQak0IgmVKVJ17sKiq8x9kBnAIhAPwCR9Qlo90jFOdZz62dc7GREinvemXHP8aiuulDZl0Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131667},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.4.0_1785816265200_0.16479074507629754","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aicoo/dm-agent","version":"0.4.2","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.4.2","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"889f1c2ef65ec5942b359807e0f2a1d16ac5e9fb","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.4.2.tgz","fileCount":16,"integrity":"sha512-TsRJdaLJ9BQKv8bsIht5zqEicj7GvLPmalj5xAJKTlUfAshtdtp3rWPyGN8rhDh8sqVNDUh2JJ55pCFB3QFd8g==","signatures":[{"sig":"MEUCIDmdltb3r5rO2Xg6eW8qCeolNHJ1G6Lt5vxLJPX/NaBKAiEA8gjNdizmb3eBFrzvgZISn2YHZESO64zuS+zVVbYEryI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144884},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/idle.test.mjs && node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.4.2_1785932170425_0.8550307901791081","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@aicoo/dm-agent","version":"0.4.3","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"license":"Apache-2.0","_id":"@aicoo/dm-agent@0.4.3","maintainers":[{"name":"abhinav_jain","email":"abhinavjain2107@gmail.com"},{"name":"waterdog","email":"cy1610657757@outlook.com"}],"homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"bin":{"aicoo-dm-agent":"src/cli.js"},"dist":{"shasum":"b75fca7b0dde4ed9cdd43b120eebca45852fcad2","tarball":"https://registry.npmjs.org/@aicoo/dm-agent/-/dm-agent-0.4.3.tgz","fileCount":16,"integrity":"sha512-PFJ3D623CxcON1l1gnaoxtoG6Fr+LeRd8nuvKjfmSUK2ulrXiXMkVERv8uF9JqyHvk8nt2BsiNy+QbTnxp/3UQ==","signatures":[{"sig":"MEUCIFUDcoNHZP5Gllef46Vb2bwVO4LuxTaLrD81mtiURe5BAiEA1lUltMMHmk8fm156oh3JuDRkgv2v+ctBjkJ+xLT3uq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148633},"type":"module","engines":{"node":">=22.5"},"scripts":{"test":"node test/idle.test.mjs && node test/approval.test.mjs && node test/wall.test.mjs && node test/gate.test.mjs && node test/filter.test.mjs && node test/commands.test.mjs && node test/codex.test.mjs"},"_npmUser":{"name":"waterdog","email":"cy1610657757@outlook.com"},"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"_npmVersion":"11.11.0","description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","@anthropic-ai/claude-agent-sdk":"^0.3.211"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dm-agent_0.4.3_1785937654674_0.16922935846096654","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-08-02T22:30:18.406Z","modified":"2026-09-05T10:53:53.666Z","0.1.0":"2026-08-02T22:30:18.718Z","0.1.1":"2026-08-02T22:41:55.698Z","0.2.1":"2026-08-03T08:28:39.488Z","0.2.2":"2026-08-03T12:12:28.197Z","0.2.3":"2026-08-03T12:43:45.274Z","0.3.0":"2026-08-03T18:16:22.115Z","0.3.1":"2026-08-03T18:29:45.745Z","0.4.0":"2026-08-04T04:04:25.351Z","0.4.2":"2026-08-05T12:16:10.572Z","0.4.3":"2026-08-05T13:47:34.849Z"},"bugs":{"url":"https://github.com/Aicoo-Team/aicoo-local-agent/issues"},"license":"Apache-2.0","homepage":"https://github.com/Aicoo-Team/aicoo-local-agent/tree/main/dm-agent#readme","keywords":["aicoo","agent","agent-to-agent","claude-code","local-agent","approval"],"repository":{"url":"git+https://github.com/Aicoo-Team/aicoo-local-agent.git","type":"git","directory":"dm-agent"},"description":"Let a teammate ask your local agent. They DM you on Aicoo, a Claude Code session on your machine answers, and every file it opens is approved by you, one call at a time.","maintainers":[{"email":"generica626@gmail.com","name":"arctic_fox"},{"email":"abhinavjain2107@gmail.com","name":"abhinav_jain"},{"email":"cy1610657757@outlook.com","name":"waterdog"},{"email":"xisenwanginbeijing@gmail.com","name":"eaonw"}],"readme":"# @aicoo/dm-agent\n\nChat-rails local agent for Aicoo. Your peers DM you in Aicoo; this daemon feeds those\nmessages to a local Claude session on your machine and DMs the answer back. It can read a\nfolder you share and run commands you declared — and every one of those suspends until you,\nthe owner, approve it.\n\nNo bridge, no endpoints, no grants, no parallel realtime stack: transport is 100% the\nexisting Aicoo chat pipeline (`GET /api/v1/conversations` to read, `POST\n/api/v1/agent/message` human path to write). The invention budget is spent only where\nchat has no answer: the owner-approval gate and the local runtime control.\n\n## Quick start\n\n```bash\nnpm install\nAICOO_TOKEN=aicoo_sk_...  node src/cli.js start \\\n  --peer <their-username> \\\n  --workspace ~/shared-folder \\\n  --reachout \"Hi — this is my local agent. Reply to this message to talk to it.\"\n```\n\nRun it in a terminal you keep open: tool-call approvals appear there as `[y/N]`\nprompts. Headless (no TTY)? Approvals become pending files you resolve from any\nterminal:\n\n```bash\nnode src/cli.js pending --peer <their-username>\nnode src/cli.js approve <id> --allow --peer <their-username>\n```\n\n## Semantics\n\n- **Inbound**: messages from the peer (`senderType: human`) in your direct DM thread\n  *and* in the shared-agent thread. History is never replayed: on first sight of a\n  conversation the client baselines its cursor and only processes newer messages.\n- **Suspend-then-reply**: text-only questions are answered immediately; a question\n  that needs Read/Glob/Grep suspends mid-turn, asks the owner, and only replies after\n  the tool result (or a denial) comes back. Approval timeout = deny, fail closed.\n- **Hard walls under the approval**: only Read/Glob/Grep and the owner's declared\n  commands exist; every path is realpath-checked into a granted folder; `..` patterns\n  rejected; everything else (Bash/Write/Edit/Web) is disallowed at session launch, not\n  just denied.\n  Out-of-workspace and non-read attempts are refused by the wall *without* waking\n  the owner — the prompt is reserved for calls that are actually in scope.\n- **Why a PreToolUse hook, not just `canUseTool`**: Claude Code's built-in rules\n  auto-allow reads inside `cwd`, so `canUseTool` is never consulted for them\n  (`permissionMode: \"dontAsk\"` goes further and resolves everything itself,\n  auto-allowing in-cwd reads and auto-denying the rest). Either way the approval\n  callback is dead code. The `PreToolUse` hook fires for **every** tool call\n  regardless of permission rules, so the gate lives there; `canUseTool` stays as\n  a second layer, and one shared memoized decision keeps the owner from being\n  asked twice for the same call.\n- **Untrusted framing**: inbound content is wrapped as untrusted external material;\n  the session's system prompt forbids treating it as instructions.\n- **Loop safety**: replies go out via the API and are stored as `senderType: agent`;\n  the client only ever processes `senderType: human` rows, so two agents can never\n  auto-reply to each other in this version (a future `--a2a` mode will relax this\n  with a depth cap).\n- **Memory**: turns share one provider session (resumed by id, persisted in the state\n  dir), so the conversation has continuity across messages and restarts.\n\n## Letting a peer run something (declared commands)\n\nReading files answers \"what is configured\". Some questions need \"what happens when you run\nit\" — and that is the one thing no cloud agent and no file transfer can substitute.\n\nWrite a `policy.json` next to the state file (`aicoo-dm-agent start --policy <file>` to put\nit elsewhere):\n\n```json\n{\n  \"folders\": [\"~/aicoo-demo\"],\n  \"commands\": {\n    \"run-tests\": { \"argv\": [\"npm\", \"test\"], \"describe\": \"run the unit tests\" },\n    \"docker-ps\": { \"argv\": [\"docker\", \"ps\", \"--format\", \"{{.Names}}\"] }\n  }\n}\n```\n\nThe peer's agent can invoke `run-tests` by name and nothing else. Each run stops for your\napproval, and the prompt names the command and its exact argv:\n\n```\n== OWNER APPROVAL REQUIRED ==\n   tool: command:run-tests\n   run \"run-tests\" (npm test) in ~/aicoo-demo\n   allow? [y/N]\n```\n\n**Why a declared list and not just `Bash`.** With raw shell the approval line becomes an\narbitrary command string, and `allow? bash -c 'curl … | sh'` gets a `y` often enough to make\nthe gate decorative. A name plus the argv *you* wrote is a decision a person can actually\nmake.\n\n**Why `argv` and not a string.** A command written as `\"npm test\"` only means something once\nsomething splits it, and whatever splits it becomes the attack surface. The array is passed\nstraight to `execFile` with no shell, so `&&`, pipes and `$(…)` are impossible by\nconstruction — a bare string is rejected at load rather than quietly run through a shell. If\nyou need a pipeline, declare a script file.\n\nThe peer chooses a name; they cannot pass arguments.\n\n### Codex works too, through `app-server`\n\n`codex exec` had no way in — anything its sandbox could not satisfy was refused on the spot,\nso the peer was told no on the owner's behalf without the owner hearing about it. Driving\nCodex through `app-server` turns that into a JSON-RPC request we answer, so a human decides\non this runtime as well. (A turn survives a five-minute hold, so a real round trip fits.)\n\nTwo honest differences from the Claude path:\n\n- **Granularity.** Claude asks about every tool call. Codex's sandbox serves reads inside the\n  shared folder silently and asks only about what it cannot serve — closer to a standing\n  grant on the folder, which is defensible since that folder is what the owner shared, but it\n  is not the same promise.\n- **Only quote-free commands are offered.** Codex composes its own shell string and re-quotes\n  whatever the prompt gave it, so a declared command needing embedded quotes cannot be matched\n  reliably in either direction. Those are skipped with a startup line saying so; wrap them in\n  a script file and declare the script path. `npm test`, `pytest -q`, `git status` — the\n  ordinary cases — work unchanged.\n\nThe same invariant holds on both runtimes: **a command matching nothing the owner declared is\nrefused without a prompt**, so an arbitrary shell string never reaches the owner as a yes/no.\nThat is not theoretical — on the first live run, Codex's own memory plugin tried to\n`mkdir … && printf …` into a directory outside the workspace, and the gate refused it silently.\n\n## Two things that leave the machine, and what stops them\n\n- **Files** — the path wall (realpath, symlink-safe) plus per-call approval, with the\n  runtime's own OS sandbox underneath as defence in depth. `--no-sandbox` only if your\n  platform cannot start one; the default is to fail rather than claim confinement it does\n  not have.\n- **The reply itself** — a sandbox governs what a process may *touch*, never what a model\n  may *say*. Values assigned to sensitively-named variables in env files under the granted\n  folders are collected each turn and replaced in the outgoing reply with\n  `[redacted: value from .env]` — marked, so you can see it fired.\n\nEvery decision lands in `audit.jsonl` next to the state file: who asked, what tool, what\ntarget, allowed or denied, and which rule decided.\n\n## Commands\n\n| command | what |\n| --- | --- |\n| `start --peer <p> [--workspace <dir>] [--policy <file>] [--poll <ms>] [--approve-timeout <s>] [--auto-allow-read] [--no-sandbox] [--reachout \"…\"] [--model <m>]` | run the agent loop |\n| `start --dry-run-message \"…\" [--workspace <dir>]` | one local turn, prints the reply, no network send |\n| `send --peer <p> --text \"…\"` | one-shot DM (reachout) |\n| `whoami` | identity of `AICOO_TOKEN` |\n| `pending` / `approve <id> --allow\\|--deny` | headless approval resolution (scope with `--peer`) |\n\n## Known limitations (MVP)\n\n- **Split-thread quirk**: replies land in the shared-agent thread (\"your agent\" in the\n  peer's app), even when the peer asked in the plain DM. Single-thread needs a small\n  server addition (API-key send into a direct conversation) — tracked as the next step.\n- **One device per account**: run the client on two machines and both will answer.\n  (Needs an active-device lease server-side.)\n- **Polling** (default 3s), not push. Good enough for chat; an SSE upgrade is server\n  work, not client work.\n- If the peer's message lands in the shared-agent thread *and* the account also has a\n  cloud COO configured with credits, the cloud agent may answer too. Ask in the direct\n  DM to avoid double replies until the server-side mute flag exists.\n","readmeFilename":"README.md"}