{"_id":"@armstrongnate/april","_rev":"15-81d398c25a2fd14af15457e8b1d3ab05","name":"@armstrongnate/april","dist-tags":{"latest":"0.2.3"},"versions":{"0.0.1":{"name":"@armstrongnate/april","version":"0.0.1","_id":"@armstrongnate/april@0.0.1","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"d8daae64b26c64994be6b45c7c2bfdf68eda7652","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.1.tgz","fileCount":19,"integrity":"sha512-Lgnv0twEklKoHW7rLtym+HTRjThN9OJ42bSRl5i3Hs/ERuF5TteBc9D9vW+eVnkeYgdLw5b5jX0Oe5GxfQtfQg==","signatures":[{"sig":"MEUCIQCUJSvX3ikmALslnYKPFr4SdmycZjOK8EiXvl3lF+F0NwIgd2BraxWE6I4Dn5JxAtXUhPMfcaaMp7cKmMFz8RDffxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51474},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"9dd6ecbee4f19449b8de9525c58502950fb5ae51","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.1_1777169607233_0.5905051779553894","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@armstrongnate/april","version":"0.0.2","_id":"@armstrongnate/april@0.0.2","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"81e1b701fb2a49e0d67010c0afcb03ebbf428445","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.2.tgz","fileCount":21,"integrity":"sha512-xi05zkJeaO2d5CV7d+mmN9Sz5ypDjS0pNbeRsHIKbIPo8PGNDsa7B57yX/s+MQzOSPfA7g1DKT97kdUkSgDdOw==","signatures":[{"sig":"MEYCIQDBsL9kku1ufTjGvptGn7POaGIcE2rcSm+Uh4YAT7KXYwIhAOsbaBChLLaPFuaIuXBTLZHFCoSYj+QnOgZ4Zk79LGK6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56444},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"9dd6ecbee4f19449b8de9525c58502950fb5ae51","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.2_1777171389100_0.5029888227932942","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@armstrongnate/april","version":"0.0.3","_id":"@armstrongnate/april@0.0.3","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"a24601b31e91881d49149b74ee64814eea9c577e","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.3.tgz","fileCount":22,"integrity":"sha512-qUXxO9WmMwrgsaMLm00HO7y1lDPR82nIYARJEQTBnnVG82NSzTzUZLaprwJ19UzI/bBkxxPCDoYxSIHJ/1z/7w==","signatures":[{"sig":"MEUCIQC7eTTrCq/y2pS3C2ZQIFtrcNXEPzlDGWGQKDq4NA4HXAIgKW7V1+2YXKo8rg2PnJLMJ00oSCfdd3PJ6uD3aDZWmeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65378},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"9dd6ecbee4f19449b8de9525c58502950fb5ae51","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.3_1777207066043_0.453884914238867","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@armstrongnate/april","version":"0.0.4","_id":"@armstrongnate/april@0.0.4","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"c87acffe81615bf1441541795a7ff1269f6eab14","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.4.tgz","fileCount":22,"integrity":"sha512-cUpXl/7eTg2u/q8ClTWjKekW8tGns5rasEbiDwY5anCaT9vujGm8QzGZb0AFVVJNwYS3+wU4kRtdv66/b+KE3Q==","signatures":[{"sig":"MEYCIQDiCUTaqvF1WBKW2275D3E4cYLJsIgMsWIVyYqLK4lffgIhAPVm0ukYCpvbsOaPiCn+a0jATXDfioTYx/YwlACAb34Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65362},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"9899433c2fb189bc79ed595e6a96cbc7bb02fd53","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.4_1777207320050_0.4965138363267567","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@armstrongnate/april","version":"0.0.7","_id":"@armstrongnate/april@0.0.7","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"9b0bc2fa80d3c16a9847e47be04ddbf53850a66c","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.7.tgz","fileCount":24,"integrity":"sha512-fTDphCcRMk3GSU57P2g4AZ2EGVHxSMEM9Tn+3Dhd8BPanZxgqExZBZ6edzkq4YbGunv6k+aTIsxOJfjnaK2WDA==","signatures":[{"sig":"MEUCIQD74GStVehsHbEUaIgj30drX4AQ6lcJIYAg/oZRe0bSpAIgBh4ke3S0BZA5RrfECyYfOshqDlcTJEBMXEvS/ZgS69c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69585},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"2281ecb9fe521d45f7a690da8467ee85d5b78eb7","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.7_1777207978931_0.6558788312925796","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@armstrongnate/april","version":"0.0.8","_id":"@armstrongnate/april@0.0.8","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"ad13d679a41a4a4ec2f82afc0eeb9054d2044b89","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.0.8.tgz","fileCount":24,"integrity":"sha512-eyoXOCaFXQgRxniGMMGLHxyY4B1WJmz94HUebkzMVKrxffFjRVVt/nJq/JRoc1ZBdV1JE/gtICgpegZrAWvD7w==","signatures":[{"sig":"MEYCIQDSHBSxRJGSGh/ry0riwsF6XbF9hYBLoK5wWtmTwB1gWgIhAO01B6qJn7HZ/VHdA1tWozrWOkE/AA1lhMAckt0XO/T7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70633},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"ea5e8d880419dd3ba48b57fa4dd4e9f6868ee89f","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.0.8_1777208465454_0.8438039951422855","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@armstrongnate/april","version":"0.1.0","_id":"@armstrongnate/april@0.1.0","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"9105f1c18ce4a8abe3feec389039393e20cd95b4","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.1.0.tgz","fileCount":25,"integrity":"sha512-xomAsIr6v0wtP48gm1Jwq36xx9A0hkBjspDq5ugu4sUV999Cqs5Byt3DqCYktqLS7UUUFNsiCIRDPAW5aw5w+w==","signatures":[{"sig":"MEUCIH1q/m36/hUQEXAc/koBYKmsVtAEccx8sfvU2b56v+HWAiEAm7o1Uw3vO+YH/ENB+JOmnhc9XpppldAYreaTXA+BeFM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76313},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"95f43d0910d3bbff10e521d17b10594a8e659820","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"10.8.2","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.1.0_1778871914433_0.8928552791685376","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@armstrongnate/april","version":"0.1.1","_id":"@armstrongnate/april@0.1.1","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"753830c00c90ef8d69d2e361742199f34204fdfb","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.1.1.tgz","fileCount":25,"integrity":"sha512-fgaIZQZYu0MmaE87omgptxjqRb4xAUnHHcX4khiIfP8JVUi34P2d1MiFpBIBj1a3IFyp2yhCj4wNpqZTYlwJ+w==","signatures":[{"sig":"MEYCIQDLbV0DguGtE1aAqq8l8NsqaD4ul8xEpoBzgO38vTSz6wIhAO8biw6I9EQKtBGNZmdvhtDIEfd3V8G5y8QDNyTwllAe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79078},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"663301ca72422d9d5d1caead15620164b67efb5e","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.1.1_1778985682561_0.21780476437059426","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@armstrongnate/april","version":"0.1.2","_id":"@armstrongnate/april@0.1.2","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"38c45ff68c1d2289b5d73af1d3c7812dd651d2a7","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.1.2.tgz","fileCount":25,"integrity":"sha512-32ivSH43ufDNJn0gekCszGWQcR5aupYEcPPhqI+kKjXZYNR7oUkPJ8G1bOIl+nfKfQtHCuP+yy4dUESk4MPFUg==","signatures":[{"sig":"MEUCIAFX8viRPqGvd01MRwrfbc7P756yVNBvqMyjZ7MZ7Ld7AiEA8q+xbP4faEeU4VtJD5UTlDsILUxIzcbUHQx4bzfzx+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79499},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"33bea09b94349f64b6d09de6600f0325ce26cfbe","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.1.2_1781033227037_0.05734372267127075","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@armstrongnate/april","version":"0.1.3","_id":"@armstrongnate/april@0.1.3","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"6a0a4e0f2e4f341c7ba397c1fe96c34ca0f4ce5b","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.1.3.tgz","fileCount":30,"integrity":"sha512-doSuxisGrllfBu7fD8QjMUikKkZQi7CoWr7/lmG4Fas/8Y11zgZgjrUHaWpL5QmH5FcdvYLIJsq8HuWF9hH33w==","signatures":[{"sig":"MEUCIQCDjHUomRmR0g4lv4S7B4PMb2DT+5DUTYnfI9z+ACbDJwIgWCuuCI4tvhM3kaVDIAcY8Z99YG7A+p89/GJgFS2e0Jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91440},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"11ad93607987c22e8a7b5236052caa9d831c7b02","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.1.3_1781798319016_0.03987659241944019","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@armstrongnate/april","version":"0.1.4","_id":"@armstrongnate/april@0.1.4","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"b7a2c125a35b6e648f39a8e6f387b3aa0ec1e816","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.1.4.tgz","fileCount":30,"integrity":"sha512-oDdF/wJqpmRwFHfRo/L51noGOZVb4Vswb/kN6Sq08ZzMS6dXYnEcV97elyTFlzDnuclFtyp6BCFfOc/Ml5rAHA==","signatures":[{"sig":"MEYCIQCo9fO6saYyWaNNt/v+7/qjJeNcFt1ojuCDuUKdY1e0VwIhAPXaEa3C/HWtZaZAHLTJ+1Qz6Jjr2Xereql6YU5qnfZM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94713},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"c5c2261d5ed73bbb895010db2e55de54eac9d797","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.1.4_1782334423096_0.48681517251081363","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@armstrongnate/april","version":"0.2.0","_id":"@armstrongnate/april@0.2.0","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"e324560c27fb2858cca95829cb0892e44a4c1138","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.2.0.tgz","fileCount":41,"integrity":"sha512-URoaLMRfUgUFmlqAuEDbu1uNchn5jnJQdruz8TIKMoCllPDY6WvPRth7jWp6G4uTZlVYf5vzdltfsfhc6CeBhQ==","signatures":[{"sig":"MEQCIFOtJ14kyfCYBvOE/t+CdIxsZ4CsD/IGdDU4q4EcOP89AiB4T3CFOmAIyJbcp7ozk+C2sA6ZzIVdG/3D3EjFyJangg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137770},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"a7ea5837dd85dd9799725c573e898e363f59dc04","scripts":{"cli":"tsx src/cli.ts","dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.2.0_1782421862570_0.29155945874332745","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@armstrongnate/april","version":"0.2.1","_id":"@armstrongnate/april@0.2.1","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"89558eb652c7edb1cad491431c8d26ac300b2ddf","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.2.1.tgz","fileCount":41,"integrity":"sha512-dPw9YswumMaYNskF8fhz1y29vcP7k+WYmJlZgnl0zvA/bN3TSYmgbK1Empqd8VricUFWvnHxLnUDymM3ma1qkA==","signatures":[{"sig":"MEQCICXM6XkPQ6Ouo56+Pl29lx0codf1WNElqMZIdZAZX3gqAiBpwZVrEkhzPSU1pOc20QK7Rg4CHqjT66bw2DUTh/eB9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140808},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"dae46dcc1dac381c391ec67dd0f063e5fdf2c22d","scripts":{"cli":"tsx src/cli.ts","dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.2.1_1782491434008_0.4781979400634231","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@armstrongnate/april","version":"0.2.2","_id":"@armstrongnate/april@0.2.2","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"bin":{"april":"dist/cli.js"},"dist":{"shasum":"aee6601ec36944cc75e68a2382b3a8368b5eb744","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.2.2.tgz","fileCount":41,"integrity":"sha512-BGxd3hGUbdu54H4PqV3nlst9LP/KlEeGX3CT6/UomYMCUB8YKouIZvSldYGJUw7WW3Rl98frB4s88ofp41KGrg==","signatures":[{"sig":"MEUCIQCpsQXlABpDBFnbOwS/XDf93+oAAbu5q2sxjPaeChmeXAIgEosKrfkaEDFfa5exZvZQihFi4ZTyI1q7ISfYM/bpneE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142960},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"3343db664ca4f9ec80d443f514c6f2e4c01f4f5e","scripts":{"cli":"tsx src/cli.ts","dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"pnpm build"},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"_npmVersion":"11.9.0","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.8.3","fastify":"^5.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/april_0.2.2_1782510712638_0.39893803925009896","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@armstrongnate/april","version":"0.2.3","description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","type":"module","bin":{"april":"dist/cli.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","cli":"tsx src/cli.ts","start":"node dist/index.js","prepublishOnly":"pnpm build"},"engines":{"node":">=22.0.0"},"dependencies":{"fastify":"^5.8.4","yaml":"^2.8.3"},"devDependencies":{"@types/node":"^25.5.2","tsx":"^4.21.0","typescript":"^6.0.2"},"gitHead":"1f7d013b1bd71dcd0ba4b4d3e9e2f5afaffcb1da","_id":"@armstrongnate/april@0.2.3","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-oBoWNAoIEtSyB0nw9bQTia5vW2VQeeBRAJHzCITOa5Nw1C5UStNdn2Zp5PsapBcNHeyqyOQbMBFYtmVkB62yBQ==","shasum":"05c3da6517c6f04c66319589ce8f3196152cc1a9","tarball":"https://registry.npmjs.org/@armstrongnate/april/-/april-0.2.3.tgz","fileCount":41,"unpackedSize":146040,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDWM8hIZRHiIcVtVMiPE+N2nDfeg3eVkpIwZ9CHlfhk7AIgVuyA/BzTFyjXJX+DO9RxNkpLOZ0jF8f2K/nKyb8t/ms="}]},"_npmUser":{"name":"armstrongnate","email":"natearmstrong2@gmail.com"},"directories":{},"maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/april_0.2.3_1782512143557_0.6747373071507825"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-26T02:13:27.129Z","modified":"2026-06-26T22:15:43.847Z","0.0.1":"2026-04-26T02:13:27.387Z","0.0.2":"2026-04-26T02:43:09.295Z","0.0.3":"2026-04-26T12:37:46.186Z","0.0.4":"2026-04-26T12:42:00.185Z","0.0.7":"2026-04-26T12:52:59.109Z","0.0.8":"2026-04-26T13:01:05.666Z","0.1.0":"2026-05-15T19:05:14.590Z","0.1.1":"2026-05-17T02:41:22.688Z","0.1.2":"2026-06-09T19:27:07.157Z","0.1.3":"2026-06-18T15:58:39.169Z","0.1.4":"2026-06-24T20:53:43.243Z","0.2.0":"2026-06-25T21:11:02.762Z","0.2.1":"2026-06-26T16:30:34.155Z","0.2.2":"2026-06-26T21:51:52.796Z","0.2.3":"2026-06-26T22:15:43.766Z"},"description":"She does all the work so you don't have to. Watches GitHub issues and spawns coding-agent sessions (Claude Code or Codex) to work them.","maintainers":[{"name":"armstrongnate","email":"natearmstrong2@gmail.com"}],"readme":"# april\n\nShe does all the work so you don't have to, and with about the same level of enthusiasm.\n\napril watches for GitHub issues assigned to you with a specific label, then spins up a coding-agent session in a tmux window to work the issue end-to-end — from reading the issue to opening a PR. Supports [Claude Code](https://claude.ai/claude-code) and [OpenAI Codex CLI](https://developers.openai.com/codex/cli) — pick one per install via config.\n\n## Prerequisites\n\n- [Node.js](https://nodejs.org/) >= 22\n- [gh](https://cli.github.com/) (authenticated)\n- The [`gh-webhook` extension](https://github.com/cli/gh-webhook): `gh extension install cli/gh-webhook`\n- A session manager: [tmux](https://github.com/tmux/tmux) (default), or [herdr](https://herdr.dev) if you set `sessionManager: herdr` in config\n- One of: [Claude Code](https://claude.ai/claude-code) CLI, or [Codex](https://developers.openai.com/codex/cli) CLI\n\n## Quick install\n\n```bash\nnpm i -g @armstrongnate/april\napril init                         # writes ~/.config/april/config.yaml + skill + env file; checks prereqs\n$EDITOR ~/.config/april/config.yaml\napril install                      # registers the user service and starts it\napril logs -f\n```\n\n`april init` and the daemon both verify that the `cli/gh-webhook` extension is installed and refuse to proceed without it.\n\n## Server install (full playbook)\n\nThe minimal flow above leaves out auth setup and a few server-specific gotchas. This is the end-to-end recipe for a fresh Linux server.\n\n### 1. System prerequisites\n\n```bash\n# Install node 22+, tmux, gh, and your chosen agent CLI (claude or codex) via your usual route, then:\ngh extension install cli/gh-webhook\n```\n\n### 2. Create a Personal Access Token\n\nThe systemd user service runs in a stripped-down environment — no shell config, no keyring/DBus, no credential helpers. Whatever clever auth you have set up in your interactive shell almost certainly will not be available to the daemon. **You need an explicit token in the env file.**\n\nGenerate one on your GitHub host's web UI: Settings → Developer settings → Personal access tokens.\n\n**Classic PAT scopes:**\n- `repo` — issue read/write, label updates, PR creation, code access (no smaller scope works for private repo issues)\n- `admin:repo_hook` — needed for `gh webhook forward` to register and clean up its temporary `cli` webhook\n- `workflow` — only if the agent might modify `.github/workflows/*` files\n\n**Fine-grained PAT** (GHES 3.10+):\n- Repository access: select the repos\n- Permissions: Issues R/W, Pull requests R/W, Contents R/W, Webhooks R/W, Metadata R, Workflows R/W (last one optional)\n\nThe daemon's own needs are smaller (Issues R/W + Webhooks R/W + Metadata R), but the agent inherits the same env when it runs inside tmux, so the token has to cover both — see [Token inheritance](#token-inheritance) below.\n\n### 3. Install the package\n\n```bash\nnpm i -g @armstrongnate/april\napril init\n$EDITOR ~/.config/april/config.yaml\n```\n\n### 4. Configure auth in the env file\n\n```bash\n$EDITOR ~/.config/april/env\n```\n\nFor a **GitHub Enterprise Server** host:\n\n```\nGH_HOST=your.ghes.host\nGH_ENTERPRISE_TOKEN=ghp_...\n```\n\nFor **github.com**:\n\n```\nGH_TOKEN=ghp_...\n```\n\n`gh` is host-aware about which env var it reads: `GH_TOKEN` is github.com-only; `GH_ENTERPRISE_TOKEN` covers any other host (used together with `GH_HOST`). Setting `GH_TOKEN` while `GH_HOST` points elsewhere will silently fail.\n\n### 5. Install and start the service\n\n```bash\napril install\n```\n\nThis writes `~/.config/systemd/user/april.service`, enables it, and starts it. The unit references the env file via `EnvironmentFile=-~/.config/april/env`, so anything you put there flows through on each restart.\n\n### 6. Enable linger (Linux servers)\n\nsystemd user services stop when you log out unless linger is enabled. On any server you SSH out of:\n\n```bash\nsudo loginctl enable-linger $USER\n```\n\n`april install` warns you if it sees this is off.\n\n### 7. Verify\n\n```bash\napril status\napril logs -f\n```\n\nHealthy logs include `Starting webhook forwarder for <repo>` and no immediate errors. Then label an issue with `agent:todo` and watch it kick off.\n\n## Commands\n\n### Setup & service\n\n| Command | What it does |\n| --- | --- |\n| `april init` | Copies the bundled `config.example.yaml` to `~/.config/april/config.yaml` and the bundled skills (`issue-worker`, `issue-investigator`) to the configured agent's skill dir (`~/.claude/skills/` for claude, `~/.agents/skills/` for codex). **Only writes files that don't already exist** — never overwrites. |\n| `april install` | Installs and starts the user service. Pass `--print` to see the unit/plist without writing it. |\n| `april install-skill [-y]` | Install or refresh the bundled skills. Prompts before overwriting a changed copy; `--yes` skips the prompt (use in non-interactive scripts). |\n| `april upgrade [VER]` | Upgrade the npm package, regenerate the unit, restart the service, and reconcile the skills. |\n| `april uninstall` | Stops and removes the service. |\n| `april start` / `stop` / `restart` | Lifecycle. |\n| `april status` | Shows service status. |\n| `april logs -f [-n N]` | Streams logs. `-n` sets line count (default 100). |\n| `april daemon` | Runs the worker in the foreground (for debugging; the service uses `dist/index.js` directly). |\n\n### Runtime & work\n\nThese run **in-process** against the filesystem, the session backend, and `gh` — so they work whether or not the daemon is running. State is derived from `.worktrees/gh-*` dirs and live sessions, not from daemon memory.\n\n| Command | What it does |\n| --- | --- |\n| `april ps [--json]` | Lists active work — issues in flight and `inv-` investigations — with session liveness and the owning repo. Shows a daemon-liveness line (uptime, forwarders) when the daemon's `/status` endpoint is reachable. |\n| `april config [--path\\|--validate\\|--json]` | Prints the resolved config and its path. `--validate` exits non-zero if invalid; `--path` prints just the path; `--json` emits JSON. |\n| `april doctor` | Health checklist without starting the daemon: config validity, required tools on PATH, `gh-webhook` extension, `gh` auth, repo paths, service unit, daemon reachability, and (Linux) linger. Exits non-zero on hard failures. |\n| `april run <issue> [--repo O/N]` | Manually start work on an issue (`123` or `owner/name#123`) — the same path the daemon takes on a labeled webhook, minus the label requirement. `--repo` disambiguates a bare number across repos. |\n| `april cancel <issue> [--requeue]` | Stop an issue's work: kill the session and remove the worktree, and remove the `agent:wip` label. `--requeue` re-adds `agent:todo` so the daemon picks it up again. |\n| `april kill <slug\\|issue> [--worktree]` | Kill a single session by slug or issue number (handles `inv-` investigations too). `--worktree` also removes the backing worktree. |\n| `april clean [--force] [--repo O/N]` | Prune orphaned worktrees — stale (no live session) work whose issue is **closed** and has **no open PR**. Dry run unless `--force`; anything in progress or in review is kept. |\n| `april investigate \"<problem>\" [--repo O/N] [--auto]` | Dispatch a research agent in the current directory to investigate a problem and file a GitHub issue. See [Investigate](#investigate) below. |\n\n## Investigate\n\n`april investigate` is the front half of the loop: it turns a vague problem into a well-scoped GitHub issue, which the daemon can then pick up and implement.\n\n```bash\napril investigate \"study space pull-to-refresh shows a duplicate spinner on ios\"\n```\n\nIt spawns a research agent (using the configured `llm` and the bundled `issue-investigator` skill) **in the current working directory** — which need not be a repo, and may be your home directory. This is deliberate: an investigation can span repos, and the owning repo isn't always known up front. The agent reads the configured repos' local checkouts and uses `gh` to research, decides where the work belongs, and files the issue there.\n\nEach investigation runs as its own session (named `inv-…`), so it shows up in `april ps` and can be torn down with `april kill <slug>`.\n\n**Modes:**\n\n- **Deferred (default).** The agent creates the issue assigned to you, *without* the trigger label, and prints the URL. You review it and label it `agent:todo` when you're ready to hand it to the daemon. This matches the usual discovery → review → handoff flow.\n- **`--auto`.** The agent also applies the trigger label, so the daemon picks the issue up and starts implementation immediately — one command goes from prompt → research → issue → PR.\n\nUse `--repo OWNER/NAME` to suggest the owning repo (the agent still decides), and `--dry-run` to print the session name and the exact prompt that would be dispatched without spawning anything.\n\n### Investigate-only repos (`watch: false`)\n\nThe candidate repos for investigation are your configured `repos` — the same list the daemon watches. To research a repo **without** having the daemon pick up its tickets on this machine, set `watch: false` on it:\n\n```yaml\nrepos:\n  - owner: \"instructure\"\n    name: \"athena-poc\"\n    path: \"~/Developer/inst/athena/athena-poc\"\n  - owner: \"instructure-internal\"\n    name: \"athena-ios\"\n    path: \"~/Developer/inst/athena/athena-ios\"\n    watch: false   # investigate here, but let another machine run the tickets\n```\n\nA `watch: false` repo is excluded from the daemon's work loop — no webhook forwarder, no startup reconciliation, no pickup — and `april run` refuses it. But it stays a full investigation target: it shows up in the `investigate` candidate list and works as a `--repo` hint. This is the multi-machine split — e.g. a Linux box runs `athena-poc`/`athena-api` tickets while a Mac runs `athena-ios`, yet either box can still investigate and file iOS issues (use `--auto`, or label later, and the machine that *does* watch iOS picks them up).\n\n## Environment variables\n\nThe daemon reads extra env vars from `~/.config/april/env`. One `KEY=VALUE` per line, `#` for comments, optional double-quotes around values:\n\n```sh\n# ~/.config/april/env\nGH_HOST=your.ghes.host\nGH_ENTERPRISE_TOKEN=ghp_...\nSLACK_WEBHOOK_URL=https://hooks.slack.com/services/...\nAPRIL_DEBUG=1\n```\n\nThis file is seeded by `april install` (and `april init`) and is **never overwritten by reinstalls** — safe to put long-lived secrets here.\n\nAfter editing:\n- **Linux:** `april restart`. The systemd unit re-reads the env file on each start.\n- **macOS:** `april install && april restart`. launchd has no `EnvironmentFile=` equivalent, so values are inlined into the plist at install time; you have to regenerate it after editing.\n\n### Token inheritance\n\n`spawner.ts` runs the agent inside tmux with `tmux new-session -d <agentCommand>` — no login shell. So the agent inherits the daemon's env directly, including any `GH_TOKEN` / `GH_ENTERPRISE_TOKEN` you set in the env file. Practical implication: the PAT you provide has to cover what *both* april and the agent need, not just april. If you want the agent to fall back to your shell's auth (a credential helper, network-level auth, etc.), you'd need to wrap the tmux command in a login shell — not currently supported.\n\n## Choosing an agent\n\n`llm` selects which CLI april spawns. `skill` is an april-level setting; CLI-specific options live under their own blocks:\n\n```yaml\nllm: \"claude\"               # or \"codex\"\nskill: \"issue-worker\"\n\nclaude:\n  # model: \"opus\"           # defaults to opus\n  # permissionMode: \"auto\"  # defaults to auto\n\ncodex:\n  # model: \"gpt-5.1-codex-max\" # omit to use codex's configured default\n  # askForApproval: \"never\"    # defaults to never\n```\n\n| | claude | codex |\n|---|---|---|\n| Launch | `claude --model <model> --permission-mode <permissionMode>` | `codex --model <model> --ask-for-approval <askForApproval>` |\n| Prompt sigil | `/issue-worker …` | `$issue-worker …` |\n| Skill install dir | `~/.claude/skills/` | `~/.agents/skills/` |\n| Default approval behavior | `permissionMode: \"auto\"` | `askForApproval: \"never\"` |\n\nThe bundled skills (`issue-worker`, used by the daemon; `issue-investigator`, used by `april investigate`) are the same SKILL.md for both agents; april just installs them under the right tree based on `llm`. Switching agents later: edit `config.yaml`, then run `april install-skill && april restart`.\n\n## Service backend\n\n- **Linux** uses systemd user services at `~/.config/systemd/user/april.service`. Logs go to the journal (`journalctl --user -u april`).\n- **macOS** uses launchd LaunchAgents at `~/Library/LaunchAgents/dev.april.daemon.plist`. Logs go to `~/Library/Logs/april/april.log`.\n\n### Restarts and tmux sessions\n\nThe unit/plist sets `KillMode=process` (systemd) / `AbandonProcessGroup=true` (launchd), which means `april restart` only signals the daemon itself — tmux sessions and the agent processes inside them keep running. The daemon's shutdown handler explicitly terminates the `gh webhook forward` children before exiting.\n\nIf the daemon ever has to be SIGKILLed (it hung past the systemd stop timeout), the forwarders will be orphaned to PID 1. Clean them up with `pkill -f 'gh webhook forward'`.\n\n### Node version managers\n\n`april install` captures the absolute path of the `node` binary it was invoked with (e.g. `~/.nvm/versions/node/v22.x.x/bin/node`) and bakes it into the unit/plist. If you later remove or change that node version, the service will fail to start — re-run `april install` after switching.\n\n## GitHub Enterprise Server caveat\n\n`gh webhook forward` relies on GitHub's hosted webhook-relay infrastructure. **That relay is github.com-only — it is not part of GHES.** If your repos live on a GHES instance, you will see this in the logs after the daemon authenticates fine:\n\n```\nError: you do not have access to this feature\n```\n\nThe webhook extension itself works against GHES (it can authenticate, list extensions, etc.), but the actual `forward` subcommand has no relay to talk to.\n\nWorkarounds (none currently shipped — file an issue if you need them wired up):\n\n1. **Direct webhook delivery.** Expose april's port publicly (reverse proxy + TLS, or a tunnel like cloudflared / tailscale funnel / ngrok), and configure a webhook on the GHES repo pointing at `https://your-server/webhook/github`. Skip `gh webhook forward` entirely.\n2. **Polling.** Replace the forwarder with a periodic poll of open issues. april already has reconciliation-on-startup; turning it into a timer is small.\n3. **Third-party relay** like smee.io.\n\n## Upgrading\n\n```bash\napril upgrade\n```\n\nThis runs the package install, regenerates the unit/plist, and restarts the service in one go. Pass a specific version (`april upgrade 0.0.5`) to pin, or `--with pnpm|yarn` if `april upgrade` picks the wrong package manager.\n\nManual equivalent if you want to do it yourself:\n\n```bash\nnpm i -g @armstrongnate/april@latest\napril install        # regenerates the unit/plist with any template changes (also runs daemon-reload on Linux)\napril restart\n```\n\n**If you skip `april install` after upgrading, new template features (`EnvironmentFile=`, env-var changes, etc.) will not appear in your existing unit file** — `npm` only updates the package, not anything systemd has on disk.\n\n`april upgrade` ends by running `april install-skill`, which:\n\n- silently installs the skill if missing,\n- says \"already up to date\" if your installed copy matches the bundled one, or\n- **prompts you** before overwriting if your copy differs (in case you customized it).\n\nFor non-interactive scripts, pass `--yes` to `april install-skill` (or to the upgrade flow indirectly: `april install-skill -y`).\n\nYour `~/.config/april/config.yaml` is never overwritten by any `april` command. To reset it from the example, delete the file manually and re-run `april init`.\n\n## Troubleshooting\n\n### `Required gh extension not installed: cli/gh-webhook`\n\nInstall it as the same user that runs the service:\n\n```bash\ngh extension install cli/gh-webhook\n```\n\n### `gh auth token not found for host \"...\"`\n\n`gh-webhook` shells out to `gh auth token` to extract a Bearer token, and your gh setup doesn't have an extractable one (you might be relying on a credential helper, network-level auth like Cloudflare Access, or a wrapper script). Add an explicit `GH_TOKEN` / `GH_ENTERPRISE_TOKEN` to `~/.config/april/env`, then `april restart`.\n\n### `you do not have access to this feature` on `gh webhook forward`\n\nYour host (likely GHES) doesn't expose the webhook-forwarding relay. See [GitHub Enterprise Server caveat](#github-enterprise-server-caveat).\n\n### Service starts but env vars in `~/.config/april/env` aren't applied\n\nYou're running a unit that was generated before `EnvironmentFile=` support landed (anything from before v0.0.2). Confirm:\n\n```bash\nsystemctl --user cat april | grep -i environment\n```\n\nIf you don't see `EnvironmentFile=`, regenerate:\n\n```bash\napril install\nsystemctl --user daemon-reload\napril restart\n```\n\n### `Token:` is empty in `gh auth status` but `gh` commands work\n\nMeans your auth is provided by something other than a stored token (credential helper, network auth, wrapper). The webhook extension still needs an actual token — it doesn't matter how `gh` does its other API calls. Add `GH_TOKEN` / `GH_ENTERPRISE_TOKEN` to the env file.\n\n### Service can't find `gh` / `tmux` / `claude` / `codex` even though they're on your shell PATH\n\n`april install` captures `$PATH` at install time and bakes it into the unit. If you installed any of those tools after running `april install`, re-run `april install` to recapture PATH.\n\n## Usage\n\nOnce installed, label a GitHub issue with `agent:todo` and assign it to yourself. april will:\n\n1. Create a git worktree for the issue\n2. Run any configured post-worktree hooks (e.g. `pnpm i`)\n3. Spawn a tmux session with the configured agent (claude or codex)\n4. The agent reads the issue, implements a fix, and opens a PR\n5. Issue labels transition: `agent:todo` → `agent:wip` → `agent:review`\n\nAttach to a running session anytime with `tmux attach -t <session-name>`.\n\n## Development\n\n```bash\npnpm install\ncp config.example.yaml config.yaml\npnpm dev\n```\n\n`pnpm dev` runs the daemon in the foreground from the source tree. Config is loaded from `~/.config/april/config.yaml` if it exists, otherwise `./config.yaml`.\n","readmeFilename":"README.md"}