{"_id":"@amenophis1er/foreman","_rev":"18-deaa12b4a3ebfb607b217e5dd0d98e94","name":"@amenophis1er/foreman","dist-tags":{"latest":"0.1.18"},"versions":{"0.1.0":{"name":"@amenophis1er/foreman","version":"0.1.0","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.0","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"0e88e1b9cf56f07554cd2c297e786260923f7d67","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.0.tgz","fileCount":65,"integrity":"sha512-7k/UJ6GO7iwlphc0z7JPj5r1TARMJMf9vUYvGvEu2/bqoz/IsZYEUvn5J4u+gkTNghcBF+nCuAQ0ofykzzAJNg==","signatures":[{"sig":"MEUCIBfXobILO4gA7Ic02GjbIE8Lb5l0FZIc8glvlC+XypNpAiEA0XaEV1wETQAGZhWwS9GfNsZLgEJsXXMLrAzvkNTU0E0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1258446},"type":"module","engines":{"node":">=20"},"gitHead":"4f54b70e30af2d05b8cddf23853c4134e85dc7d2","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test 'src/**/*.test.ts'","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"amenophis1er","email":"amenophis@amenophis.dev"},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"11.19.0","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.0_1788664286110_0.24280535610154397","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@amenophis1er/foreman","version":"0.1.1","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.1","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"5e96a110662e87f0262276d5331b6ec74128c954","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.1.tgz","fileCount":64,"integrity":"sha512-QNX7J/vN5WP/gemk5N+o65oKleeJP9CCIyY0O6iW6yCRaWRcRYVaYu/WDtJI7+G6FBPdyqkdk7d1sjddKj9QiQ==","signatures":[{"sig":"MEYCIQCj6nFOr/gLwOeV4Ca6/SrUZ0mtPmwIswegA0ovbaRKmQIhAPr5TVpSRSYyQ3AmI2OBLlQfECNrgiYpY9vqLeufy2Wb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1249676},"type":"module","engines":{"node":">=20"},"gitHead":"ff376fdb7be0eab32f1f9a231d1d455eded7cca5","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.1_1788672733669_0.2789219280978692","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@amenophis1er/foreman","version":"0.1.2","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.2","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"de6add9db8cdeeebedfd8e3f80003ae0b2ccb6b2","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.2.tgz","fileCount":64,"integrity":"sha512-93pIgoPaOJ3kixhc/RO3bwwqNqf+E9z0Gk9kS5nu2wRZynGrPL7Ipv9xD+4M4e6iy978xmQrE77u4PRYjfTdGA==","signatures":[{"sig":"MEYCIQDDidGIaj93lFhZaX3gzal5ZHdNJmp+Yei4riBmO0U0GQIhAPQWRCAqirLkiG79/JGzUzXhh88lLto3vy7o0Ge1q4ud","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1254151},"type":"module","engines":{"node":">=20"},"gitHead":"1f4c5df7a2c98956c5cda83968f5c944bc800218","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.2_1788675603585_0.316064675850559","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@amenophis1er/foreman","version":"0.1.3","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.3","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"e694bc4cb5f6c37253618fc94a47e344ef05c02b","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.3.tgz","fileCount":66,"integrity":"sha512-jSJ3Qc+DBclQ5ZdGeNjjJJpT51llUuhhqhOd3pCmhSNpmwKRz5lm/Pak2wlzHh51DAg0R3Hcm7U/iNNCcPbNDA==","signatures":[{"sig":"MEUCIBpaJFutBFQ5Z02eKvzouBBPZIfnGECbc0hagXGTgnVcAiEA/qCp66s0R8ghE1S8NtrtM74Gpnd+/kRuSidtgl9cXug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1263294},"type":"module","engines":{"node":">=20"},"gitHead":"4b08e5720a73bb27f07c8aeb3aedf89dfa52cd1a","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.3_1788676129397_0.4160533116188134","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@amenophis1er/foreman","version":"0.1.4","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.4","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"6b581a40b450fb589b814b819b9d9040b535bddd","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.4.tgz","fileCount":66,"integrity":"sha512-YHeAaXNKc0UfBEo+3SV5fWhXz15ydaLgELL07w0T4mBq52PUHbH6jZGlcnPzJ+JqJXXbtLLA/oM1uiAIYhKjeg==","signatures":[{"sig":"MEUCIQDq1WQSRbb5sjz0D8Ujme2r3Bgt0OwLMDGFt34gB+fhigIgQXjmT/AbkCMCHdcqDZ5p21DEcRgLrPyT4lHSLCDS+nw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1266845},"type":"module","engines":{"node":">=20"},"gitHead":"86b467618a02dbd37b1839160cdfaa6b9e0acc51","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.4_1788678771923_0.5397967773602221","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@amenophis1er/foreman","version":"0.1.5","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.5","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"076e9474e94c6a9467a413d0c0c16515eb73959a","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.5.tgz","fileCount":66,"integrity":"sha512-RVwPz/UciIOdChqIXXSARYDVzjmAxpF2RL/CXX2PHGpYKxjgSHHxqdC+UZKAa7zVY/2DWbI4lZAnzS5alKk/wg==","signatures":[{"sig":"MEYCIQCjG6arFA/weKrQKeiMg6SPU80wDaZ2cSILuPUmEnumLAIhAM3OeTCTR1+c/txv5TVOyJLNs5nSqX7799cbBsakx0Ak","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1269644},"type":"module","engines":{"node":">=20"},"gitHead":"ea2beb7829a96be7615511e9a13fba66ea66a529","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.5_1788715353759_0.4869525630018381","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@amenophis1er/foreman","version":"0.1.6","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.6","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"d2f807c7c0e3587d87643541023ade5d6e14e5db","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.6.tgz","fileCount":68,"integrity":"sha512-lJE8V6KUvyG9x/h5CPg4Z+zU82rhxjeHvVnRht6jyLezq/S/Jwc/7ex3GsM7OrPMnntO7ugu5V//qP7pB4j9fA==","signatures":[{"sig":"MEUCICtpBUCbB8F+jriPug0uKDMif/FZ90Bx8WAF3gdQBKvRAiEAwRV7gwfo11mtoPqLwZ2ALQcyC3T9MIate/VRFpa0vcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1322562},"type":"module","engines":{"node":">=20"},"gitHead":"7525519c8ed9cf49c6d1af2ef223649e393f6e67","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.6_1788724746138_0.9720071276108866","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@amenophis1er/foreman","version":"0.1.7","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.7","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"5c95ec99f1d275b44fd6e23afb199ae0eb611241","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.7.tgz","fileCount":70,"integrity":"sha512-caPSah2Ma8X3Q/r/gvDCiJiNVBzePZ25xHsH/Fmp9CnejorQOpLIHZhJRAcP6P+zeLkUeA0LSe6oxgSdhQN6NA==","signatures":[{"sig":"MEQCIEIaWbow40a4w/v0IUXKQEALi87WZaKT/eyHafA2buZhAiA4VRdCz/Q89VFtUzOl9wRkqsHk+jJZp4Xw9UAQPrivsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1341542},"type":"module","engines":{"node":">=20"},"gitHead":"237a53aea75a86a35da4248663dcde3f6408395b","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.7_1788730764500_0.23120848561355012","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@amenophis1er/foreman","version":"0.1.8","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.8","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"98518d1defc662490d1987d7bedfe1728a6e26c1","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.8.tgz","fileCount":85,"integrity":"sha512-/U90WScmlx/44fDkgEagN1T806mlm7SXFz+NfZHawuQb0/n7GMxUyJeIvznyMb0ozrDvi70uloIgyGHdkN9EFw==","signatures":[{"sig":"MEQCIB77AmahH6g9cLfNyA+o0V/Rd1kkkGbTtXvo+KEefwFDAiB0PjY2XQJFqFOcO7AROGHjENQ/FReCz/jsAlMby6maAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1506054},"type":"module","engines":{"node":">=20"},"gitHead":"f221dc80e0e66b19fa0267d59e4eb4ab68f0098a","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.8_1788814503503_0.005668554398425174","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@amenophis1er/foreman","version":"0.1.9","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.9","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"5d6dcb665311d1fb54f0cae7bf4d0c279b00a2c6","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.9.tgz","fileCount":85,"integrity":"sha512-c4q2hgsMyzulJ2EZXGtH2jtW8RhH6HfPlu0gleVUeux8FaM6H5lUv6czQBX1kRN6TBjpJ4dYAvWBGCmIdMDrug==","signatures":[{"sig":"MEYCIQDiBha7s0TQbq/8RO3O2HbgefWzvx4+Wl5an7Gwo74lNgIhAIQZ9KlAUD71Lbug20T10gT11fuoeEYlhNvMAAOUk17y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1514825},"type":"module","engines":{"node":">=20"},"gitHead":"ced6765645518677476d6a9eb5880baa61b86664","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.9_1788827422737_0.5229256093580639","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@amenophis1er/foreman","version":"0.1.10","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.10","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"37e4860d590f4101f47e607d9c139957ad09b495","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.10.tgz","fileCount":85,"integrity":"sha512-NcUAKjdD8SUhmhOu9AWVUC3yDdyAxzxA0sGmGcPYm3gMRN5I8D3KHw12geLg4HHL3h6V+Zp7tIB++IS8EQs15Q==","signatures":[{"sig":"MEQCIHl87OkxcihS/MqOs6dEihMyvq1JOTx5gvrcaFoTXKPIAiAXUSDGcfr1yfJiNyQxSuxFmqordlDbeBNaUxBhAf5grg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1517875},"type":"module","engines":{"node":">=20"},"gitHead":"64fa0b985d729278fedd1c8a2147ae15d1b7b720","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.10_1788828598222_0.9867720148297101","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@amenophis1er/foreman","version":"0.1.12","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.12","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"8729e6bcbcf81f9dbe5ad3485caa651d6df99843","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.12.tgz","fileCount":85,"integrity":"sha512-uwNszRRz5uZexVF6Sd1xTWrejAkz10HWO/+KdzCMBc3K6iPK0+zw9v69ip6lofrhfmtrfomHsd0Bz+33J+VW/Q==","signatures":[{"sig":"MEYCIQDapGt2nYB7IcGIMLSlZ5LY0SW9JMTk/AsRT6k8JNMO6AIhAK8/8bm8/lfyD27Bdi8snwOb/WTEKJp4wu+9QkzYzfFL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1519506},"type":"module","engines":{"node":">=20"},"gitHead":"4963dae68bda8c76cbe72662853d2ed049f4a797","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.12_1788829179053_0.01533445311154047","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@amenophis1er/foreman","version":"0.1.13","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.13","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"5961cf661ffe4428263e7aa429c0a3f2f2d4c18b","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.13.tgz","fileCount":87,"integrity":"sha512-y5FrJVbAlOwR8Ks+125leSLU6j1DWCkKzV5Km/Bl9XsuvFSzKr+fM/6IjRXrZT8exMPVfKy8FckqsK6ITjK+Mw==","signatures":[{"sig":"MEQCICi0L91d+QChiPq7QciVHS6JJl2vYFrcqFzU1rtYXP18AiAylF3O8FB9N/1QoMYddVvwX+wKuBkO/UTxCxaoRasSwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1553122},"type":"module","engines":{"node":">=20"},"gitHead":"6d2aadacc2274ba5e1848fc323051d869ea5c3b8","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@modelcontextprotocol/sdk":"1.30.0","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.13_1788830525612_0.15653266226608875","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@amenophis1er/foreman","version":"0.1.14","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.14","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"61bd6a246a39d8bfa19c1e933f13e8a7aa0e4139","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.14.tgz","fileCount":89,"integrity":"sha512-tpkXFW0AFY1wxmzkMV9R/GfopI3Mjf2Ssp96CAQjdRXsuZA0S0u7Zn5SgcxIRgw3vpS8LWVkvPASRURtAgk/nQ==","signatures":[{"sig":"MEQCIHMEcshh0GaDbQuL8esUdkatu/tUblL/ERJDle8ysXvVAiBHGxajEQlUR5a8WWT/T+mMPQFu5QGXo7qbwNGJgZ1dLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1582455},"type":"module","engines":{"node":">=20"},"gitHead":"ae0681a988c20a0c5c4a14c774aaf4e65f739854","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@modelcontextprotocol/sdk":"1.30.0","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.14_1788841952653_0.42302051159538534","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@amenophis1er/foreman","version":"0.1.15","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.15","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"863b744176482dbd9d1155ee3523d1f15fae0685","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.15.tgz","fileCount":89,"integrity":"sha512-YHXvjGQ/Mxq0O1X1Wf2X/uwHYB7ARRvJwi2uKzS7HpsH/8ACLKwh5KelQG1ayUTw/pvemKt1nT8KLA1giuhWfw==","signatures":[{"sig":"MEYCIQDFdwlfPiu1yFVI8VdmlE/hUtL/mHMAIKKL9RFg21OMawIhAIT33DR6O8cVSLPG8/0DxTpKANqvKbPWNLM8d5yC+0AF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1588707},"type":"module","engines":{"node":">=20"},"gitHead":"5880f0a75ed4bfa0d5b948bf5ad9282ff3c74343","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@modelcontextprotocol/sdk":"1.30.0","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.15_1788862498607_0.6066017231029666","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@amenophis1er/foreman","version":"0.1.16","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.16","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"da51a3c05e0619dcc8b4cb899e7b63bfb0517250","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.16.tgz","fileCount":89,"integrity":"sha512-wwqKK7qyCCHM7gQdWwIGTGZGtZY2M8eX4RpJgiiUuNvqJujZgLicaW6UCtGT4S84WzjEKCxMMfEzKKmu/bLZaw==","signatures":[{"sig":"MEUCIF0azvdgNhsUPwAmV39p2ZAeVqJ1TSzuYyVfncfxqITPAiEA9DdS3d34PoZ643AWoOQp19OKvXxR5Ub53iuAKalwkFE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1606499},"type":"module","engines":{"node":">=20"},"gitHead":"76a0405df184321c7c28846012daa7fde3f238d1","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@modelcontextprotocol/sdk":"1.30.0","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.16_1788888893426_0.8541373496776263","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@amenophis1er/foreman","version":"0.1.17","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"author":{"name":"Amen AMOUZOU"},"license":"ISC","_id":"@amenophis1er/foreman@0.1.17","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"bin":{"foreman":"bin/foreman.mjs"},"dist":{"shasum":"14dd3d8b173cd7ba10f86851cb3785aa3fc6fe86","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.17.tgz","fileCount":93,"integrity":"sha512-gVrRMrXE5VGb4RYBjk9XfBoO+Y9McRFC2mCd3opaT/ino31Hjzpl9ppV/IiR0tBgqhQqyJ0Qw7mcNnjzQQ530Q==","signatures":[{"sig":"MEQCIEnmhJZB0qii689g6GpJ+VZC3G8kFM17Qr9e30KncQBuAiAap4VslKRCTUN9+5xFf5SK3RC4NJalN9BdAx2LLzJYuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1741776},"type":"module","engines":{"node":">=20"},"gitHead":"475ddcf74849aa1e56a8fde0a3917982be5e9d8b","scripts":{"dev":"node scripts/dev.mjs","test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","setup":"node scripts/prepare.mjs --force","start":"tsx src/server.ts","doctor":"node bin/foreman.mjs doctor","ui:dev":"npm --prefix ui run dev","prepack":"node scripts/prepare.mjs --force","ui:build":"npm --prefix ui run build","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"repository":{"url":"git+https://github.com/amenophis1er/foreman.git","type":"git"},"_npmVersion":"12.0.2","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","qrcode":"^1.5.4","@playwright/mcp":"^0.0.80","@modelcontextprotocol/sdk":"1.30.0","@anthropic-ai/claude-agent-sdk":"^0.3.259"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/foreman_0.1.17_1788960146738_0.3782075881546205","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@amenophis1er/foreman","version":"0.1.18","description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"homepage":"https://github.com/amenophis1er/foreman#readme","bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"repository":{"type":"git","url":"git+https://github.com/amenophis1er/foreman.git"},"license":"ISC","author":{"name":"Amen AMOUZOU"},"type":"module","bin":{"foreman":"bin/foreman.mjs"},"engines":{"node":">=20"},"scripts":{"test":"node --import tsx --test src/*.test.ts src/gateway/*.test.ts src/notify/*.test.ts","start":"tsx src/server.ts","dev":"node scripts/dev.mjs","ui:dev":"npm --prefix ui run dev","ui:build":"npm --prefix ui run build","prepack":"node scripts/prepare.mjs --force","typecheck":"tsc --noEmit -p . && npm --prefix ui run typecheck","doctor":"node bin/foreman.mjs doctor","setup":"node scripts/prepare.mjs --force"},"dependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.259","@modelcontextprotocol/sdk":"1.30.0","@playwright/mcp":"^0.0.80","qrcode":"^1.5.4","tsx":"^4.23.13","zod":"^4.5.4"},"devDependencies":{"@types/node":"^26.4.1","@types/qrcode":"^1.5.6","typescript":"^7.0.2"},"publishConfig":{"access":"public"},"gitHead":"6593a5ea42d0c9b410dad05003eaebd855cfb9c4","_id":"@amenophis1er/foreman@0.1.18","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-vN6JhOued28OBG7AdNiEQ2xc63uP/+ryRH32XhI/uFi+7MIXMImzsRgWrpb1YNq6cazHuhJychWWnDmab5jZ0A==","shasum":"1c2d221c1c5f986cd2abf86d64c56c2bcd7ab4c6","tarball":"https://registry.npmjs.org/@amenophis1er/foreman/-/foreman-0.1.18.tgz","fileCount":97,"unpackedSize":1868426,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amenophis1er%2fforeman@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDWUs5oY56DdUZkXgUePtuQPsQkWvQAmrlyqu/rPhUvTAIgQfsfV7YkmigHkd0Liwn3G2ZQrBelOUMkIPhgUVUypwg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feec613d-39dc-45b9-a47e-2bdd1062571e"}},"directories":{},"maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/foreman_0.1.18_1788965928261_0.1736654997856486"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-06T03:11:25.920Z","modified":"2026-09-09T14:58:49.025Z","0.1.0":"2026-09-06T03:11:26.279Z","0.1.1":"2026-09-06T05:32:13.864Z","0.1.2":"2026-09-06T06:20:03.744Z","0.1.3":"2026-09-06T06:28:49.552Z","0.1.4":"2026-09-06T07:12:52.098Z","0.1.5":"2026-09-06T17:22:33.902Z","0.1.6":"2026-09-06T19:59:06.315Z","0.1.7":"2026-09-06T21:39:24.641Z","0.1.8":"2026-09-07T20:55:03.686Z","0.1.9":"2026-09-08T00:30:22.885Z","0.1.10":"2026-09-08T00:49:58.416Z","0.1.12":"2026-09-08T00:59:39.243Z","0.1.13":"2026-09-08T01:22:05.747Z","0.1.14":"2026-09-08T04:32:32.805Z","0.1.15":"2026-09-08T10:14:58.766Z","0.1.16":"2026-09-08T17:34:53.632Z","0.1.17":"2026-09-09T13:22:26.893Z","0.1.18":"2026-09-09T14:58:48.492Z"},"bugs":{"url":"https://github.com/amenophis1er/foreman/issues"},"author":{"name":"Amen AMOUZOU"},"license":"ISC","homepage":"https://github.com/amenophis1er/foreman#readme","keywords":["claude","agent","agents","orchestrator","autonomous","mission","claude-code","dashboard"],"repository":{"type":"git","url":"git+https://github.com/amenophis1er/foreman.git"},"description":"Autonomous mission runner on the Claude Agent SDK: a director plans, delegates to workers, verifies, and reports — from one dashboard, your phone, or the CLI.","maintainers":[{"name":"amenophis1er","email":"amenophis@amenophis.dev"}],"readme":"<p align=\"center\">\n  <img src=\"assets/brand/logo.svg\" alt=\"\" width=\"72\" height=\"72\">\n</p>\n\n# Foreman\n\nForeman runs software missions without you in the loop, and shows you\neverything when you come back.\n\nYou link a project folder and say what you want. A **director** agent talks\nit through with you (or not — you can skip the talk), writes the plan into\n`.foreman/MISSION.md`, delegates the work to **worker** sessions, watches them,\nverifies the result on its own terms, and reports. You watch from one\ndashboard, or from your phone, or from nowhere at all: every question the crew\ncould ask has an unattended default, every run has a budget it cannot cross,\nand every file it touched is on record when you return.\n\nThe agents are real [Claude Agent SDK] sessions. The models behind them can be\nAnthropic's, or anything that speaks OpenAI's wire: a local Ollama, Ollama\nCloud, OpenRouter, vLLM, a Codex login. Foreman never holds a credential it did\nnot find already on your machine.\n\nForeman grew out of [claude-golden-eye]'s director mode. Same doctrine —\none director, scoped workers, independent verification — but the agents are\nembedded sessions driven by this app, not terminal sessions watched by a\nplugin.\n\n## See it\n\n<p align=\"center\">\n  <img src=\"assets/readme/fleet-needs-you.jpg\" alt=\"The fleet: one approval waiting, answerable in place; one mission running with its crew and meter; recent outcomes\" width=\"900\">\n</p>\n\nThe planner asks with options and ends in a proposal you can edit; a run is\none screen with the checklist ticking live and the crew beside it; anything\nthat blocks a run sits above the transcript, answerable right there.\n\n| Plan | Run | Review |\n|---|---|---|\n| [![The planner asking three questions with clickable options](assets/readme/planner-asks.jpg)](assets/readme/planner-asks.jpg) | [![A running mission: transcript, timeline, DONE WHEN and crew](assets/readme/run.jpg)](assets/readme/run.jpg) | [![The files viewer stepping through a run's fixtures](assets/readme/files-viewer.jpg)](assets/readme/files-viewer.jpg) |\n| [![The proposal card: brief, DONE WHEN, budget, models, browser](assets/readme/proposal.jpg)](assets/readme/proposal.jpg) | [![An approval pinned above the transcript, waiting](assets/readme/needs-you.jpg)](assets/readme/needs-you.jpg) | [![The fleet at rest: all quiet](assets/readme/fleet-quiet.jpg)](assets/readme/fleet-quiet.jpg) |\n\n## Install\n\nNode 20 or newer, and a Claude Code login (or an API key) on the machine that\nwill run it.\n\n```sh\nnpx @amenophis1er/foreman            # try it: starts the server, serves http://localhost:4177\nnpm install -g @amenophis1er/foreman # keep it: then `foreman` from any shell\n```\n\n```sh\nforeman doctor             # what this machine can run, what is missing, how to fix it\nforeman                    # start in this terminal (Ctrl+C stops it)\nforeman up                 # …or in the background; `foreman down` stops it, `foreman status` asks\nforeman open               # the dashboard, in your browser\nforeman service install    # keep it running for good: start at login, restart if it dies\nforeman --help             # the rest, and the environment variables\n```\n\n`doctor` prints the checklist the server prints on start — credentials and\nwhich account pays, the Claude Code install, Ollama and Codex if present, the\nbrowser missions will use, the port, Tailscale, the data directory — and\nexits. Nothing blocks unless it says so.\n\n**Environment.** Everything the CLI reads; `foreman --help` prints the same list.\n\n| Variable | Meaning | Default |\n|---|---|---|\n| `PORT` | listen port | `4177` |\n| `FOREMAN_SERVICES_PORT` | the port dev servers the crew exposed are proxied on — their own origin, so a page the crew built cannot call Foreman's API | `PORT` + 1 |\n| `FOREMAN_HOME` | state directory: runs, settings, logs | `~/.foreman` |\n| `FOREMAN_BIND` | `auto` (loopback + Tailscale when present), `local`, or `all` | `auto` |\n| `FOREMAN_BROWSER` | browser for missions: `chrome`, `chromium`, `msedge`, `firefox` | `chrome` |\n| `FOREMAN_CLAUDE_CONFIG_DIR` | the Claude Code install missions run under | inherited |\n| `FOREMAN_CLAUDE_EXECUTABLE` | the Claude Code executable | bundled |\n| `FOREMAN_AUTH_MODE` | assert `api-key` or `subscription`; fail at start on mismatch | unset |\n| `FOREMAN_NO_TELEGRAM` | `1` to start without the Telegram bot: for a second server beside the main one, since Telegram allows one poller per bot | unset |\n\n## A mission, start to finish\n\n1. **Fleet.** The board: what needs you (answerable right there), what is\n   running with its crew and its meter, what finished. An idle fleet says\n   \"all quiet\" and means it.\n2. **Plan.** Open a project and talk to the planner. It reads the folder —\n   never changes it — asks with clickable options when it needs to, and ends\n   with a **proposal card**: the brief, the DONE WHEN checklist, a budget, the\n   models it suggests and why, browser on or off. Edit anything, start.\n   Or skip the talk and write the brief yourself.\n3. **Run.** One screen, one spine: the transcript, with anything that blocks\n   the run pinned above it and answerable in place. On the right, the\n   mission's checklist ticking live, the crew and what each worker last said,\n   the run's facts, and the project's settings.\n4. **Files.** What the run changed, against a baseline taken at start (git\n   ref or snapshot), with diffs; what it produced — screenshots, logs, work\n   files — viewable in place, arrow keys to step through; any dev server the\n   crew exposed, one click away — on its own port, and so its own origin, so a\n   page an agent wrote cannot turn around and call Foreman's API. HTML renders in a sandbox with its own\n   scripts, so a built page is a page, not a source listing.\n5. **Next.** A finished run is a starting point: **Plan the next step** opens\n   a new planning conversation already seeded with what was built, the\n   mission doc, and the director's final report.\n\nEvery run persists under `~/.foreman/`: refresh-proof, replayable, resumable.\nAn interrupted run restores the director's session and re-verifies before it\ncontinues. `.foreman/` git-ignores itself, so missions in real repositories\nleave no trace but the work.\n\n## Providers, and what a dollar means\n\nA provider is one choice, not three: **who is billed, which credential, and\nwhich wire**. Foreman offers these, each read from what is already on the\nmachine:\n\n| Provider | Credential | Wire |\n|---|---|---|\n| Claude Code | its own login — subscription or `ANTHROPIC_API_KEY` | Anthropic |\n| Anthropic API | a key named by environment variable, never stored | Anthropic |\n| Codex | the `codex login` in `~/.codex` | OpenAI-compatible, through a local gateway |\n| OpenAI-compatible | whatever the endpoint wants | Ollama (local or cloud), OpenRouter, vLLM, OpenAI, … |\n\nThe director and the workers can run on different providers; a mission on\nSonnet with workers on a local model is one click in the composer, and the\nplanner recommends pairings with a reason.\n\n**Cost is never invented.** A run is `priced` only when the endpoint that\nsends the bill also published the rate, or when Anthropic reported the cost\nitself. A local model is `free`. A cloud model with no published price is\n`unpriced`, and the meter shows what is true instead: tokens in, tokens out,\nturns. The one exception is a dated table of OpenAI's list prices, visible in\n`src/openai-prices.ts` with the day it was checked. Budget caps bind on\ndollars where dollars are real and on wall clock always — and, on a run that\nis `free` or `unpriced`, on tokens too: 20M by default across input, output and\ncache, because turns and minutes alone do not notice a director whose turns\nare cheap and enormous. A priced run is never ended by tokens; its budget is\nits cap.\n\nWhich account pays is printed at startup and shown wherever a mission can be\nstarted. Pin it with `FOREMAN_CLAUDE_CONFIG_DIR`; assert it with\n`FOREMAN_AUTH_MODE=api-key|subscription` so an unset key fails loudly instead\nof billing the other account. A project can pin its own provider, which is\nhow personal and work projects share one server.\n\n## Unattended by design\n\nForeman is meant to run while you are away, so it does not stop to ask unless\na human's judgement is required *and* being wrong is expensive.\n\n- **Three classes of \"outside the folder\".** Scratch output that lands in a\n  temp directory is denied on the spot and redirected to `.foreman/work/`.\n  A path that is knowably wrong is denied. A path only you can judge asks —\n  with a default, because \"no answer\" is also an answer the run must survive.\n- **A worktree comes with its repository.** A mission whose folder is a git\n  worktree is given the repository it was made from, once, at the start — the\n  build config, the shared declarations and the parent's `node_modules` live\n  there, so without it the crew asks the same question all day and you learn\n  to click Allow without reading. The transcript records the grant, and\n  withdraws it in the open if the reason stops holding on a resume. Sibling\n  worktrees stay closed — and when they live *inside* the repository the\n  parent is not opened at all, because a grant is a subtree and would carry\n  them along. A parent another mission is working in stays closed too.\n  Turn it off per project with **Worktree parent** in Settings.\n- **Every ask has a deadline and a default.** An approval nobody answers is\n  denied with a message that says where to go instead; a question nobody\n  answers is handed back to the director with \"decide and record\". You set\n  the timeouts, per project if you like.\n- **Watchdogs.** A silent worker, a director looping on the same call, a run\n  past its wall clock: each is detected, reported in plain words, and bounded.\n- **Notify → wait → default.** Link the Telegram bot and the ask reaches your\n  phone with buttons. The default is what happens when you truly cannot\n  answer, not what happens because you never knew.\n\n## Crew, and the reviewer gate\n\nA mission's verification is normally the director's own word. A **crew preset**\nis a named role you can put on a mission instead — a worker with a fixed brief,\na model of its own, and, for a reviewer, a read-only tool policy: it may read,\ngrep and search, and it may not write, edit or run a command. Two ship with\nForeman, a **Reviewer** and a **Security review**, and you edit them in\nSettings → Crew, globally or per project.\n\nYou opt a mission in at compose time, with toggles under the model pickers.\nThe presets you pick are frozen onto the run, so editing a preset afterwards\ncannot change a mission that already used it.\n\nA reviewer marked **required for done** is a gate Foreman enforces, not a\nrequest the director may skip:\n\n- The director calls `request_review`, which hands the reviewer the mission\n  brief, the DONE WHEN criteria and the run's diff, and takes back a verdict —\n  `PASS` or `FAIL` — with findings.\n- The verdict is pinned to a hash of the diff it actually read.\n- At the end of the run, Foreman recomputes that hash. A run may be recorded\n  **done** only if every required reviewer's latest verdict is a PASS on the\n  diff the run *ends with*. Missing, FAIL, or a PASS that went stale because\n  the code moved afterwards: the run is `interrupted`, and says which reviewer\n  and why. A run stopped at its budget cap obeys the same rule.\n\nSo the reviewer goes last. It costs what a worker costs and comes out of the\nsame budget. Its verdicts show up in the transcript, on the run, in the run\nreport on your phone and over `foreman mcp`, and in the body of the pull\nrequest Foreman drafts.\n\n## Schedules\n\nA schedule is a mission that starts itself. It lives in Foreman, not in the\nrepository: a name, a brief, a cadence — daily, weekly, every N hours, or a\nfive-field cron expression — and its own budget. When it fires, the mission\nruns in the project's folder on its own branch and leaves a run you cannot\ntell apart from one you started by hand: same transcript, same files, same\nreport, same place in the fleet.\n\nStanding spend is the thing that can hurt you while you are away, so three\nguards bound it, all in the server, none of them the agent's to interpret:\n\n- **The per-run cap**, the same budget every mission has.\n- **A monthly ceiling on scheduled spend, per project** —\n  `scheduledMonthlyCapUsd`, $25 by default. Foreman pauses the schedule\n  *before* the run that would cross it, rather than stopping one halfway.\n- **Two failed scheduled runs in a row pause it.** A schedule that has started\n  failing keeps failing, and it should stop costing money until someone reads\n  why.\n\nA paused schedule says which of the three paused it, and what would undo it.\n\nSchedules are created and edited in the dashboard's project view. The phone\nand `foreman mcp` list them — cadence, next run, whether they are paused and\nwhy — and can do nothing else: resuming a paused schedule is a decision at the\ndesk, because a schedule is standing configuration, and Foreman grants no\nstanding changes from a remote surface.\n\n## From your phone\n\nWith the Telegram bot linked (Settings → Notifications, scan the QR):\n\n- Approvals, questions and the planner's multiple-choice asks arrive with\n  inline buttons; a tap answers. Remote answers are allow, deny, pick or type\n  — never an \"always\" grant. That stays a decision for the desk.\n- `/projects`, `/status`, `/new <name>`, `/plan <project> <what you want>`,\n  `/run <project> <brief>`, `/stop`. After `/new`, just keep typing: the\n  planner's replies come back to the phone, and its proposal arrives as a\n  card with **Start mission** and **Discard**.\n- When the crew exposes a dev server, you get the link, and it opens from\n  anywhere your tailnet reaches.\n\nIf the machine is on [Tailscale], Foreman listens on the tailnet address too —\nand never on every interface, since there is no login. The phone's links use\nthe tailnet name. `foreman service install` keeps the server up with the lid\nclosed.\n\n## What Foreman will not do\n\n- **It is not a chat client.** Planning talks; missions work. The dashboard\n  is a control room, not a conversation.\n- **It is not an editor or a file manager.** Files shows diffs and artifacts,\n  read-only, path-jailed to the project.\n- **It mints no credentials and reimplements no OAuth.** It reads what\n  `claude`, `codex` and your environment already hold. No key is ever\n  returned by an API route or written to a project file.\n- **It never guesses a price**, and it never grants standing permissions\n  from a phone.\n\n## Platforms\n\nmacOS is where Foreman is developed and tested. Linux is verified on Debian\nwith Node 22 — install, `doctor`, `up`/`status`/`down`, the dashboard;\n`service install` needs a systemd user session, and browser missions need\nGoogle Chrome or `npx playwright install chromium` with\n`FOREMAN_BROWSER=chromium`. Windows is not yet tested natively — use WSL2;\n`foreman service` has no Windows implementation, `foreman up` works.\n\n## Under the hood\n\n```\nbin/foreman.mjs        the CLI: start · up/down/status · doctor · open · service\nsrc/server.ts          HTTP + SSE, routes, the run and planner drivers\nsrc/orchestrator.ts    MissionRun: director, workers, budget, watchdogs, asks\nsrc/planner.ts         the planning conversation: ask_user, propose_mission, forks\nsrc/policy.ts          what auto-allows, what is denied, what asks — and the defaults\nsrc/provider.ts        provider + credential + wire, resolved once per role\nsrc/gateway/           the OpenAI-compatible gateway and its token ledger\nsrc/notify.ts          the notification hub · src/notify/telegram.ts the bot\nsrc/deck.ts            baselines, diffs, artifacts · src/services.ts exposed servers\nsrc/store.ts           ~/.foreman: append-only event logs, atomic meta\nui/                    React + Vite dashboard; design system under ui/src/ds\n```\n\nOne active mission per project, many across projects. Every event is an\nenvelope `{runId, projectId}` on one SSE stream; the persisted log is replayed\nthrough the same reducer that renders live events, which is why a refresh\nshows exactly what a watcher saw. The director's tools are in-process MCP\ntools; a worker's report lands in the director's context as an ordinary tool\nresult.\n\n\n## Contributing\n\n```sh\nnpm ci && npm run setup      # dependencies, then the dashboard build\nnpm start                    # serves http://localhost:4177\nnpm test                     # 466 tests, node:test\nnpm run typecheck            # server and dashboard\nnpm run dev                  # API + Vite together\nscripts/dev-restart.sh       # restarts the server only when nothing would be lost\n```\n\n## Use Foreman from another agent\n\n`foreman mcp` serves Foreman's tools over stdio, so a Claude Code session, Codex\nor Antigravity can watch and launch missions without a polling loop:\n\n```sh\nclaude mcp add foreman -- foreman mcp\ncodex mcp add foreman -- foreman mcp\nagy mcp add foreman -- foreman mcp\n```\n\nTools: `fleet_status`, `list_runs`, `run_status` (with `wait_seconds` and\n`until`: one call that blocks until the run changes, finishes, or needs you),\n`run_report` (a finished run in one call: the director's report, DONE WHEN,\nchanged files, branch and pull request), `run_transcript`, `mission_doc`,\n`project_memory`, `list_schedules` (read-only: what starts itself and when),\n`search_runs`, `doctor`, `link_project` (folder or Git URL),\n`start_mission`, `steer`. Start, wait until finished, read the report: three calls. It talks to the running server at `FOREMAN_URL`\n(default `http://localhost:4177`) and has no logic of its own.\n\nDeliberately absent: approving or denying, answering the director's questions,\ninterrupt, resume, raising a budget, opening a pull request, settings and keys,\nand any change to a schedule.\nThose are the moments Foreman exists to put a human in; `run_status` says when\na run needs one, and with what, so the agent's job is to send you to decide.\n\nTo run a checkout beside an installed Foreman on the same machine, give it its\nown port and leave the bot to the installed one:\n\n```sh\nPORT=4178 FOREMAN_BIND=local FOREMAN_NO_TELEGRAM=1 npm start\n```\n\nBoth read `~/.foreman`; look from the second, drive from the first — two\nservers running missions against one store is the one case nothing guards.\n\nReleases: `npm version <patch|minor|major> && git push --follow-tags` — CI\ntests, publishes to npm with provenance, and creates the GitHub release.\n\n[Claude Agent SDK]: https://code.claude.com/docs/en/agent-sdk\n[claude-golden-eye]: https://github.com/amenophis1er/claude-golden-eye\n[Tailscale]: https://tailscale.com\n","readmeFilename":"README.md"}