{"_id":"obsidian-agent-fleet","_rev":"27-0601ffb5840e9ee2d2c106d22d88ee04","name":"obsidian-agent-fleet","dist-tags":{"latest":"0.20.1"},"versions":{"0.3.0":{"name":"obsidian-agent-fleet","version":"0.3.0","keywords":["obsidian","ai","agent","claude","task","automation"],"author":{"name":"Denis Berekchiyan"},"license":"UNLICENSED","_id":"obsidian-agent-fleet@0.3.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"homepage":"https://github.com/denberek/obsidian-agent-fleet","bugs":{"url":"https://github.com/denberek/obsidian-agent-fleet/issues"},"bin":{"obsidian-agent-fleet":"bin/cli.js"},"dist":{"shasum":"7f8eebddad729e9b970d709ba4271c233cce1341","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.3.0.tgz","fileCount":6,"integrity":"sha512-2lmm4mIxZXfqlu4P6dOFkrczIXtkKY/iKf1nkzMnKy6Tod8oueCOU35wTkXuyWNDDYlknvmTXgjWyFCadUXtsA==","signatures":[{"sig":"MEUCIGTP0iIjYv/LhxwJQWMgFAszRjN9ZM209ZyKKdN95tWtAiEA6cGSEwZqzxEtgANHXo9hfIeqNyucTzdDYxsjPif8Z9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2572015},"scripts":{"postinstall":"node bin/cli.js install --auto 2>/dev/null || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"repository":{"url":"git+https://github.com/denberek/obsidian-agent-fleet.git","type":"git"},"_npmVersion":"10.9.4","description":"Agent Fleet for Obsidian — AI agents, task scheduling, and interactive chat","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.3.0_1775264366892_0.7943770576406834","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"obsidian-agent-fleet","version":"0.3.1","keywords":["obsidian","ai","agent","claude","task","automation"],"author":{"name":"Denis Berekchiyan"},"license":"UNLICENSED","_id":"obsidian-agent-fleet@0.3.1","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"homepage":"https://github.com/denberek/obsidian-agent-fleet","bugs":{"url":"https://github.com/denberek/obsidian-agent-fleet/issues"},"bin":{"obsidian-agent-fleet":"bin/cli.js"},"dist":{"shasum":"2a3302e884b6b8ec8322ddfb1a5d21bf9187c97f","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.3.1.tgz","fileCount":6,"integrity":"sha512-Esq0mPkmKyY2aQcrY38wjLPk0gdFf4CUsyRy6alBbceESuSmvjvceqnehooeJASXeY7ri13ZdoyU9DjFJdEq4Q==","signatures":[{"sig":"MEYCIQCiA9L/z6oA5ZkY1PmY1QMJ/nUu8H3TTTQ8sNP56HD8wQIhANbo2Pw53EVNolyqg1ugcuZpuixzNc6cefh+TwdkForb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2573731},"scripts":{"postinstall":"node bin/cli.js install --auto 2>/dev/null || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"repository":{"url":"git+https://github.com/denberek/obsidian-agent-fleet.git","type":"git"},"_npmVersion":"10.9.4","description":"Agent Fleet for Obsidian — AI agents, task scheduling, and interactive chat","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.3.1_1775272064071_0.3743245034707008","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"obsidian-agent-fleet","version":"0.3.2","keywords":["obsidian","ai","agent","claude","task","automation"],"author":{"name":"Denis Berekchiyan"},"license":"UNLICENSED","_id":"obsidian-agent-fleet@0.3.2","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"homepage":"https://github.com/denberek/obsidian-agent-fleet","bugs":{"url":"https://github.com/denberek/obsidian-agent-fleet/issues"},"bin":{"obsidian-agent-fleet":"bin/cli.js"},"dist":{"shasum":"75d9bffc578c034ccfd533a62d46fdf477564f99","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.3.2.tgz","fileCount":6,"integrity":"sha512-Vwyx3R0YFa4U7xnZeHBLBM8QJY1OJl4SPHpaA97b6yyR/oRqnqsh7pcDJlveg6YvCS2M9l71xKVFpa89U4gf2A==","signatures":[{"sig":"MEUCIE+Tl+3U4loSvvIwYmnV8STn0NL+aNDGgRNmBfRiMldSAiEAq9qLcfmH3Q1YFTniiwCubJoN9YbVNvJc17PAH8KZzrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2574309},"scripts":{"postinstall":"node bin/cli.js install --auto 2>/dev/null || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"repository":{"url":"git+https://github.com/denberek/obsidian-agent-fleet.git","type":"git"},"_npmVersion":"10.9.4","description":"Agent Fleet for Obsidian — AI agents, task scheduling, and interactive chat","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.3.2_1775272873067_0.29359666298792786","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"obsidian-agent-fleet","version":"0.4.2","_id":"obsidian-agent-fleet@0.4.2","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"6e32571178ec3debbd8f2c4b6ee349a1058ec882","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.4.2.tgz","fileCount":6,"integrity":"sha512-TDLrSgN1M9gV9QCYf/mH2EwfLdv8FoVOAAWbT7qdTngQy663byG8OeL5yqOsJ2xLSjHjgXT7lMKSQDgGTpQadQ==","signatures":[{"sig":"MEUCIQDOF8WZuWWvTf3/saGzJ5K815YRsrWgzpjD77DkZKtLDwIgDqY7uT8FqD/i5gurNBWD/D7E6UtceL0dR4plSfdOgN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1176670},"main":"plugin/main.js","gitHead":"b3b8b709fd9fbf42879db26eb610d96b334c9f05","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.4.2_1775455971385_0.9477788200125312","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"obsidian-agent-fleet","version":"0.4.3","_id":"obsidian-agent-fleet@0.4.3","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"31c9fcbafe87b7fc155e3e7fdbd5039f4527f095","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.4.3.tgz","fileCount":6,"integrity":"sha512-TbQKd0/m5udF/ExWQcnuK5JMmwW1Ebku9xOtfHtB2T3D5BdrMiuWaMNb6C9FF0LL857etKYIaEJ1LLcz+vv2PA==","signatures":[{"sig":"MEYCIQDbDSI2ETPps9Ygj06iRuAt3HB5+Jogh+lQBfilUM7/AQIhALoQ9Yr5fwB1Rg2v9g+2fufb9jgfFzMbb7Ksv0CKWfak","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1186868},"main":"plugin/main.js","gitHead":"92c4c17dba4d208e749efb0bc07d37bca38918fb","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.4.3_1775457365523_0.2945522623513106","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"obsidian-agent-fleet","version":"0.4.4","_id":"obsidian-agent-fleet@0.4.4","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"039dc8aaca1d810d79cf6efadf79e7d8a036b3a4","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.4.4.tgz","fileCount":7,"integrity":"sha512-HqYBOZIYrc1ldL8D1q7ZGbL6rhcfQUiuYUi3R8KaUL2dvINqmmGkyyMP/qYboPwFRNf5JRY58qfS8PUOMeScNA==","signatures":[{"sig":"MEUCIG4yPePkDt9p8yvQ2wnnDrS7zhs0UpHKF2bS5zYreYfWAiEA9ruLvSSfJafuUQFlUbKf0frGcaFfae02E45G30DlYls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1197371},"main":"plugin/main.js","gitHead":"e714a0676831468c41461b94e7c38d1a6344a745","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.4.4_1775458707776_0.5492844850181011","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"obsidian-agent-fleet","version":"0.4.5","_id":"obsidian-agent-fleet@0.4.5","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"5b4ea20e461a97b35a9b620e6bdf599546cd5cf3","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.4.5.tgz","fileCount":7,"integrity":"sha512-mpFBZiTVU4r2zUdLC+KTCZb+USwj+ucXNClhMou3yCicu0XNfYUaOau/kHPZUWh8F9ufjrubFeMDFvcOymCzXA==","signatures":[{"sig":"MEUCIB1ZWO5CxUNr9SipGIdbLhRQLazqXFdaawY1mJVN66nUAiEAi4SF4tNoWrXI5wLuoldCY6Wn8btBMeP/hoaGjfJsrZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1199191},"main":"plugin/main.js","gitHead":"66ce901b9f0be9c6f106503b9568f453cb0081b5","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.4.5_1775496783715_0.6891459498029864","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"obsidian-agent-fleet","version":"0.7.1","_id":"obsidian-agent-fleet@0.7.1","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"da8dc0514c9eb96c4fd3691aa4e4fc362b133591","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.7.1.tgz","fileCount":7,"integrity":"sha512-rvio7Tg4lU0PXlH/jFQz07fvot32907Umo+3F6p5ckNzF0KApDfbLKS+e+Ogs3fo1W7octMOloxFPGu9prRJeg==","signatures":[{"sig":"MEUCIQC2HbwU5bAIE3YUqpd95V1UCb09PznnVpw0Ri8goJhzigIgWGgJiJtJQgre7xGH5ZNRNv/2A11Vd9w2OD7kQyr/y38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":922872},"main":"plugin/main.js","gitHead":"2c2d0eafa34bd91326355787241b7b1252115088","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.7.1_1775862555493_0.13405919917655607","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"obsidian-agent-fleet","version":"0.9.0","license":"MIT","_id":"obsidian-agent-fleet@0.9.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"ef97beabd84873b424039c1b953cbad2206e146d","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.9.0.tgz","fileCount":8,"integrity":"sha512-E2ePJMKsgpIdq/Q5OZrUDiVsWWz8Yzand6QsDqTAvrbcduFS7/VxlHQ1ROHWaIyJpbxMBguAXUVKpjhJXZCHkA==","signatures":[{"sig":"MEQCIH3S2kjrAsFjOg0h04cQtM/Pi2hbJldo43n+kDIZp2q8AiBhzcoU7LDmfYt9YDZjjxLpIyN1F6gWKnCPVEMu3veEUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":999643},"main":"plugin/main.js","gitHead":"1d7f95fb898ce008451c2725b68b8a217e21102c","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.9.0_1776660572195_0.29238245417025444","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"obsidian-agent-fleet","version":"0.9.2","license":"MIT","_id":"obsidian-agent-fleet@0.9.2","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"349a040bae8ede6c4cfea9f229d5aea4bca068de","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.9.2.tgz","fileCount":8,"integrity":"sha512-LaIAxa689OK4At2w2NVMp4jZClP5Vh9FlkYk5jyTVF2asQULd8ew8Z3RhzDuIwCviEIqhXcwSHLGpdeAcKwL6Q==","signatures":[{"sig":"MEYCIQDiUo/nPDSzBri7Q6Y3VWAEwddPiYY2PajHwVR+kaLBnwIhAM9IELeAdVzQEICHcOC69W7YictSLh2Po6GY7rSKW5JG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1033361},"main":"plugin/main.js","gitHead":"7b2efd96639a33f3d6740a45be3e4bbea6bad7e6","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.9.2_1776835825814_0.28281691708598244","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"obsidian-agent-fleet","version":"0.10.0","license":"MIT","_id":"obsidian-agent-fleet@0.10.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"65e885714bc9de24bfdb16d385bbd9cdb76fcc12","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.10.0.tgz","fileCount":8,"integrity":"sha512-C6TLRfThTjymCbqVzmwDGBTmhSOwFsCiPl6NkneUvszieHJPsaj4sg5E9YG1KAKy76a9jvd5U5PI8ZtCilj7Ow==","signatures":[{"sig":"MEUCIQCIsxVaXnh+RvTfeFahUMl/Xc0wmmjXoLvNpZd3qZ6gzQIgWEmxUQxashAn4SMT8YPfZZpQ6pSPS1vFH/nYI1SkIyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1067072},"main":"plugin/main.js","gitHead":"afe4dae2c60d58e5ab621f82945bb1a85564ff4a","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.10.0_1777259303860_0.7392722616097518","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"obsidian-agent-fleet","version":"0.11.0","license":"MIT","_id":"obsidian-agent-fleet@0.11.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"dc5491f85d34a5103ff34ee1d9b83ce15167da43","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.11.0.tgz","fileCount":8,"integrity":"sha512-mORhWNcq+vrLjouYe4HQO8eUrI4DdINluMokBgP3Yy1O/UTTSNcZokws+9qfwmz298OSZi7how/7jmRCf7xIvw==","signatures":[{"sig":"MEQCIA1iexwvCXNPXwkeRaZdjdLDWbLxj3TnA+wUlFz82mttAiBcGgGJ94qAE/qLP/pyF2hMctZXBNj7t2/c8uGEwkFHXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1108630},"main":"plugin/main.js","gitHead":"91ec16dec3d06050d0f80fceb5fd1688a7994fd3","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.11.0_1781391188550_0.8885807957334848","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"obsidian-agent-fleet","version":"0.12.0","license":"MIT","_id":"obsidian-agent-fleet@0.12.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"9e4c53b9507b85eb79b1006786467c6a9469500e","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.12.0.tgz","fileCount":8,"integrity":"sha512-uXi/IHeHf4NSvIGtj1NvSD5V+G2I3HeAp/lHmkCle1TXUbjFK+ITCuZdWWbbKsDBxVzC6zUpdRu0Svp14MaY5w==","signatures":[{"sig":"MEYCIQDKBWcvccrnvfGg8jk97XCkhEIGz/xGIzY8bCngumLPcgIhAOpWWpGUKJtHlj1Q8WNR8YBJasPI9rja9dJE8o9TxkSW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1144514},"main":"plugin/main.js","gitHead":"5e1f2b87bf89d6490fa16090666e6688258cffd9","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.12.0_1781406217459_0.460301080632618","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"obsidian-agent-fleet","version":"0.13.0","license":"MIT","_id":"obsidian-agent-fleet@0.13.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"83c2db7a6640aea73f169184b4579381e375d8c1","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.13.0.tgz","fileCount":8,"integrity":"sha512-hUN8KV855kykyeA3IfbIqmZqCyEwQ7+skvSRcoedh5lTfzRXAdn465uWAGhYXRKfXwDTbJ0kscyi9niJJ2TdxA==","signatures":[{"sig":"MEQCIFOdM0X6L5d7ZVb3jBXHZI6KJc2ws0A5TzaFpwJXzV9/AiBOY3YWeadnzhJXkJI1p6uzrrcHxmOfMmnUwnLIQwDhbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1147553},"main":"plugin/main.js","gitHead":"bbc9ec50fe6e6b918338a7c2c48d2a78dd3c701f","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","builtin-modules":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.13.0_1781456636413_0.20927533297606726","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"obsidian-agent-fleet","version":"0.13.4","license":"MIT","_id":"obsidian-agent-fleet@0.13.4","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"562bb9fc32692fd7b366ab36b18f6ef1a6a7c31d","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.13.4.tgz","fileCount":8,"integrity":"sha512-azravm1xLpFKPjRXpB+sFdoR7qcYggCT9qsrx+nr0WjxZ7lOhIRrk7JlB3nXceJKq3f7VQh6mVmKhBF7ID+9Rw==","signatures":[{"sig":"MEQCIG1dplEEHWzBTwY1n5W0b+Olem9wVuprvCVC1+uPjTImAiAEMVzte4xhdr4CuzjuybYcQrcvGFUMGmS4FtPy7JJiyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1150893},"main":"plugin/main.js","gitHead":"601e6cdf7d9cd4451f9d951a94182c0c152dc2e0","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.20.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.13.4_1781463929605_0.6882198629977649","host":"s3://npm-registry-packages-npm-production"}},"0.13.6":{"name":"obsidian-agent-fleet","version":"0.13.6","license":"MIT","_id":"obsidian-agent-fleet@0.13.6","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"0507f8f690cd5ea174bf10b66a0faae484b501d5","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.13.6.tgz","fileCount":8,"integrity":"sha512-spR+PTUf8IDh9xysjaPRQ0PDgl0MMNQdsIMcxK8sSGuBnJfHER6I9ALcfKWaAu0W+CPrv3Kg9Zp9fL0fxMgC6Q==","signatures":[{"sig":"MEUCIEWUpIBhIw07yjGeDC/JZjD8hWlhcjCF3IOeyAysMRnsAiEAgxPBv4tspU+lMxb4TKwRjxqF9ndSf1/9ZOM+BhyqSTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1150893},"main":"plugin/main.js","gitHead":"d08990069ab7795bb6e9d621b3ec583e314ea776","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.13.6_1781468935602_0.27614942678141663","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"obsidian-agent-fleet","version":"0.14.0","license":"MIT","_id":"obsidian-agent-fleet@0.14.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"5644d99d4826a196a3aa7a4ce057217081ad25e2","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.14.0.tgz","fileCount":9,"integrity":"sha512-8BCK1aGqq8niQaKPYns80vPlUofQz5f8tZSBtNIReOaJUzL7h5ynC5NmgmIcKRSm30gUvxKfg9l/5FDDXU3asQ==","signatures":[{"sig":"MEUCIBCqQ2nAPNRHH67ByhFMOsSgecUus0NurZyeJeeZoRQqAiEA8420nHjWBT0dUwyzBzt2y7PRSCZ5syvGHaiB6GrIdak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1182917},"main":"plugin/main.js","gitHead":"589663031a32691f05be7a50548804c8f6c9690d","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.14.0_1781936822259_0.8215669893690956","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"obsidian-agent-fleet","version":"0.15.0","license":"MIT","_id":"obsidian-agent-fleet@0.15.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"958c3c64755df1b836393b378762f7ef3b2cc6cc","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.15.0.tgz","fileCount":9,"integrity":"sha512-V8WmJ/drVy0fmnGClMUkFv+z7oHqKr/yDsTOivFK+6BbQkMeRih/rJ75j48b9sCSXa1V4b7bOQ/OYbrPAm+nJQ==","signatures":[{"sig":"MEUCIEjYvkW+4+mgiSapX2ti3mlKVwPTNmPRs7/hneymEVr9AiEArz/cvHb5G1izg7/4xbAShXqqeAk62pRexpyYP95opls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1188174},"main":"plugin/main.js","gitHead":"f4385e0e600a40313042902a6cc372742f516e91","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.15.0_1782096311065_0.8353881881068821","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"obsidian-agent-fleet","version":"0.16.0","license":"MIT","_id":"obsidian-agent-fleet@0.16.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"324cdc8614f81fa4254c4295b064f771b26f9cbe","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.16.0.tgz","fileCount":9,"integrity":"sha512-/oMmC/8P3JRINdF4fljEv5rWiyx+pP5dfBQLXq5GGSX+2HTJOH9oeG9YTfxUv9ODwrEaYWv6W5CVOd8ew/RDCA==","signatures":[{"sig":"MEUCIQChH8EBWBDiDktzJeSmps3OgdSfV0mT7xbgXnd2yDvjDgIgQEsKFYPjK8tHaOfKnWN9up6b1XWSSZ96HhKuuj+d3ig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1203106},"main":"plugin/main.js","gitHead":"2f0dbb2145dd84a0927a14afb1c03940b3db6706","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.16.0_1782972068442_0.7450082045396582","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"obsidian-agent-fleet","version":"0.18.0","license":"MIT","_id":"obsidian-agent-fleet@0.18.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"62d2fd890a3c6cc203fae348ee3540e9e850cf08","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.18.0.tgz","fileCount":10,"integrity":"sha512-WQyKcOHXY3cszNDDUNko+cTIYnJy8Ym7vKOlcvur3h1ur4zNeNg53wjms7xD4gI+ghDXCfWEKQ16lBzfjduKgg==","signatures":[{"sig":"MEUCIQD0RNOg2Y5AeJSNBFIU/n7z8X6VW2NLLHk/wuerE9ZQrQIgXUGNxoZdc/r19zBGOwMv9VgES5y84ovPEkMMvsmJETo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3163016},"main":"plugin/main.js","_from":"file:/Users/denisberekchiyan/dev/Obsidian-Agent-Fleet-release-artifacts/0.18.0/obsidian-agent-fleet-0.18.0.tgz","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_resolved":"/Users/denisberekchiyan/dev/Obsidian-Agent-Fleet-release-artifacts/0.18.0/obsidian-agent-fleet-0.18.0.tgz","_integrity":"sha512-WQyKcOHXY3cszNDDUNko+cTIYnJy8Ym7vKOlcvur3h1ur4zNeNg53wjms7xD4gI+ghDXCfWEKQ16lBzfjduKgg==","_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.18.0_1785720703748_0.6015788806869149","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"obsidian-agent-fleet","version":"0.19.0","license":"MIT","_id":"obsidian-agent-fleet@0.19.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"f035420b21980b2251f33f833a4e1d3ae52322a0","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.19.0.tgz","fileCount":10,"integrity":"sha512-cfCR94f38WibjTouLvTEo8oG/+eA21BSU3Al7CJM+2XoG7XVlMKHqbF7vvt7Oz12KuhqXcJrWYeoioNyGVR+Fw==","signatures":[{"sig":"MEQCIAbpvjci7xbjUZLwA2dgS/uhQbWyvTLjw9SmEYE+oHl9AiA/XyExHp7yLkRLOldfXx0NBhHuTDC5qvpP9HnD1A0TbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3192536},"main":"plugin/main.js","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.19.0_1786868779477_0.21618856180604995","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"obsidian-agent-fleet","version":"0.20.0","license":"MIT","_id":"obsidian-agent-fleet@0.20.0","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"bin":{"agent-fleet":"bin/cli.js"},"dist":{"shasum":"2e9dc88e4d762e4567e9375ea0dded885d4c3c0c","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.20.0.tgz","fileCount":10,"integrity":"sha512-aDPZux69NmNRlT0C4ef66gbe0zc7wtdbYJBGfMtdNHtI671lt/GNiyHQw5pKApCl0AmgQ+uRkVC5x1psXsEyIA==","signatures":[{"sig":"MEQCIGmHoY5wioWOUMnsPvemuhZtcryQLz027waRToevAxgMAiBbHNqtqvNJq5MfrS/4olADFpeYaFA69sY+76qOCe1wOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3308449},"main":"plugin/main.js","gitHead":"a18c1c4b68bd1e55f6a95bab7527cadf798e108f","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","build":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"_npmVersion":"10.9.4","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.21.0","croner":"^8.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"^3.2.4","esbuild":"^0.25.9","obsidian":"^1.8.10","@types/ws":"^8.18.1","typescript":"^5.9.2","@types/node":"^24.5.2","@codemirror/view":"6.38.6","@codemirror/state":"6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-agent-fleet_0.20.0_1786942789177_0.20322433295949627","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"name":"obsidian-agent-fleet","version":"0.20.1","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","license":"MIT","main":"plugin/main.js","bin":{"agent-fleet":"bin/cli.js"},"scripts":{"build":"node esbuild.config.mjs production","dev":"node esbuild.config.mjs","test":"vitest run","typecheck":"tsc --noEmit","postinstall":"node bin/cli.js install --auto || true"},"devDependencies":{"@codemirror/state":"6.5.0","@codemirror/view":"6.38.6","@types/node":"^24.5.2","@types/ws":"^8.18.1","esbuild":"^0.25.9","obsidian":"^1.8.10","tslib":"^2.8.1","typescript":"^5.9.2","vitest":"^3.2.4"},"dependencies":{"croner":"^8.1.2","ws":"^8.21.0"},"_id":"obsidian-agent-fleet@0.20.1","gitHead":"627682588f8cc249680d5eb9587ce8bb0a2434e8","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-UgLX9m4gHDT7lNVmd5gObOOJTMSYei/lR+YAgzoSYYcCdCXnAYjSJIlT6Ns0LQtRwZqsAZx6o1sh0EnhJUzeyw==","shasum":"e26885800af899132bc4ffa99d3a74bf0da9a5e5","tarball":"https://registry.npmjs.org/obsidian-agent-fleet/-/obsidian-agent-fleet-0.20.1.tgz","fileCount":10,"unpackedSize":3316638,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDjz2wQwalvRgd+9rfzaIC8sVnUQK/V3aJ9mba8CkwvcQIhALG6kdlGB/G8UZJ9FuAVeGdXgdZMjOei6t8LJDJW6JZg"}]},"_npmUser":{"name":"denberek","email":"denberek@gmail.com"},"directories":{},"maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/obsidian-agent-fleet_0.20.1_1787627783018_0.48169264105010523"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-04T00:59:26.891Z","modified":"2026-08-25T03:16:23.368Z","0.3.0":"2026-04-04T00:59:27.088Z","0.3.1":"2026-04-04T03:07:44.329Z","0.3.2":"2026-04-04T03:21:13.329Z","0.4.0":"2026-04-06T05:55:58.040Z","0.4.1":"2026-04-06T06:05:26.394Z","0.4.2":"2026-04-06T06:12:51.597Z","0.4.3":"2026-04-06T06:36:05.772Z","0.4.4":"2026-04-06T06:58:27.965Z","0.4.5":"2026-04-06T17:33:03.891Z","0.7.1":"2026-04-10T23:09:15.633Z","0.9.0":"2026-04-20T04:49:32.358Z","0.9.2":"2026-04-22T05:30:25.951Z","0.10.0":"2026-04-27T03:08:24.073Z","0.11.0":"2026-06-13T22:53:08.717Z","0.12.0":"2026-06-14T03:03:37.657Z","0.13.0":"2026-06-14T17:03:56.623Z","0.13.4":"2026-06-14T19:05:29.782Z","0.13.6":"2026-06-14T20:28:55.734Z","0.14.0":"2026-06-20T06:27:02.472Z","0.15.0":"2026-06-22T02:45:11.200Z","0.16.0":"2026-07-02T06:01:08.664Z","0.18.0":"2026-08-03T01:31:43.962Z","0.19.0":"2026-08-16T08:26:19.684Z","0.20.0":"2026-08-17T04:59:49.389Z","0.20.1":"2026-08-25T03:16:23.232Z"},"license":"MIT","description":"Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack, Telegram, Discord), heartbeat, and interactive chat.","maintainers":[{"name":"denberek","email":"denberek@gmail.com"}],"readme":"# Agent Fleet for Obsidian\n\n**Turn your vault into an AI command center.** Build and run autonomous AI agents on Claude Code, OpenAI Codex, or the multi-provider Pi harness — schedule tasks, chat in real time, connect Slack, Telegram, and Discord, and hook into any MCP service. Every agent is markdown you own.\n\n<p>\n  <a href=\"https://afleet.md\"><img src=\"https://img.shields.io/badge/website-afleet.md-a78bfa\" alt=\"Website\"></a>\n  <a href=\"https://obsidian.md/plugins?id=agent-fleet\"><img src=\"https://img.shields.io/badge/Obsidian-Community%20Plugin-8b7cf6\" alt=\"Obsidian Community Plugin\"></a>\n  <a href=\"https://www.npmjs.com/package/obsidian-agent-fleet\"><img src=\"https://img.shields.io/npm/v/obsidian-agent-fleet?color=6366f1\" alt=\"npm\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-8a8f98\" alt=\"MIT License\"></a>\n</p>\n\n![Agent Fleet Dashboard](screenshot.png)\n\n---\n\n## What is Agent Fleet?\n\nAgent Fleet is an Obsidian plugin that lets you build, configure, and run AI agents directly from your vault. Agents run on the CLI backend of your choice — **Claude Code** (Claude Max/Pro subscription or Anthropic API key), **OpenAI Codex**, or **Pi** (multi-provider: Anthropic + OpenAI models through one harness) — selectable per agent. Every agent, skill, task, and run log is a markdown file. If the plugin disappears, your knowledge stays.\n\n### Core Capabilities\n\n🤖 **AI Agents** — Create specialized agents with system prompts, skills, permissions, heartbeat schedules, and memory. Each agent is a folder of markdown files you fully own and control.\n\n🔀 **Three CLI backends** — Run each agent on **Claude Code**, **OpenAI Codex**, or **Pi**, set per agent. Models, chat, tasks, heartbeat, channels, and permission rules all work the same on every backend — pick the engine, keep the workflow. Pi agents get a live dual-vendor model picker: every Anthropic and OpenAI model your connected providers expose.\n\n📚 **Wiki Keeper** — Turn any folder in your vault into a self-maintaining wiki in the spirit of Karpathy's \"LLM wiki\" pattern. Drop sources into an inbox, point at existing note folders as passive watched sources, and a scoped keeper agent ingests them into an interlinked `_topics/` tree with cross-references, citations, and a log. Each topic page carries a refreshable `## Summary` block synthesized from its claims history, so query-time reads stay cheap as the wiki grows. Substantive Q&A answers compound back into the wiki — both as filed synthesis pages and as dated bullets on every cited topic. Weekly lint surfaces orphans, contradictions, dedup candidates, and stale summaries; the dashboard's Wiki Keepers tab renders the review queue. Scales from one whole-vault keeper to many project-scoped instances; any other agent (e.g. a PM agent) can reference a keeper's scope and query or contribute. See the [Wiki Keeper Guide](WIKI_KEEPER_GUIDE.md).\n\n💬 **Interactive Chat** — Dock a chat panel anywhere in Obsidian. Switch between agents. Attach documents and images. Send follow-up messages while the agent works. **Inline threads** under any assistant reply let you tangent without polluting the main thread — each thread has its own backend session, its own context, its own stats.\n\n📊 **Live chat stats** — Compact terminal-style strip under the composer shows the model and a context-usage bar so you always know where you stand on context.\n\n📡 **Slack, Telegram & Discord** — Chat with your agents from Slack, Telegram, or Discord. Multi-agent routing via `@agent-name` prefix or interactive buttons, native typing indicators, image attachments, and session persistence across restarts. Any task or heartbeat can also post its full output to a specific channel.\n\n💓 **Heartbeat** — Autonomous periodic agent runs. Define what an agent does when no one is asking — monitoring, reports, health checks — with results posted to a Slack, Telegram, or Discord channel (broadcast, DM, or a specific channel/chat by id).\n\n📋 **Task Board** — Kanban view with scheduling, priority, real-time progress tracking, and abort. Tasks run on cron schedules or on-demand. Per-task model override lets you route a simple nightly summary to Haiku while keeping the agent on Opus, and per-task channel delivery posts the result straight to Slack/Telegram/Discord.\n\n🎛️ **Model picker** — Choose between Claude aliases (`opus` / `sonnet` / `haiku` / `fable`), current Codex GPT-5.6 tiers, pinned IDs, or Bedrock/Vertex/Foundry formats. One place to configure: settings default, per-agent, or per-task override. Runs log both the requested alias and the concrete resolved model.\n\n🔌 **MCP Integration** — Register an MCP server **once** and it's available to **any** agent on **either** adapter (Claude Code or Codex). Servers live in a fleet-owned registry (`_fleet/mcp/`) and are projected into each run; your native `~/.claude.json` and `~/.codex/config.toml` are never modified. One-click OAuth 2.1 (or a static bearer token), stored in your OS keychain and projected to both backends.\n\n🧠 **Agent Memory** — A two-tier, self-curating memory (curated working set + append-only ground truth) that agents write via a `remember` tool or `[REMEMBER]` tags, on both Claude and Codex. An optional nightly **reflection** consolidates it and can propose new skills from recurring patterns (approval-gated) — and now runs visibly, showing live in the dashboard and writing a run log with its full output.\n\n📊 **Dashboard** — Overview with run charts, success rates, token/cost tracking, activity timeline, fleet status, streaming output from active agents, and focused run-detail panels that lead with the final result and hide the full reasoning transcript behind a toggle. Token and cost totals span **every** run — tasks, heartbeats, chat, and channel turns — via a unified usage ledger.\n\n---\n\n## Quick Start\n\n### Install\n\n**Via Obsidian (recommended):**\n1. Settings → Community plugins → Browse → search **\"Agent Fleet\"** — or open the [plugin directory page](https://obsidian.md/plugins?id=agent-fleet)\n2. Install, then enable Agent Fleet\n\n**Via npm:**\n```bash\nnpm install -g obsidian-agent-fleet\n```\nThe installer automatically finds your Obsidian vaults and copies the plugin files.\n\n**Via BRAT:**\n1. Install the [BRAT plugin](https://github.com/TfTHacker/obsidian42-brat)\n2. Add beta plugin: `denberek/obsidian-agent-fleet`\n3. Enable Agent Fleet in Settings → Community Plugins\n\n**Manual:**\n1. Download `main.js`, `manifest.json`, `styles.css` from the [latest release](https://github.com/denberek/obsidian-agent-fleet/releases)\n2. Create `<vault>/.obsidian/plugins/agent-fleet/`\n3. Copy the 3 files into that folder\n4. Restart Obsidian → Enable Agent Fleet\n\n### Requirements\n\nAgent Fleet runs on the subscriptions you already pay for — no separate API bill required.\n\n- **Obsidian** 1.11.4+ (desktop — macOS, Windows, Linux)\n- **At least one CLI backend** — install whichever engine(s) your agents will use:\n  - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** (default):\n    ```bash\n    npm install -g @anthropic-ai/claude-code\n    claude  # authenticate on first run\n    ```\n    Works with a **Claude Max or Pro subscription** or an **Anthropic API key** — no separate API costs if you already subscribe.\n    **Use 2.1.219 or newer.** Earlier builds truncate streamed output when the reader is slow, which is exactly how this plugin consumes run output — 2.1.216 and 2.1.219 fixed that, along with `claude -p` dropping the answer on a mid-stream API error.\n  - **[OpenAI Codex CLI](https://github.com/openai/codex)** (optional, for `codex` agents):\n    ```bash\n    npm install -g @openai/codex\n    codex login  # authenticate on first run\n    ```\n  - **[Pi coding agent](https://github.com/earendil-works/pi)** (optional, for `pi` agents):\n    ```bash\n    npm install -g --ignore-scripts @earendil-works/pi-coding-agent\n    pi   # then /login to connect Claude Pro/Max, ChatGPT, or add API keys\n    ```\n    ⚠️ Anthropic bills third-party harness usage per token (\"extra usage\"), **not** against Claude plan limits — unlike the first-party Claude Code backend. Check [claude.ai/settings/usage](https://claude.ai/settings/usage) before scheduling Pi agents on Anthropic models. OpenAI officially endorses ChatGPT-subscription use in Pi.\n    For MCP servers on Pi agents, also install the community MCP client: `pi install npm:pi-mcp-adapter`.\n    Works with a **ChatGPT Plus/Pro plan** or an **OpenAI API key**. **Use 0.146.0 or newer** — this release is validated against that JSONL/resume behavior and includes the current MCP reconnect fixes.\n\n  You only need the backend(s) your agents are configured to use — Claude-only users never pay the Codex probe, and vice versa.\n\n  Both CLIs ship frequently and Agent Fleet tracks their current behavior rather than pinning a version. If a run starts failing in a way that looks like output-format drift, update the CLI first — the run log records the concrete model and the raw CLI event that failed to parse.\n\n  Agent Fleet detects both CLI versions at startup (Codex only when a Codex agent exists), caches them in plugin settings, and shows a dismissible notice when a detected version is below the recommendation. Version-sensitive flags fail with an actionable message instead of silently degrading a configured safety or output contract.\n\n### First Launch\n\nOn first launch, Agent Fleet creates a `_fleet/` folder in your vault:\n\n```\n_fleet/\n├── agents/\n│   └── fleet-orchestrator/    ← default agent (manages the fleet)\n├── skills/                    ← 22 built-in skills\n├── tasks/\n├── channels/\n├── mcp/                        ← registered MCP servers (one file each)\n├── runs/\n└── memory/\n```\n\nThe **Fleet Orchestrator** agent is ready — click Chat to ask it to create new agents, tasks, skills, or channels.\n\n### Update\n\n```bash\nnpm update -g obsidian-agent-fleet\n```\n\nOr via BRAT: settings → check for updates.\n\n---\n\n## Features\n\n### Agents\n\nAgents are AI assistants with specific personalities, capabilities, and permissions. Each agent is a folder in `_fleet/agents/` containing markdown files:\n\n```\nagents/my-agent/\n├── agent.md       ← Identity: name, description, system prompt\n├── config.md      ← Runtime: model, timeout, permissions\n├── SKILLS.md      ← Agent-specific skills\n├── CONTEXT.md     ← Project context\n└── HEARTBEAT.md   ← Autonomous periodic run instruction (optional)\n```\n\n**What you can configure:**\n\n| Setting | Description |\n|---------|-------------|\n| **Name & Description** | Identity shown in the dashboard |\n| **Avatar** | Lucide icon picker (1,400+ icons) or emoji |\n| **System Prompt** | Core instructions that define the agent's behavior |\n| **Model** | Backend-aware picker — Claude aliases (`opus`/`sonnet`/`haiku`/`fable`), pinned IDs, Bedrock/Vertex/Foundry, or Codex slugs; free-text for anything else |\n| **Adapter** | Claude Code, OpenAI Codex, or Pi — set per agent |\n| **Effort** | Low / Medium / High / Extra High / Max / Ultracode. Codex maps unsupported levels safely and reports the fallback once |\n| **Working Directory** | Where the agent operates (defaults to vault root) |\n| **Timeout** | Max execution time in seconds |\n| **Permission Mode** | bypassPermissions, dontAsk, acceptEdits, auto, or plan |\n| **Spend / Turn Limits** | Optional per-run guard overriding fleet defaults; blank inherits and `0` explicitly opts out |\n| **Subagent Output** | Opt-in Claude subagent transcript forwarding, reconstructed and depth/size bounded in run logs |\n| **Allow/Deny Lists** | Fine-grained tool control (e.g., allow `Bash(curl *)`, deny `Bash(rm -rf *)`). Enforced on both backends — Claude Code natively, Codex via execpolicy command rules (see [Backends](#backends)) |\n| **Skills** | Shared skills from the skill library |\n| **MCP Servers** | Which MCP servers the agent can access |\n| **Memory** | Two-tier self-curating memory: `remember` tool / `[REMEMBER]` tags → working set + raw archive, with optional nightly reflection |\n| **Heartbeat** | Autonomous periodic run with schedule and instruction |\n\n**Permission Modes:**\n\n| Mode | Behavior |\n|------|----------|\n| `bypassPermissions` | Auto-runs everything except deny list |\n| `dontAsk` | Only allow-listed commands run |\n| `acceptEdits` | File edits auto-approved, bash blocked unless allowed |\n| `auto` | Claude classifies commands and asks only when risky; maps to Codex `workspace-write` |\n| `plan` | Read-only — no writes, no commands |\n\n---\n\n### Backends\n\nEach agent runs on one of three CLI backends, selected by the **Adapter** field in the agent editor:\n\n| | **Claude Code** (default) | **OpenAI Codex** |\n|---|---|---|\n| Engine | `@anthropic-ai/claude-code` | `@openai/codex` (`codex exec`) |\n| Auth | Claude Max/Pro subscription or Anthropic API key | ChatGPT Plus/Pro plan or OpenAI API key |\n| Models | `opus` / `sonnet` / `haiku` / `fable` aliases, pinned IDs, Bedrock/Vertex/Foundry | GPT-5.6 tiers (e.g. `gpt-5.6-terra`) + free-text |\n| Permission rules | Native — `.claude/settings.local.json` | execpolicy command rules via per-agent `CODEX_HOME` overlay |\n| File/network sandbox | Permission Mode | Permission Mode (`workspace-write` / `read-only`); `codex exec` forces approval policy `never` |\n| MCP servers | Fleet registry (`_fleet/mcp/`), projected via `--mcp-config` | Fleet registry (`_fleet/mcp/`), projected via `-c mcp_servers.*` |\n| Spend / turn limits | Enforced by `--max-budget-usd` / `--max-turns` | Recorded for audit only; Codex exposes neither limit |\n| Structured task output | Inline `--json-schema`; validated JSON read from `structured_output` | Temporary `--output-schema` file; final JSON parsed from the agent message |\n\nEverything else — chat, tasks, heartbeat, Slack/Telegram channels, memory, run logs, model picker — works identically on every backend. The picker switches its alias list based on the selected adapter; free-text remains the escape hatch for any model ID.\n\n**The third backend: Pi.** [Pi](https://github.com/earendil-works/pi) is an open-source multi-provider harness — one engine that can run **both Anthropic and OpenAI models** (plus more via API keys). Selecting `pi` as an agent's adapter changes the model picker into a live dual-vendor list discovered from `pi --list-models`: the listing is credential-gated, so it shows exactly the models your connected providers expose. How Pi maps onto the fleet contract:\n\n- **Chat** runs over Pi's RPC protocol with one persistent process per session — messages sent mid-turn *steer* the current run instead of waiting, a capability neither other backend has.\n- **Permission rules**: Pi ships no permission system, so your `Bash(...)` deny rules are compiled into a generated gate extension loaded per run (same rule shapes — and the same dropped patterns — as the Codex execpolicy translation). The gate matches the command **string** (quote-stripped, any position), not the argv of spawned processes like execpolicy does — it catches `sudo rm -rf` and `true && rm -rf` but determined quoting tricks can slip through, so treat deny rules on Pi as guardrails, not a security boundary. Permission Mode maps to tool sets: **Read Only** restricts the agent to read-only tools; everything else runs with full tools plus the gate.\n- **Structured output** uses a generated terminating-tool extension carrying the task's JSON schema (fail-closed: a schema run with no structured result fails rather than returning prose).\n- **MCP** requires the community [`pi-mcp-adapter`](https://github.com/nicobailon/pi-mcp-adapter) package (`pi install npm:pi-mcp-adapter`); the fleet registry is projected via a per-run config overlay, tokens delivered by env, never on disk.\n- **Costs** are Pi's catalog-priced estimates (close, but not provider-billed figures). Spend/turn limits are recorded for audit only, like Codex.\n\n> **Billing note:** with a Claude Pro/Max subscription connected to Pi, Anthropic bills usage per token from your *extra usage* balance — it does **not** draw from plan limits the way the first-party Claude Code backend does. OpenAI's ChatGPT-subscription path is officially endorsed for Pi. Prefer the `claude-code` adapter for Anthropic-on-subscription agents; use Pi to reach OpenAI models, API-key providers, or both vendors from one agent roster.\n\n**How Codex permission rules work.** Your `Bash(...)` allow/deny rules are translated into Codex *execpolicy* rules and injected through a per-agent `CODEX_HOME` overlay (the agent's `~/.codex` with auth/config/sessions symlinked through, but its own rules directory). This enforcement is **lossy by design** and degrades safely:\n\n- Only command-prefix patterns translate — `Bash(git push *)` → deny `git push …`. **Tool-name rules** (`Read`/`Write`/`Edit`) and **mid-pattern wildcards** (`Bash(* --force)`) are dropped; file/network access is governed by the **Permission Mode** sandbox instead.\n- There's no closed allow-list — Codex `allow` rules are additive, so \"only the allow-list runs\" (Claude's `dontAsk`) is **not** reproducible; the sandbox is the real boundary.\n- Requires a Codex build with execpolicy support. If it's missing (or `~/.codex` isn't set up, or symlinks are unavailable), the agent **falls back to sandbox-only enforcement** with a one-time console warning — the run never breaks.\n\n> Codex reports no per-run dollar cost and exposes no spend/turn cap, so `cost_usd` is blank and configured limits are audit-only on Codex runs. Compact/rate-limit telemetry is Claude-only.\n\n> Claude checks `--max-budget-usd` between API turns. A response already in flight can take the final cost above the configured threshold; the setting is a stop guard, not a prepaid hard ceiling. Agent Fleet records that terminal event as **stopped**, not failed.\n\n---\n\n### Heartbeat\n\nA heartbeat gives an agent autonomous behavior — what it does when no one is asking. Think periodic monitoring, daily reports, health checks, or trend analysis.\n\n**Setup:** Create a `HEARTBEAT.md` file in the agent's folder, or configure it in the dashboard's agent edit page:\n\n```yaml\n---\nenabled: true\nschedule: \"0 */6 * * *\"     # every 6 hours\nnotify: true                 # Obsidian notice on completion\nchannel: my-slack            # post results to a channel (optional)\nchannel_target: C0123456789  # a specific Slack/Discord channel id or Telegram chat id (optional)\n---\n\nCheck all monitored endpoints for availability and response time.\nCompare with previous checks using your memory. Report anomalies.\nIf everything is healthy, respond with a one-line \"all clear\".\n```\n\n**Key behaviors:**\n- The **\"Run Now\" button** on any agent with a heartbeat uses the heartbeat instruction (no more generic fallback)\n- **Agent memory integration** — heartbeats can use `[REMEMBER]` tags to track trends across runs\n- **Channel delivery** — results automatically posted to a configured Slack, Telegram, or Discord channel; set `channel_target` to route to one specific channel/chat rather than the channel's default\n- **Dashboard** — heartbeat status shown on the agent's Overview tab with enable/disable toggle, schedule, and next run time\n\n---\n\n### Slack Channels\n\nChat with your agents from Slack — every message flows through the same chat-session pipeline as the in-app panel (Claude Code or Codex), with full tool use, session persistence, and agent memory.\n\n> **📖 [Step-by-step Slack setup guide →](SLACK_SETUP.md)** — complete walkthrough from creating the Slack app to sending your first message.\n\n**Quick overview:**\n1. Create a Slack app at [api.slack.com](https://api.slack.com/apps) with Socket Mode + Agents & AI Apps enabled\n2. Add credentials in Settings → Agent Fleet → Channel Credentials\n3. Create a channel via the dashboard or as `_fleet/channels/my-slack.md`\n4. DM the bot from Slack\n\n```yaml\n---\nname: my-slack\ntype: slack\ndefault_agent: fleet-orchestrator\nallowed_agents:\n  - fleet-orchestrator\n  - site-monitor\n  - code-reviewer\nenabled: true\ncredential_ref: my-slack-creds\nallowed_users:\n  - U0AQW6P37N1\nper_user_sessions: true\nchannel_context: |\n  You are being contacted via Slack. Keep replies concise.\n---\n```\n\n**Features:**\n- **Socket Mode** — outbound WebSocket, works behind NAT/firewalls, no public URL needed\n- **Slack Assistants API** — native \"is thinking...\" indicator, threaded conversations, thread titles\n- **Multi-agent routing** — type `@agent-name: message` to switch agents mid-thread. Each agent gets its own isolated session. `/agents` slash command lists available agents.\n- **Session persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)\n- **Idle hibernation** — subprocess eviction after configurable idle time, transparent resume on next message\n- **Allowlist** — only approved Slack users (by user ID) can reach the bot\n- **Rate limiting** — per-conversation sliding window to prevent budget burn\n- **Markdown → mrkdwn** — automatic formatting conversion with fence-aware chunking for long replies\n\n**Important:** Obsidian must be running for channels to work. When Obsidian is closed, the bot goes offline.\n\n---\n\n### Telegram\n\nChat with your agents from Telegram — simpler setup than Slack, no @mention required in DMs.\n\n**Setup:**\n1. Create a bot via [@BotFather](https://t.me/botfather) — `/newbot`, pick a name and username, copy the token\n2. Add the token in Settings → Agent Fleet → Channel Credentials (type: Telegram)\n3. Create a channel via the dashboard or as `_fleet/channels/my-telegram.md`\n4. Message the bot in Telegram\n\n**Features:**\n- **Zero dependencies** — long-poll via HTTPS, no WebSocket, no SDK\n- **Typing indicator** — `typing...` dots while the agent works (auto-refreshed every 4.5s)\n- **Inline keyboard agent picker** — `/agents` command shows interactive buttons to switch agents\n- **Slash command autocomplete** — commands registered automatically via `setMyCommands`\n- **Agent name prefix** — replies show `[agent-name]` when multiple agents are configured\n- **Group chat support** — add the bot to groups (disable privacy mode via BotFather for full access)\n- **Forum topics** — enable Threaded Mode in BotFather for topic-based conversations\n- **Session persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)\n- **4096-char message splitting** — long replies automatically chunked at paragraph boundaries\n\n---\n\n### Discord\n\nChat with your agents from Discord — in servers, channels, threads, or DMs.\n\n> **📖 [Step-by-step Discord setup guide →](DISCORD_SETUP.md)** — complete walkthrough from creating the Discord app to sending your first message.\n\n**Setup:**\n1. Create an application at [discord.com/developers](https://discord.com/developers/applications), add a bot, and copy its token\n2. **Enable the Message Content privileged intent** (required to read messages)\n3. Invite the bot with the `bot` + `applications.commands` scopes\n4. Add the token in Settings → Agent Fleet → Channel Credentials (type: Discord)\n5. Create a channel via the dashboard or as `_fleet/channels/my-discord.md`\n6. Mention or DM the bot in Discord\n\n**Features:**\n- **Gateway over WebSocket** — outbound connection, works behind NAT/firewalls, no public URL; hand-rolled over `ws`, no `discord.js` dependency\n- **Servers, threads & DMs** — every channel or thread is an isolated conversation with its own agent binding\n- **Typing indicator** — native typing dots while the agent works (auto-refreshed)\n- **Button agent picker** — the `/agents` slash command shows interactive buttons to switch agents; `@agent-name` prefix routing also works\n- **Image attachments** — images are downloaded into your vault and passed to the agent\n- **Session persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)\n- **Allowlist** — only approved Discord users (by numeric ID) can reach the bot\n- **2000-char message splitting** — long replies automatically chunked at paragraph boundaries\n- **Auto-reconnect & resume** — Gateway RESUME on transient drops with exponential backoff\n\n---\n\n### Interactive Chat\n\nThe chat panel is a first-class Obsidian view — dock it in the sidebar, center, or any split.\n\n**Features:**\n- **Agent Switcher** — dropdown to switch between agents instantly. Each agent has its own conversation.\n- **Session Persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)\n- **Enter to send** — Enter sends your message, Shift+Enter inserts a newline (IME-safe, so composing in other languages won't fire early).\n- **Bidirectional Streaming** — send follow-up messages while the agent is working. Steer it mid-task.\n- **Document Attachment** — click + to attach the active document. Agent gets the full content; you see a compact pill.\n- **Image Paste & Drop** — paste from clipboard or drag images into chat. Saved to vault, passed to the agent.\n- **Stop Button** — + button becomes ■ while agent works. Click to abort.\n- **Streaming Markdown** — responses render in real-time with syntax highlighting\n- **Code Block Copy** — hover any code block for a copy button\n- **Tool Activity** — see which tools the agent is using in real-time\n\n---\n\n### Task Board\n\nA kanban view for managing agent tasks with five columns:\n\n| Column | Description |\n|--------|-------------|\n| **Backlog** | Tasks with no schedule, waiting to be run manually |\n| **Scheduled** | Tasks with a cron schedule, enabled and waiting |\n| **Running** | Currently executing — shows real-time progress bar tied to timeout |\n| **Done** | Completed today |\n| **Failed** | Failed, timed out, or cancelled today |\n\n**Task features:**\n- **Priority** — low / medium / high / critical (color-coded left border)\n- **Real-time Progress** — progress bar shows elapsed time vs timeout, updates every second\n- **Stop Button** — red ■ on running cards to abort (shows as \"Cancelled\", not \"Failed\")\n- **Cron Scheduling** — human-friendly picker (daily, weekdays, weekly, monthly, custom)\n- **Catch Up If Missed** — auto-run overdue tasks when Obsidian opens\n- **Run Now** — execute any task immediately regardless of schedule\n- **Channel delivery** — post a task's full output to a channel via `channel:` (broadcast or DM) and optionally `channel_target:` (a specific Slack/Discord channel id or Telegram chat id); works on every transport\n- **Spend and turn limits** — override the agent/fleet guard per task; blank inherits and `0` explicitly opts out\n- **Structured output** — provide `output_schema` as JSON Schema; validated JSON is stored under `structured_output` in the run note frontmatter for file-based workflows\n- **Drag & Drop** — move tasks between backlog and scheduled columns\n\n---\n\n### MCP Servers\n\nRegister an MCP server **once** and it works for **any** agent on **either** adapter (Claude Code or Codex). Servers are a fleet-owned registry — one markdown file per server under `_fleet/mcp/<name>.md` — and are *projected* into each run at spawn time (Claude via `--mcp-config`, Codex via `-c mcp_servers.*`). Your native `~/.claude.json` and `~/.codex/config.toml` are **read-only**; Agent Fleet never modifies them.\n\n**One-time import.** On first load, your existing Claude and Codex MCP servers are imported into the registry (a server configured in both becomes one entry, marked `imported`), and any bearer tokens found are moved into your OS keychain. Idempotent.\n\n**Add Server UI:**\n- Click **\"Add Server\"** on the MCP page to open the form\n- **stdio** — command, arguments, environment variables\n- **HTTP / SSE** — URL, custom headers, and authentication: none, a static **bearer token** (stored in the keychain), or **OAuth** (authenticate after saving)\n- Servers are written to `_fleet/mcp/`; secrets never touch the vault\n\n**Server Management:**\n- Enable/disable toggle per server (writes the registry file's frontmatter)\n- Per-server **\"Probe tools\"** action — stdio servers are spawned and probed via JSON-RPC; HTTP/SSE servers are probed with the stored token\n- Detail slideover with transport, auth state, and the discovered tool list\n- **Remove Server** trashes the registry file and clears any stored token\n- Grant servers to specific agents in the agent editor — leave an agent's list empty to grant every enabled server\n\n**OAuth 2.1 Authentication:**\n\nOne-click browser-based auth, projected to both backends:\n1. Click \"Authenticate\" on any HTTP/SSE server card\n2. Plugin discovers OAuth endpoints automatically and registers via Dynamic Client Registration (PKCE flow)\n3. Opens browser for approval\n4. Tokens stored securely in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)\n5. The token is projected into each run — to Claude as an `Authorization` header, to Codex via `bearer_token_env_var` (passed through the spawn environment, never written to argv or any config file)\n6. Background token refresh — expiring tokens are refreshed automatically, and the next run picks up the fresh token\n\n---\n\n### Skills\n\nReusable instruction sets that agents share. Each skill is a folder:\n\n```\nskills/my-skill/\n├── skill.md          ← Core instructions\n├── tools.md          ← CLI/API tool documentation\n├── references.md     ← Background docs\n└── examples.md       ← Few-shot examples\n```\n\n**22 Built-in Skills:**\n\n| Skill | Description |\n|-------|-------------|\n| `agent-fleet-system` | Full knowledge of the Agent Fleet plugin |\n| `algorithmic-art` | Generative art with p5.js |\n| `canvas-design` | Visual art, posters, static designs as PNG/PDF |\n| `claude-api` | Build apps with the Claude API and Anthropic SDKs |\n| `doc-coauthoring` | Structured co-authoring workflow for documentation |\n| `docx` | Create, read, edit Word (.docx) files |\n| `frontend-design` | Production-grade web UIs and components |\n| `internal-comms` | Status reports, newsletters, incident reports |\n| `mcp-builder` | Build MCP servers for LLM-to-service integration |\n| `pdf` | Read, create, merge, split, OCR PDF files |\n| `pptx` | Create, read, edit PowerPoint (.pptx) files |\n| `skill-creator` | Create, evaluate, and optimize skills |\n| `slack-gif-creator` | Animated GIFs optimized for Slack |\n| `taste-skill` | Senior UI/UX engineering for frontend design |\n| `theme-factory` | Apply visual themes (colors, fonts) to slides, docs, HTML |\n| `web-artifacts-builder` | Multi-component HTML artifacts with React, Tailwind, shadcn/ui |\n| `webapp-testing` | Test local web apps with Playwright — UI checks, screenshots |\n| `xlsx` | Create, read, edit spreadsheets (.xlsx, .csv, .tsv) |\n| `wiki-ingest` | Ingest sources into a scoped Wiki Keeper wiki |\n| `wiki-query` | Answer a question strictly from wiki content |\n| `wiki-refresh` | Regenerate topic-page `## Summary` blocks from claim history |\n| `wiki-lint` | Weekly Wiki Keeper health check (orphans, stale pages, missing links) |\n\n---\n\n### Dashboard\n\nThe main overview with:\n\n- **Stat Cards** — active agents, runs today, tokens used (with cost), scheduled tasks\n- **Run Activity Chart** — 14-day bar chart with green (success), yellow (cancelled), red (failure)\n- **Success Rate Donut** — overall success percentage\n- **Active Agent Cards** — fixed-height streaming output from running agents with agent→task title\n- **Activity Timeline** — recent runs with status, duration, tokens\n- **Fleet Status** — agent list with quick-run capability\n\n**Sidebar navigation:**\n- Dashboard / Agents / Tasks Board / Run History / Approvals / Skills / MCP Servers / Channels\n\n**Agent detail page tabs:**\n- Overview (stats, heartbeat status, skills, permissions, recent runs)\n- Config (all settings, system prompt, heartbeat instruction)\n- Runs (full history for this agent)\n- Memory (learned context)\n\n---\n\n### Agent Memory\n\nA two-tier, self-curating memory that works on **task, heartbeat, and chat** runs and on **both Claude Code and Codex** backends. Per agent, under `_fleet/memory/<agent>/`:\n\n- **`working.md`** — curated, **token-budgeted** memory (`memory_token_budget`, default 1500) injected into every run, organized into Preferences (pinned) / Procedures / Observations / Recent.\n- **`raw/<date>.md`** — append-only ground-truth log of everything captured (never injected), so summaries can always be re-derived.\n\n**How an agent records something** (two channels, same sink):\n1. The **`remember` tool** — `remember(fact, pin?, section?)`, auto-enabled for memory agents (preferred, structured).\n2. The **`[REMEMBER] … [/REMEMBER]`** text tag as a fallback (`[REMEMBER:pin]` for standing preferences).\n\nCaptures land in `working.md` immediately, so the next run/turn sees them. Memory is agent-scoped (shared across all conversations, including channels).\n\n**Reflection (\"dreaming\")** — enable `reflection_enabled` and a nightly run (`reflection_schedule`, default `0 3 * * *`) consolidates memory from the raw log: dedups, resolves contradictions, summarizes from ground truth to fit the budget, and keeps pinned preferences. With `reflection_propose_skills`, recurring friction becomes an approval-gated **skill proposal** in the Inbox. A failed reflection never wipes memory. Trigger manually with **Reflect now** on the agent. Reflection runs **visibly** — it shows live in the dashboard's Active Agents card and writes a run log to Recent Activity with its full output, so you can see exactly what it consolidated.\n\n> Legacy single-file memory (`_fleet/memory/<agent>.md`) is migrated automatically. `memory_max_entries` is superseded by `memory_token_budget`.\n\n---\n\n### Run History\n\nEvery execution is logged in `_fleet/runs/YYYY-MM-DD/`:\n\n```yaml\n---\nrun_id: abc123\nagent: fleet-orchestrator\ntask: daily-report\nstatus: success\nstarted: 2026-04-03T09:00:00\ncompleted: 2026-04-03T09:02:30\nduration_seconds: 150\ntokens_used: 4500\ncost_usd: 0.07\nmodel: claude-opus-4-8\ntags: [heartbeat]\n---\n\n## Prompt\n...\n\n## Output\n...\n\n## Tools Used\n...\n```\n\nClick any run in the dashboard to see full details in a slideover panel.\n\n---\n\n## Configuration\n\n### Plugin Settings\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| Fleet Folder | `_fleet` | Root folder for all fleet data |\n| Claude CLI Path | `claude` | Path to the Claude Code CLI |\n| Codex CLI Path | `codex` | Path to the OpenAI Codex CLI (used by `codex` agents) |\n| Default Model | `default` | Default model for new agents. Pick Default / Alias (opus/sonnet/haiku/fable) / Custom (manual ID for Bedrock/Vertex/etc.) |\n| AWS Region | `us-east-1` | For AWS Bedrock model support |\n| Max Concurrent Runs | `2` | Parallel task execution limit |\n| Spend Limit per Run | `0` | Fleet-wide Claude dollar stop threshold; checked between API turns, so cost can overshoot. `0` disables it |\n| Turn Limit per Run | `0` | Fleet-wide Claude agentic-turn cap; `0` disables it. Agents/tasks can override |\n| Strict Claude Network Allowlist | `false` | Project `sandbox.network.strictAllowlist` into Claude run settings |\n| Disable Claude Filesystem Sandbox | `false` | Project `sandbox.filesystem.disabled` into Claude run settings |\n| Run Log Retention | `30` days | Auto-cleanup old logs |\n| Catch Up Missed Tasks | `true` | Run overdue tasks on startup |\n| Notification Level | `all` | `all`, `failures-only`, `none` |\n| Status Bar | `true` | Show the fleet status indicator in Obsidian's status bar |\n| Chat Watchdog Timeout | `10` min | Kill a chat turn after this much silence from the CLI |\n\n### Security\n\nAll secrets — MCP OAuth/bearer tokens and channel credentials (Slack/Telegram) — are stored in your OS keychain via Obsidian's SecretStorage API, never in the vault or in your native `~/.claude.json` / `~/.codex/config.toml`. Existing plaintext credentials are migrated from `data.json` to the keychain automatically on first load and the plaintext copies are cleared.\n\nKeychain storage uses Obsidian's SecretStorage API (Obsidian 1.11.4+, the minimum supported version).\n\n### Channel Settings\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| Max Concurrent Sessions | `5` | Live agent chat sessions across all channels |\n| Idle Timeout | `15` min | Hibernate sessions after inactivity |\n| Rate Limit | `20` msgs / `5` min | Per-conversation sliding window |\n\n### File Structure\n\nAll data lives in `_fleet/` as plain markdown:\n\n```\n_fleet/\n├── agents/           Agent folders (agent.md, config.md, HEARTBEAT.md, etc.)\n├── skills/           Shared skill folders (skill.md, tools.md, etc.)\n├── tasks/            Task files with frontmatter\n├── channels/         Channel bindings (Slack, Telegram, Discord)\n├── mcp/              Registered MCP servers (one markdown file each)\n├── runs/             Execution logs by date\n│   └── YYYY-MM-DD/\n├── memory/           Per-agent memory (working.md + raw/ archive)\n└── chat-images/      Images pasted into chat\n```\n\nEverything is searchable, version-controllable, and fully yours.\n\n---\n\n## FAQ\n\n**Q: Do I need an API key?**\nNot necessarily. Agent Fleet works with your **Claude Max or Pro subscription** via Claude Code CLI. No separate API key or billing. If you prefer, you can also use an Anthropic API key directly.\n\n**Q: Can I use OpenAI Codex instead of Claude?**\nYes. Set an agent's **Adapter** to `OpenAI Codex` and it runs on the `@openai/codex` CLI (ChatGPT plan or OpenAI API key) instead of Claude Code. You can mix freely — some agents on Claude, others on Codex — in the same fleet. Chat, tasks, heartbeat, channels, and memory all work the same. See [Backends](#backends) for the per-backend differences (notably how command permission rules are enforced and that Codex runs report no dollar cost).\n\n**Q: Does it work without internet?**\nNo — agents need their CLI backend (Claude Code or OpenAI Codex) to reach its API. But all your data (agents, tasks, skills, memory) is local markdown.\n\n**Q: Can I use different models per agent or per task?**\nYes. Each agent has its own model setting, and you can override it per task (e.g. keep the agent on Opus but run a simple nightly summary task on Haiku to cut cost). Supports Anthropic direct, AWS Bedrock, Google Vertex, Foundry, and Mantle. Claude aliases `opus` / `sonnet` / `haiku` / `fable` cover the Claude backend; Codex agents use Codex slugs (a Claude-shaped default is ignored on Codex and vice-versa). Resolution order: task → agent → settings → the backend's own CLI default.\n\n**Q: What happens if I delete the plugin?**\nYour `_fleet/` folder stays. All agents, tasks, skills, run logs, and memory are plain markdown files in your vault.\n\n**Q: Can multiple agents run at the same time?**\nYes, up to `maxConcurrentRuns` (default 2). Additional tasks queue until a slot opens.\n\n**Q: Does the chat remember previous conversations?**\nYes. Each agent has persistent chat sessions that survive Obsidian restarts via the backend's session resume (Claude `--resume` / Codex `exec resume`).\n\n**Q: Does the Slack bot work when Obsidian is closed?**\nNo. The bot runs inside Obsidian via Socket Mode — when Obsidian is closed, the bot goes offline. Slack buffers messages briefly during short disconnects.\n\n**Q: Can I use multiple agents in Slack, Telegram, or Discord?**\nYes. Type `@agent-name: message` to switch agents, or use `/agents` to get interactive buttons. Each agent maintains its own session. Works in all three transports.\n\n**Q: Which is easier to set up — Slack or Telegram?**\nTelegram. Create a bot via @BotFather (30 seconds), paste the token, create a channel. Slack requires creating an app with Socket Mode, scopes, events, and reinstalls after scope changes.\n\n**Q: What is a heartbeat?**\nAn autonomous periodic run — what an agent does on a schedule without user input. Configured via `HEARTBEAT.md` in the agent's folder. Results can be posted to Slack, Telegram, or Discord automatically — to the channel default or a specific channel/chat via `channel_target`.\n\n---\n\n## Links\n\n- [Website](https://afleet.md)\n- [Obsidian Plugin Directory](https://obsidian.md/plugins?id=agent-fleet)\n- [Slack Setup Guide](SLACK_SETUP.md)\n- [Discord Setup Guide](DISCORD_SETUP.md)\n- [Releases](https://github.com/denberek/obsidian-agent-fleet/releases)\n- [npm package](https://www.npmjs.com/package/obsidian-agent-fleet)\n- [Report Issues](https://github.com/denberek/obsidian-agent-fleet/issues)\n\n---\n\nMIT License — © 2026 Denis Berekchiyan\n","readmeFilename":"README.md"}