{"_id":"@yylo/cli","_rev":"15-dc80fd2a6bdff5a8a22129f62c422ef6","name":"@yylo/cli","dist-tags":{"next":"0.2.3-rc.3","latest":"0.2.10"},"versions":{"0.1.0-rc.1":{"name":"@yylo/cli","version":"0.1.0-rc.1","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.1.0-rc.1","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"0aa92f32e5431a443af5423dc88333831455273e","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.1.0-rc.1.tgz","fileCount":145,"integrity":"sha512-hryI62eeChzczUvjGaDgAWcw2JqOmsGqqssJFZEML6ndaR8KExicTzac+NKm823T/p8d1QVFmLL5KYyH8Qotlg==","signatures":[{"sig":"MEQCIDh/76KWXZzs+DTSCpfOQBZ7MjAoLVXvzmOQG419IkN2AiB0pP8CdbRl3DbQZpmpJsgRUwjqEPezrywXdI4gHfLc7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12728328},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0-rc.1_1787457729122_0.564490400744055","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.12":{"name":"@yylo/cli","version":"0.1.0-rc.12","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.1.0-rc.12","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"25b6f2ede4bb98d6ce7c28b7417e24a1e53ee492","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.1.0-rc.12.tgz","fileCount":153,"integrity":"sha512-ZtB1zD/p7rw7yhSo+Tn11da8dCCOpKnssIWuoVNTOpKYIquOBGj57Es7cgD1wBz9gf6jusT7mDUqDwGAqqfCPw==","signatures":[{"sig":"MEYCIQCiuZDcki9tcxzsDSRNM+DfjlayrhRp2LBf0J1cEmJd2QIhAPEvBwjpqirvXomcOmxON04ABf0likGrL0THnw+0Zh7b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13384465},"main":"dist/index.js","_from":"file:/private/tmp/yylo-release-rc12-ledger-rc2-plan.json.artifacts/npm-cli/yylo-cli-0.1.0-rc.12.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/private/tmp/yylo-release-rc12-ledger-rc2-plan.json.artifacts/npm-cli/yylo-cli-0.1.0-rc.12.tgz","_integrity":"sha512-ZtB1zD/p7rw7yhSo+Tn11da8dCCOpKnssIWuoVNTOpKYIquOBGj57Es7cgD1wBz9gf6jusT7mDUqDwGAqqfCPw==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0-rc.12_1787628409099_0.5413830813259823","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@yylo/cli","version":"0.2.0","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.0","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"1ac30d68d6f855959bc3acd71e202f3de1a45e14","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.0.tgz","fileCount":157,"integrity":"sha512-zhM3Gdag4h8tZjKDXhX+4suJKi+CuFd2yA3iiRx4gY/aZxW6ipZQGJBhyg0c7TmwO9vry7hz9g9n4jvgUw/Ahg==","signatures":[{"sig":"MEUCIHQnkk0lqfIA8hwkk7lYZf8LG7SqGmGXna5hzZ5st3+JAiEA6WlbmhO4vusFiBz/hPV+vDcX81IBiPSkt+hGzMp6iMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14513118},"main":"dist/index.js","_from":"file:/tmp/yylo-release-plan-0.2.0-no-gh-release.json.artifacts/npm-cli/yylo-cli-0.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/tmp/yylo-release-plan-0.2.0-no-gh-release.json.artifacts/npm-cli/yylo-cli-0.2.0.tgz","_integrity":"sha512-zhM3Gdag4h8tZjKDXhX+4suJKi+CuFd2yA3iiRx4gY/aZxW6ipZQGJBhyg0c7TmwO9vry7hz9g9n4jvgUw/Ahg==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.0_1787849581439_0.42622524065664313","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-rc.1":{"name":"@yylo/cli","version":"0.2.1-rc.1","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.1-rc.1","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"b3af63b42a0eeb99f3df6a3d93f1b4421fb93d21","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.1-rc.1.tgz","fileCount":157,"integrity":"sha512-2NFPCxRnTrxCUnPSOR7xoR/csCDXTwFxHuIokdGO6r0IVjeoxlc6AZ6M5As1v023KIQQ0UzQEwLwnFP7QG49BQ==","signatures":[{"sig":"MEYCIQCgjAwXjTt+Olq4v7RU++pkcxlWusNAIoz38IpFwQYzZwIhAK/MDtVPodNKQFu7QlnhTicelVxyF/xqYCFWoGzOoyZI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15074914},"main":"dist/index.js","_from":"file:/private/tmp/yylo-cli-0.2.1-rc.1-npm/yylo-cli-0.2.1-rc.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/private/tmp/yylo-cli-0.2.1-rc.1-npm/yylo-cli-0.2.1-rc.1.tgz","_integrity":"sha512-2NFPCxRnTrxCUnPSOR7xoR/csCDXTwFxHuIokdGO6r0IVjeoxlc6AZ6M5As1v023KIQQ0UzQEwLwnFP7QG49BQ==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.1-rc.1_1787993138844_0.5537264774182316","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-rc.13":{"name":"@yylo/cli","version":"0.2.1-rc.13","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.1-rc.13","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"703eac49a7df8fe1f9841152e50612a57f89579d","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.1-rc.13.tgz","fileCount":161,"integrity":"sha512-D8CKIaiQGdCIjsjXV2p14m6Z4Gkihsm0TKeRE3Fc3E/IOo+V3QKqd+PE26CIk8tMUtVp5iZKP/IJI5CRuJP2MQ==","signatures":[{"sig":"MEUCIFD/VG+ACU+3wXV7EoAORDnfNj8AqG7zyO7gMFyw4V74AiEA5rXBK/T0QIu0dpXKbe+bxWxGyAMadlWS7S2MvPJNqvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15141492},"main":"dist/index.js","_from":"file:/private/tmp/yylo-cli-rc13-benchmark-rc9-plan.json.artifacts/npm-cli/yylo-cli-0.2.1-rc.13.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/private/tmp/yylo-cli-rc13-benchmark-rc9-plan.json.artifacts/npm-cli/yylo-cli-0.2.1-rc.13.tgz","_integrity":"sha512-D8CKIaiQGdCIjsjXV2p14m6Z4Gkihsm0TKeRE3Fc3E/IOo+V3QKqd+PE26CIk8tMUtVp5iZKP/IJI5CRuJP2MQ==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"9.5.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"18.15.0","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.1-rc.13_1788378846411_0.2648592650712627","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-rc.14":{"name":"@yylo/cli","version":"0.2.1-rc.14","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.1-rc.14","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"491c15df4660542ae71e5e21eb21dfc6248e3d20","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.1-rc.14.tgz","fileCount":161,"integrity":"sha512-W9ehV6j72XWFMJGlZkVTbla/PJT0QIr5OS2tHm9S5QjY5wfYbGZREz5385MKNZr3NPqXRHHYu9PUaQan2L2lWg==","signatures":[{"sig":"MEQCIGz4iNh5sUvM+blAQza8Hl/occw7f0njClzyeHwdk8u/AiB+QjcYDc7G/1e1t+mLhb8AUAByrtU2MT7Gyj4xHQHE3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15141492},"main":"dist/index.js","_from":"file:/private/tmp/yylo-cli-rc14-benchmark-rc9-plan.json.artifacts/npm-cli/yylo-cli-0.2.1-rc.14.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/private/tmp/yylo-cli-rc14-benchmark-rc9-plan.json.artifacts/npm-cli/yylo-cli-0.2.1-rc.14.tgz","_integrity":"sha512-W9ehV6j72XWFMJGlZkVTbla/PJT0QIr5OS2tHm9S5QjY5wfYbGZREz5385MKNZr3NPqXRHHYu9PUaQan2L2lWg==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"9.5.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"18.15.0","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0-rc.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.1-rc.14_1788380011489_0.07081189525771947","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@yylo/cli","version":"0.2.2","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.2","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"45b9c36e6779bd8b5681d2f3b3a1b953de7a5e70","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.2.tgz","fileCount":165,"integrity":"sha512-Lp9efAhOfH/Ni4Axl6RPUNzn4/1Qj/VcTtxEF29lUr8tGiDsb1ZtGw26R8b1nfelOXsOei7IygQo0LUrb6GE3g==","signatures":[{"sig":"MEUCIQDhTGGauNWzbItdAHURdsDyFH4eLNb+wbBgT9FTfmIAVwIgeMK2Wfl+ktz9bnIgizZbc+eNQ8uYLz0JfbeDbLK97O4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15139178},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/share/juno/runtime-receipts/artifacts/yylo-cli-0.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run test:skill-contracts && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-skills && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-skills":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/skills'; const dest = 'dist/templates/skills'; fs.copySync(src, dest, { recursive: true, dereference: true });\"","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node -e \"const fs = require('fs-extra'); const path = require('path'); for (const dir of ['scripts','prompts','wiki','config','controller-agent','workflows']) { const src = path.join('src/templates', dir); const dest = path.join('dist/templates', dir); if (!fs.existsSync(src)) throw new Error('Missing managed template directory: ' + src); fs.copySync(src, dest, { recursive: true }); } fs.copyFileSync('src/templates/managed-assets.json', 'dist/templates/managed-assets.json'); fs.removeSync('dist/templates/scripts/logs'); fs.readdirSync('dist/templates/scripts').filter(f => f.endsWith('.sh')).forEach(f => fs.chmodSync(path.join('dist/templates/scripts', f), 0o755));\"","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/share/juno/runtime-receipts/artifacts/yylo-cli-0.2.2.tgz","_integrity":"sha512-Lp9efAhOfH/Ni4Axl6RPUNzn4/1Qj/VcTtxEF29lUr8tGiDsb1ZtGw26R8b1nfelOXsOei7IygQo0LUrb6GE3g==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.1.0rc1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.2_1788637387790_0.8960758046827897","host":"s3://npm-registry-packages-npm-production"}},"0.2.3-rc.2":{"name":"@yylo/cli","version":"0.2.3-rc.2","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.3-rc.2","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"4dc614e66b0464455fd90dcbb3b267c5b7016e8e","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.3-rc.2.tgz","fileCount":139,"integrity":"sha512-IAv78TOTZdRg7k/nCfRh4k8Vx23/qt/7hNUccvUhafcEnGnO0ruK7zZfQ+a6cTdyigv3Axw/kaC2Z3/140qQkQ==","signatures":[{"sig":"MEQCIG3b/le6/DCUHre2hQmWSR0KJDznw/Ka7rnXQNFTFpZFAiBujyn4jx5V4IGeAg3AnQ9belcc5M7NpD9ummKUb3SyUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15118924},"main":"dist/index.js","_from":"file:/Users/mahdiyar/JunoReleaseReceipts/juno-mono-002/20260911T020000Z-yylo-cli-0.2.3-rc.2-benchmark-0.1.1-rc.2/yylo-cli-0.2.3-rc.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/JunoReleaseReceipts/juno-mono-002/20260911T020000Z-yylo-cli-0.2.3-rc.2-benchmark-0.1.1-rc.2/yylo-cli-0.2.3-rc.2.tgz","_integrity":"sha512-IAv78TOTZdRg7k/nCfRh4k8Vx23/qt/7hNUccvUhafcEnGnO0ruK7zZfQ+a6cTdyigv3Axw/kaC2Z3/140qQkQ==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.2.0"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.1-rc.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.3-rc.2_1789099218678_0.42507820386042394","host":"s3://npm-registry-packages-npm-production"}},"0.2.3-rc.3":{"name":"@yylo/cli","version":"0.2.3-rc.3","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.3-rc.3","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"ca22d0022e593d03be3a8fed3d22230f648b450c","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.3-rc.3.tgz","fileCount":136,"integrity":"sha512-6+dF/oqXEeB7UHQQUXMPqiOabdM+OLggk2IdggUiQum3j76UlvxQBzbVv3kmeInviZcmbEyz46ZJorkXXibzgw==","signatures":[{"sig":"MEUCIQCSQFlHAzkALcH1g9zmPgEPL/o2D7pbCHnUs6KMRo+e3wIgS6KHO6PcC9RBH2w1cfqyWoS2kf8QjHThT6nuQItFNXM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14531807},"main":"dist/index.js","_from":"file:/Users/mahdiyar/JunoMigrationReceipts/juno-mono-002/release-artifacts/v0.2.3-rc.3-5bacefc5039927ff0bc9af868b62e8c94bd451a6/yylo-cli-0.2.3-rc.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/JunoMigrationReceipts/juno-mono-002/release-artifacts/v0.2.3-rc.3-5bacefc5039927ff0bc9af868b62e8c94bd451a6/yylo-cli-0.2.3-rc.3.tgz","_integrity":"sha512-6+dF/oqXEeB7UHQQUXMPqiOabdM+OLggk2IdggUiQum3j76UlvxQBzbVv3kmeInviZcmbEyz46ZJorkXXibzgw==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.3.1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.1-rc.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.3-rc.3_1789355900676_0.01090784027339664","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@yylo/cli","version":"0.2.3","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.3","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"5f4a0193e3cf9bbd0c6c9b99aea9de400edaadbd","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.3.tgz","fileCount":136,"integrity":"sha512-ghK40rh6nQs+nrE48DrmEg8QxTU9AFhKPve2dK+BATMhfv9ey/cE+sCk4H13fyK4c11x8ac5jxPkfDeqevbYWQ==","signatures":[{"sig":"MEUCIQCZQzgp9U/DEUp06Wh65eUWYO8fHUOFd8qW3JgYQGfoDgIgezdjPUArQKig6S8RKzsmdSf1ZhQKFcuIjhtepbFf9hc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15825599},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/share/yylo/releases/cli-0.2.3-3ecc4d8cadc1/artifacts/yylo-cli-0.2.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/share/yylo/releases/cli-0.2.3-3ecc4d8cadc1/artifacts/yylo-cli-0.2.3.tgz","_integrity":"sha512-ghK40rh6nQs+nrE48DrmEg8QxTU9AFhKPve2dK+BATMhfv9ey/cE+sCk4H13fyK4c11x8ac5jxPkfDeqevbYWQ==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.3.1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.3_1789544080387_0.8164069326984806","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@yylo/cli","version":"0.2.5","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.5","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"66e8a632da00e3122f887c0c218baaee8887ca61","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.5.tgz","fileCount":146,"integrity":"sha512-1L/rD4KY3Sh7yEzQmJnr0ezoU+Eq1+UkVjTLu/AKaJAmXU1bqJ5wgw+vLdVyCqg85ZUFKSMZRnbtYXRTbhFwIg==","signatures":[{"sig":"MEYCIQC7o6OGkMGTVS60U0yNe4IMQ8TWqjaVHe0qCDmNeHVmvQIhAIH+8DIJ2VdA4QjnVp94Mq15nEqRJh5tZqz32Od4lwNM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmAW9Dnbz07yda/ZT7qa1nhigd++nvY2P0VDvWRF9VwQIhAMJRmrCtG3cbZqJIolhRbu13HKXa1U3xf9Wqfw+t4mPK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17361402},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/state/yylo/release-artifacts/v0.2.5-cced643e027d8d9e04d867cffbdd9735e0afe26d-canonical-temp/yylo-cli-0.2.5.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:instruction-compatibility -- --check && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:controller-upgrade":"node scripts/verify-controller-upgrade.mjs","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","generate:instruction-compatibility":"node scripts/generate-instruction-compatibility.mjs","test:headless-presentation-package":"node scripts/verify-headless-presentation.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/state/yylo/release-artifacts/v0.2.5-cced643e027d8d9e04d867cffbdd9735e0afe26d-canonical-temp/yylo-cli-0.2.5.tgz","_integrity":"sha512-1L/rD4KY3Sh7yEzQmJnr0ezoU+Eq1+UkVjTLu/AKaJAmXU1bqJ5wgw+vLdVyCqg85ZUFKSMZRnbtYXRTbhFwIg==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.3.1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.5_1789696296068_0.7273486476515822","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@yylo/cli","version":"0.2.6","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.6","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"9e7301f7099d73117ad9f4a8c00299c39e5656d0","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.6.tgz","fileCount":146,"integrity":"sha512-YKod3BPfLHZg4RogCl3iR8seNTKCC0MdtX2N2Y++empV2aMk8fcfuYHZRLiGW3eA0/PUeOcIOXL4XSB/O1JD/A==","signatures":[{"sig":"MEUCIQDV/xSwgutPPoERQEQ262TfPWrFOILNTzvkDxaLVG05NQIgQSWL5/DwIbxI0IOABaj7/XFTd1MRKIj3t4l+1P2hm7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHotUOaKTEs59GtwUFmeSeZpG+uC+4ImGOzuea9fkpk+AiEAyChlzPjKANm8SUlnONfmRF0DmJKgdpIW0Y6oI5q5dGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17365260},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.6-canonical-20260918T213147/artifacts/yylo-cli-0.2.6.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:instruction-compatibility -- --check && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:controller-upgrade":"node scripts/verify-controller-upgrade.mjs","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","generate:instruction-compatibility":"node scripts/generate-instruction-compatibility.mjs","test:headless-presentation-package":"node scripts/verify-headless-presentation.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.6-canonical-20260918T213147/artifacts/yylo-cli-0.2.6.tgz","_integrity":"sha512-YKod3BPfLHZg4RogCl3iR8seNTKCC0MdtX2N2Y++empV2aMk8fcfuYHZRLiGW3eA0/PUeOcIOXL4XSB/O1JD/A==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.3.1"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.6_1789783535401_0.24273111825251825","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@yylo/cli","version":"0.2.8","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.8","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"8428df4df15cc5a1327703668a4514e9b8ce1a50","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.8.tgz","fileCount":148,"integrity":"sha512-gEZBTpsj/PyoAG4vf0mOzJy1Y5V0tlubbew8hB6IA8ZMyhlNVollEDd8aIdNyig2S0rBWmFtp+1dj6QpwFyMnA==","signatures":[{"sig":"MEQCID5iMn9vSxnburl9/v9rDZ3iKD8AHU0nGUXf5d0Qwh/YAiAB/Wlz0KSF/2h3e2cWba3Vpo7jjuNOAGc6jsktb4bRJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDTfyMxcMENdxSY+L9nBgkWs0w5dzi+NddUAjEav03i9QIgfHkyKhsSgARc3P8PbY48zJeVEhCNSnk0WSKzvke+sOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17155966},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/state/yylo/release-artifacts/skills-fix-ea42b7342-20260921T145129/artifacts/yylo-cli-0.2.8.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:instruction-compatibility -- --check && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:controller-upgrade":"node scripts/verify-controller-upgrade.mjs","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","generate:instruction-compatibility":"node scripts/generate-instruction-compatibility.mjs","test:headless-presentation-package":"node scripts/verify-headless-presentation.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/state/yylo/release-artifacts/skills-fix-ea42b7342-20260921T145129/artifacts/yylo-cli-0.2.8.tgz","_integrity":"sha512-gEZBTpsj/PyoAG4vf0mOzJy1Y5V0tlubbew8hB6IA8ZMyhlNVollEDd8aIdNyig2S0rBWmFtp+1dj6QpwFyMnA==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.3.3"},"yyloSkills":{"version":"^2.0.2"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.8_1790019117106_0.6023033225221357","host":"s3://npm-registry-packages-npm-production"},"yyloControllerGeneration":{"ordinaryDispatch":"explicit-only-v1"}},"0.2.9":{"name":"@yylo/cli","version":"0.2.9","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","_id":"@yylo/cli@0.2.9","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"homepage":"https://yylo.dev","bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"dist":{"shasum":"dd689034ea596cf4619d2bedfc0413f27d0910e6","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.9.tgz","fileCount":148,"integrity":"sha512-mh1VZyou6wXCdSPF88FSIEGMVmG7XPX5xuDSSEHaNXyGlaG3ZBAceg8bwDibdSON0uxGkMoU7dJWpS/3mCxbmQ==","signatures":[{"sig":"MEUCIQDqBxwTd32ZNjWNtEyyybZ/tXAg73TVMqO6SiHsX17AtwIgcUJhOGA6SJSy6dLlNCYOTVkPME0vFb9sKx2xGzPmpmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAwkGjtloElZhfQE2XTnyk9248aEGs+9gL4ybIEUqO0pAiBIHBVlZx1AekMgt6HWaL8/xeaZOYWI8mOoUiWOVpMCYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17172359},"main":"dist/index.js","_from":"file:/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.9-0454199c-01a0cf05/yylo-cli-0.2.9.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:instruction-compatibility -- --check && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:controller-upgrade":"node scripts/verify-controller-upgrade.mjs","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","generate:instruction-compatibility":"node scripts/generate-instruction-compatibility.mjs","test:headless-presentation-package":"node scripts/verify-headless-presentation.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"_resolved":"/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.9-0454199c-01a0cf05/yylo-cli-0.2.9.tgz","_integrity":"sha512-mh1VZyou6wXCdSPF88FSIEGMVmG7XPX5xuDSSEHaNXyGlaG3ZBAceg8bwDibdSON0uxGkMoU7dJWpS/3mCxbmQ==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.4.0"},"yyloSkills":{"version":"^2.0.4"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.1.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.9_1790191213776_0.6663963040574772","host":"s3://npm-registry-packages-npm-production"},"yyloControllerGeneration":{"ordinaryDispatch":"explicit-only-v1"}},"0.2.10":{"_id":"@yylo/cli@0.2.10","bin":{"yy":"dist/bin/yylo.sh","ypl":"dist/bin/ypl.sh","yylo":"dist/bin/yylo.sh","feedback-yylo":"dist/bin/feedback-collector.mjs"},"bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"dist":{"shasum":"4d3fab37506ade9a53f258e772881ccccfff8f8e","tarball":"https://registry.npmjs.org/@yylo/cli/-/cli-0.2.10.tgz","fileCount":154,"integrity":"sha512-QSix4FKsten/ZfbuyeGzLNSmQM6obnJ3/EB+BdCiMAzh6eFpuMvwFxWNo2vV3I6UNmci9hUL/EQvIPMlyoUuYg==","signatures":[{"sig":"MEUCIEjYw6SB+5T1B2blJdp5Wi1bcCcQqvPC4K7DcVV46dG2AiEAuoAC7mbe7KvZPKqWzf2Cl4LMvyY2HVBB4f3j3TKkBMU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDb9mRw2Qvwo+ECscSFuMBseEwQjiWjCp1j4c+jL/ObrAiAndsjrY08bfTZQLf76GuYRWGf5ho1eDMOHFmbyHXLAxw=="}],"unpackedSize":17348251},"main":"dist/index.js","name":"@yylo/cli","_from":"file:/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.10-eb00946d8-01a0d4ce/yylo-cli-0.2.10.tgz","types":"dist/index.d.ts","author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"module":"dist/index.mjs","engines":{"node":">=20.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"license":"MIT","scripts":{"cli":"tsx src/bin/cli.ts","dev":"tsx src/bin/cli.ts","lint":"eslint src --ext .ts","test":"vitest run -c ./vitest.fast.config.ts --reporter=dot --silent","build":"npm run generate:instruction-compatibility -- --check && npm run generate:implementation-contract -- --check && tsup && npm run build:copy-templates && npm run build:copy-services && npm run build:copy-extensions && npm run build:copy-wrapper && node scripts/clean-template-bytecode.mjs dist/templates","clean":"rimraf dist","deploy":"bash scripts/publish-all.sh patch","format":"prettier --write \"src/**/*.{ts,md}\"","prepack":"npm run clean && npm run build","lint:fix":"eslint src --ext .ts --fix","test:e2e":"vitest run src/__tests__/e2e","build:exp":"npm run build && bash scripts/install-exp.sh install","test:full":"vitest run","test:unit":"vitest run src/__tests__/unit","typecheck":"tsc --noEmit","test:watch":"vitest -c ./vitest.fast.config.ts","build:watch":"tsup --watch","test:binary":"vitest run src/cli/__tests__/binary-execution-interactive.test.ts","test:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ -q","test:simple":"npm test -- src/utils/__tests__/simple-init.test.ts src/utils/__tests__/simple-workspace-routing.test.ts src/core/__tests__/simple-startup.test.ts src/core/__tests__/session-simple.test.ts","deploy:major":"bash scripts/publish-all.sh major","deploy:minor":"bash scripts/publish-all.sh minor","format:check":"prettier --check \"src/**/*.{ts,md}\"","test:coverage":"bash scripts/run-coverage.sh","uninstall:exp":"bash scripts/install-exp.sh uninstall","deploy:dry-run":"bash scripts/publish-all.sh patch --dry-run","help:test:binary":"bash ./scripts/test-usage.sh binary","test:coverage:ts":"vitest run --coverage","test:integration":"vitest run src/__tests__/integration","build:copy-wrapper":"node -e \"const fs = require('fs-extra'); fs.copySync('src/bin/yylo.sh', 'dist/bin/yylo.sh'); fs.copySync('src/bin/ypl.sh', 'dist/bin/ypl.sh'); fs.chmodSync('dist/bin/yylo.sh', 0o755); fs.chmodSync('dist/bin/ypl.sh', 0o755);\"","completion:install":"tsx src/bin/cli.ts --install-completion","toolchain:juno-002":"bash scripts/juno-002-source-toolchain.sh","workspace:relocate":"node scripts/workspace-relocation.mjs","build:copy-services":"node -e \"const fs = require('fs-extra'); const path = require('path'); const src = 'src/templates/services'; const dest = 'dist/templates/services'; fs.copySync(src, dest, { recursive: true }); const required = ['codex.py','claude.py','gemini.py','pi.py','environment_boundary.py']; const missing = required.filter(file => !fs.existsSync(path.join(dest, file))); if (missing.length) { throw new Error('Missing required service scripts in dist: ' + missing.join(', ')); } required.forEach(file => fs.chmodSync(path.join(dest, file), 0o755));\"","test:managed-assets":"node scripts/verify-managed-assets.mjs","test:simple-package":"node scripts/verify-simple-package.mjs","build:copy-templates":"node scripts/copy-templates.mjs","test:coverage:python":"python -m pytest test_pi_service/ test_codex_streaming/ test_claude_service/ test_slack_integration/ test_github_integration/ test_attachments/ --cov=src/templates/services --cov=src/templates/scripts --cov-report=lcov:coverage/python-lcov.info --cov-report=term-missing -q","test:skill-contracts":"node scripts/verify-skill-argument-contracts.mjs","build:copy-extensions":"node -e \"const fs = require('fs-extra'); const src = 'src/templates/extensions'; const dest = 'dist/templates/extensions'; if (fs.existsSync(src)) { fs.copySync(src, dest, { recursive: true }); }\"","test:path-portability":"node scripts/check-path-portability.mjs ..","test:controller-upgrade":"node scripts/verify-controller-upgrade.mjs","test:fresh-init-package":"node scripts/verify-fresh-init-package.mjs","test:bolt-package-canary":"node scripts/verify-bolt-package-canary.mjs","test:task-workspace:seeded":"node scripts/test-task-workspace.mjs --mode seeded","test:implementation-contract":"node scripts/generate-implementation-contract.mjs --check","test:task-workspace:affected":"node scripts/test-task-workspace.mjs --mode affected","test:task-workspace:complete":"node scripts/test-task-workspace.mjs --mode complete","test:task-workspace:hermetic":"node scripts/test-task-workspace.mjs --mode hermetic","test:config-migration-package":"node scripts/verify-config-migration.mjs","test:ledger-release-artifacts":"node scripts/verify-ledger-release-artifacts.mjs","test:template-bytecode-package":"node scripts/verify-template-bytecode-cleanup.mjs","generate:implementation-contract":"node scripts/generate-implementation-contract.mjs","test:benchmark-release-artifacts":"node scripts/verify-benchmark-release-artifacts.mjs","generate:instruction-compatibility":"node scripts/generate-instruction-compatibility.mjs","test:headless-presentation-package":"node scripts/verify-headless-presentation.mjs","test:installed-test-fixture-package":"node scripts/verify-installed-test-fixture.mjs"},"version":"0.2.10","_npmUser":{"name":"the_golch","email":"golchin@askbudi.ai"},"homepage":"https://yylo.dev","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"_resolved":"/Users/mahdiyar/.local/state/yylo/release-artifacts/cli-0.2.10-eb00946d8-01a0d4ce/yylo-cli-0.2.10.tgz","_integrity":"sha512-QSix4FKsten/ZfbuyeGzLNSmQM6obnJ3/EB+BdCiMAzh6eFpuMvwFxWNo2vV3I6UNmci9hUL/EQvIPMlyoUuYg==","repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"yyloLedger":{"version":"0.4.0"},"yyloSkills":{"version":"^2.1.0"},"_npmVersion":"11.17.0","description":"YYLO (why-lo): task-driven AI subagent orchestration.","directories":{},"maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.22.4","glob":"^13.0.6","uuid":"^9.0.1","chalk":"^5.3.0","execa":"^8.0.1","which":"^4.0.0","semver":"^7.5.4","js-yaml":"^4.1.1","fs-extra":"^11.1.1","commander":"^11.1.0","cli-table3":"^0.6.5","strip-ansi":"^7.1.2","supports-color":"^9.4.0"},"publishConfig":{"access":"public"},"yyloBenchmark":{"version":"0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","tsup":"^8.5.1","eslint":"^8.55.0","rimraf":"^6.1.3","vitest":"^1.0.4","sucrase":"^3.35.1","prettier":"^3.1.1","happy-dom":"^12.10.3","typescript":"^5.3.3","@types/node":"^20.10.0","@types/uuid":"^9.0.7","@types/semver":"^7.5.6","@types/js-yaml":"^4.0.9","@types/fs-extra":"^11.0.4","@vitest/coverage-v8":"^1.0.4","eslint-config-prettier":"^9.1.0","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.2.10_1790278285658_0.366933768280967"},"yyloControllerGeneration":{"ordinaryDispatch":"explicit-only-v1"}}},"time":{"created":"2026-08-23T04:02:08.972Z","modified":"2026-09-24T19:31:26.078Z","0.1.0-rc.1":"2026-08-23T04:02:09.366Z","0.1.0-rc.12":"2026-08-25T03:26:49.437Z","0.2.0":"2026-08-27T16:53:01.805Z","0.2.1-rc.1":"2026-08-29T08:45:39.133Z","0.2.1-rc.13":"2026-09-02T19:54:06.656Z","0.2.1-rc.14":"2026-09-02T20:13:31.725Z","0.2.2":"2026-09-05T19:43:08.007Z","0.2.3-rc.2":"2026-09-11T04:00:18.944Z","0.2.3-rc.3":"2026-09-14T03:18:20.952Z","0.2.3":"2026-09-16T07:34:40.616Z","0.2.5":"2026-09-18T01:51:36.301Z","0.2.6":"2026-09-19T02:05:35.590Z","0.2.8":"2026-09-21T19:31:57.320Z","0.2.9":"2026-09-23T19:20:13.995Z","0.2.10":"2026-09-24T19:31:25.896Z"},"bugs":{"url":"https://github.com/yylo-dev/yylo/issues"},"author":{"name":"JUNO AI INC.","email":"support@yylo.dev"},"license":"MIT","homepage":"https://yylo.dev","keywords":["Ralph","Ralph Wiggum","Claude code","backlog ralph","claude lopp","ai","cli","typescript","mcp","subagents","automation","claude","cursor","codex","gemini"],"repository":{"url":"git+https://github.com/yylo-dev/yylo.git","type":"git"},"description":"YYLO (why-lo): task-driven AI subagent orchestration.","maintainers":[{"name":"the_golch","email":"golchin@askbudi.ai"}],"readme":"# YYLO CLI\n\n[![Mentioned in Awesome Coding Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/kailiu42/awesome-coding-agents) [![Mentioned in Awesome Gemini CLI](https://awesome.re/mentioned-badge.svg)](https://github.com/Piebald-AI/awesome-gemini-cli) [![Mentioned in Collective AI Tools](https://awesome.re/mentioned-badge.svg)](https://github.com/hanishrao/collective-ai-tools) [![Mentioned in Awesome Agent Orchestrators](https://awesome.re/mentioned-badge.svg)](https://github.com/andyrewlee/awesome-agent-orchestrators) [![Mentioned in Site for Developers](https://awesome.re/mentioned-badge.svg)](https://github.com/currenjin/site-for-developers) [![Mentioned in Awesome Vibe Coding Resources](https://awesome.re/mentioned-badge.svg)](https://github.com/acvnace/awesome-vibe-coding-resources) [![Mentioned in Awesome AI Governance](https://awesome.re/mentioned-badge.svg)](https://github.com/agentrust-io/awesome-ai-governance) [![Mentioned in Awesome Local First](https://awesome.re/mentioned-badge.svg)](https://github.com/alantriesagain/awesome-local-first) [![Mentioned in Awesome Opensource AI](https://awesome.re/mentioned-badge.svg)](https://github.com/alvinreal/awesome-opensource-ai) [![Mentioned in Awesome AI Agents 2026](https://awesome.re/mentioned-badge.svg)](https://github.com/ARUNAGIRINATHAN-K/awesome-ai-agents-2026) [![Mentioned in AI Tools Directory](https://awesome.re/mentioned-badge.svg)](https://github.com/Aurelius77/AI-TOOLS-DIRECTORY) [![Mentioned in Awesome GPT](https://awesome.re/mentioned-badge.svg)](https://github.com/awesome-gptX/awesome-gpt) [![Mentioned in Awesome AI Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/brandonhimpfen/awesome-ai-agents) [![Mentioned in Awesome AI Tools (Charles Teh)](https://awesome.re/mentioned-badge.svg)](https://github.com/charlesteh/awesome-ai-tools) [![Mentioned in AI Agent Infra List](https://awesome.re/mentioned-badge.svg)](https://github.com/chgaowei/ai-agent-infra-list) [![Mentioned in Awesome Agents Team](https://awesome.re/mentioned-badge.svg)](https://github.com/CiferaTeam/awesome-agents-team) [![Mentioned in Ultimate NodeJs Resources](https://awesome.re/mentioned-badge.svg)](https://github.com/DhanushNehru/Ultimate-NodeJs-Resources) [![Mentioned in Awesome AI Tools Resources](https://awesome.re/mentioned-badge.svg)](https://github.com/dr-mushtaq/Awesome-AI-Tools-Resources) [![Mentioned in Awesome Efficient Devtools](https://awesome.re/mentioned-badge.svg)](https://github.com/ejboy/awesome-efficient-devtools) [![Mentioned in Awesome Spec Driven Development](https://awesome.re/mentioned-badge.svg)](https://github.com/Engineering4AI/awesome-spec-driven-development) [![Mentioned in Awesome AI Agents (Frangel Barrera)](https://awesome.re/mentioned-badge.svg)](https://github.com/frangelbarrera/awesome-ai-agents) [![Mentioned in Awesome Autonomus AI Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/HA2345567/awesome-autonomus-ai-agents) [![Mentioned in Awesome Codex](https://awesome.re/mentioned-badge.svg)](https://github.com/ichangyou/awesome-codex) [![Mentioned in Awesome Agent Orchestration Platforms](https://awesome.re/mentioned-badge.svg)](https://github.com/ishandutta2007/Awesome-Agent-Orchestration-Platforms) [![Mentioned in Awesome AI Tools (ishandutta2007)](https://awesome.re/mentioned-badge.svg)](https://github.com/ishandutta2007/awesome-ai-tools) [![Mentioned in Awesome Multi-Agent AI Harnesses](https://awesome.re/mentioned-badge.svg)](https://github.com/ishandutta2007/Awesome-Multi-Agent-AI-Harnesses) [![Mentioned in AI Landscape](https://awesome.re/mentioned-badge.svg)](https://github.com/kiliczsh/ailandscape.org) [![Mentioned in Awesome CLI TUI Software](https://awesome.re/mentioned-badge.svg)](https://github.com/lgaggini/awesome-cli-tui-software) [![Mentioned in Awesome AI (LinuxSuRen)](https://awesome.re/mentioned-badge.svg)](https://github.com/LinuxSuRen/awesome-ai) [![Mentioned in LLM Agents Devtools](https://awesome.re/mentioned-badge.svg)](https://github.com/M1n9X/llm_agents_devtools) [![Mentioned in Awesome AI Agent Tools](https://awesome.re/mentioned-badge.svg)](https://github.com/michielhdoteth/awesome-ai-agent-tools) [![Mentioned in Awesome ChatGPT Claude Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/milisp/awesome-chatgpt-claude-agents) [![Mentioned in Awesome Codex CLI](https://awesome.re/mentioned-badge.svg)](https://github.com/milisp/awesome-codex-cli) [![Mentioned in Rise of Machine](https://awesome.re/mentioned-badge.svg)](https://github.com/planetabhi/riseofmachine) [![Mentioned in Awesome Agent Loops](https://awesome.re/mentioned-badge.svg)](https://github.com/rudy2steiner/awesome-agent-loops) [![Mentioned in Best of Agent Harnesses](https://awesome.re/mentioned-badge.svg)](https://github.com/RyanAlberts/best-of-Agent-Harnesses) [![Mentioned in Awesome AI Tools (sajadh76)](https://awesome.re/mentioned-badge.svg)](https://github.com/sajadh76/awesome-AI-tools) [![Mentioned in Awesome Pi Coding Agent](https://awesome.re/mentioned-badge.svg)](https://github.com/shaftoe/awesome-pi-coding-agent) [![Mentioned in Awesome Platform Engineering (shospodarets)](https://awesome.re/mentioned-badge.svg)](https://github.com/shospodarets/awesome-platform-engineering) [![Mentioned in Awesome AI Agent Governance](https://awesome.re/mentioned-badge.svg)](https://github.com/systempromptio/awesome-ai-agent-governance) [![Mentioned in Tool Directory](https://awesome.re/mentioned-badge.svg)](https://github.com/tejas-singh-0212/tool-directory) [![Mentioned in Awesome Vibe Coding (tysoncung)](https://awesome.re/mentioned-badge.svg)](https://github.com/tysoncung/awesome-vibe-coding) [![Mentioned in Awesome Agentic AI](https://awesome.re/mentioned-badge.svg)](https://github.com/yadavanujkumar/awesome-agentic-ai) [![Mentioned in Awesome AI Devtools](https://awesome.re/mentioned-badge.svg)](https://github.com/yeaight7/awesome-ai-devtools) [![Mentioned in Awesome AI Coding](https://awesome.re/mentioned-badge.svg)](https://github.com/youxufkhan/awesome-ai-coding) [![Mentioned in Awesome macOS](https://awesome.re/mentioned-badge.svg)](https://github.com/sraodev/awesome-macOS) [![Mentioned in Awesome AI Agents (Jenqyang)](https://awesome.re/mentioned-badge.svg)](https://github.com/Jenqyang/Awesome-AI-Agents) [![Mentioned in AI Tools Catalogue](https://awesome.re/mentioned-badge.svg)](https://github.com/robertsmrek/AI-Tools-Catalogue) [![Mentioned in Artificial Intelligence Universe](https://awesome.re/mentioned-badge.svg)](https://github.com/frangelbarrera/Artificial-Intelligence-Universe) [![Mentioned in Awesome AI Agents (NipunaRanasinghe)](https://awesome.re/mentioned-badge.svg)](https://github.com/NipunaRanasinghe/awesome-ai-agents) [![Mentioned in Awesome Gemini CLI Extensions](https://awesome.re/mentioned-badge.svg)](https://github.com/Piebald-AI/awesome-gemini-cli-extensions) [![Mentioned in Awesome AI Coding (dalisoft)](https://awesome.re/mentioned-badge.svg)](https://github.com/dalisoft/awesome-ai-coding) [![Mentioned in Awesome Windows](https://awesome.re/mentioned-badge.svg)](https://github.com/thechampagne/awesome-windows) [![Mentioned in Awesome Agent Workspaces](https://awesome.re/mentioned-badge.svg)](https://github.com/jimy-r/awesome-agent-workspaces) [![Mentioned in Awesome AI ML DL](https://awesome.re/mentioned-badge.svg)](https://github.com/neomatrix369/awesome-ai-ml-dl) [![Mentioned in Awesome Opensource](https://awesome.re/mentioned-badge.svg)](https://github.com/hadez8877/awesome-opensource) [![Mentioned in Awesome Antigravity Skills](https://awesome.re/mentioned-badge.svg)](https://github.com/ishandutta2007/Awesome-Antigravity-Skills) [![Mentioned in AI Tools Manager](https://awesome.re/mentioned-badge.svg)](https://github.com/ArshdeepGrover/ai-tools-manager) [![Mentioned in Awesome Agent Trust](https://awesome.re/mentioned-badge.svg)](https://github.com/CodeSigils/awesome-agent-trust) [![Mentioned in Awesome Mac](https://awesome.re/mentioned-badge.svg)](https://github.com/abordage/awesome-mac) [![Mentioned in Awesome Solo AI](https://awesome.re/mentioned-badge.svg)](https://github.com/yerdaulet-damir/awesome-solo-ai) [![Mentioned in Which Coding Tools](https://awesome.re/mentioned-badge.svg)](https://github.com/benjamincanac/whichcodingtools) [![Mentioned in Awesome Agent Tools](https://awesome.re/mentioned-badge.svg)](https://github.com/Awakehsh/awesome-agent-tools) [![Mentioned in Jump Skills](https://awesome.re/mentioned-badge.svg)](https://github.com/fabricioctelles/jump-skills) [![Mentioned in Awesome SRE Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/last9/awesome-sre-agents) [![Mentioned in Awesome Agents](https://awesome.re/mentioned-badge.svg)](https://github.com/Scottcjn/awesome-agents) [![Mentioned in Awesome AI Plugins](https://awesome.re/mentioned-badge.svg)](https://github.com/hashgraph-online/awesome-ai-plugins)\n\n\nYYLO is a command-line orchestrator for coding agents, repeatable workflows, and receipt-backed repository changes. It is for developers who want a quick agent loop and for project operators who need typed task, validation, merge, and release-readiness boundaries.\n\n- npm package: [`@yylo/cli`](https://www.npmjs.com/package/%40yylo%2Fcli)\n- Commands: `yylo` and `yy` (equivalent); `ypl` is `yy pi --live`\n- Source: [yylo-dev/yylo](https://github.com/yylo-dev/yylo)\n\nYYLO orchestrates work. [YYLO Ledger](https://github.com/yylo-dev/yylo-ledger) is the independent Git-native Record/task store, and [YYLO Benchmark](https://github.com/yylo-dev/yylo-benchmark) is the independent evaluation/evidence package. `yy ledger` and `yy benchmark` delegate to those separately installed CLIs; they are not bundled alternate implementations.\n\n## Terminal\n\n**Live agent session** — `ypl` (`yy pi --live`) runs an interactive terminal agent; tool calls, streamed output, and the status bar render in the terminal:\n\n![yylo live terminal session](assets/yylo-tui-live-session.png)\n\n**Execution summary** — after each run the orchestrator prints iterations, tool calls, cost, and session ids:\n\n![yylo execution summary](assets/yylo-execution-summary.png)\n\n## Quick start: install to first successful command\n\n**Prerequisites:** Node.js 20.10 or newer, npm, and Git.\n\n```bash\nnpm install --global '@yylo/cli@latest'\nyy --version\n\nmkdir yylo-demo\ncd yylo-demo\ngit init\nyy init --task \"Document the onboarding path\" --subagent pi\npwd # execute explicitly; watch is an optional read-only observer\n```\n\nA successful run prints the installed YYLO version, initializes `.juno_task/`, then emits a watch receipt with `\"state\":\"COMPLETED\"`, `\"exit_code\":0`, and nonzero `log_bytes`. This canary does not contact a model provider. In an empty, unborn Git repository, `yy init` creates the initial workspace commit, keeps the original branch as the product target, and creates a detached protected integration-owner worktree under the user state directory. Existing or dirty repositories are never committed or rearranged by this bootstrap.\n\nInspect the initialized workspace and exact command surface:\n\n```bash\nyy info --json\nyy doctor workspace\nyy --help\n```\n\n`doctor workspace` is intentionally nonzero when it finds an actionable topology problem; it never fetches or changes the workspace.\n\n### Stable and prerelease channels\n\nThe stable npm channel is `@latest` (`0.2.2`). Prereleases remain on `@next`:\n\n```bash\n# Stable\nnpm install --global '@yylo/cli@latest'\n\n# Explicit prerelease\nnpm install --global '@yylo/cli@next'\n# Exact version matching this checkout (once published)\nnpm install -g @yylo/cli@0.2.10\n\nnpm view '@yylo/cli' version dist-tags --json\nyy --version\n```\n\nThis unreleased source targets CLI **0.2.10**, requiring **Ledger 0.4.0 exactly** for universal\nRecord retrieval and storage-kind-prefixed IDs. Older Ledger 0.3.3, prereleases,\nand later versions are rejected before delegation. Install the matching Ledger\nexplicitly once published; ordinary delegation does not auto-install a substitute.\nA source bump neither publishes these versions nor activates installed runtimes.\n\nPin an exact version in CI. Installing `@next` is an intentional prerelease choice.\nThe first guarded release-helper checkpoint is exact `--set v0.1.0-rc.1`; later releases must use their separately authorized exact SemVer.\n\nNext: [run an agent](#beginner-agent-workflow), [manage a typed task](#typed-task-and-merge-flow), or [build a managed workflow](#managed-workflows-and-evidence).\n\n### Install agent skills explicitly\n\nYYLO skill content is versioned independently in the public\n[`yylo-dev/yylo-skills`](https://github.com/yylo-dev/yylo-skills) repository and\nis not bundled in `@yylo/cli`. This CLI source requires stable skills `^2.1.0`, declared\nin `package.json` as `yyloSkills.version`. Install the latest compatible stable\nrelease, or pin an exact compatible version once it is published. Source version\n2.1.0 is not evidence that this skills release is available:\n\n```bash\nyy skills install\nyy skills install --version 2.1.0\nyy skills update\nyy skills status\n```\n\nOnly `skills install` and `skills update` access the network. Acquisition is\nstaged through `npx skills add` first and falls back to a shallow exact-tag Git\nclone. The seven user-intent-first skills (`artifact-yylo`, `ledger-tasks-yylo`,\n`plan-ledger-tasks-yylo`, `ralph-loop-yylo`, `understand-project-yylo`,\n`wiki-yylo`, and `workflow-yylo`) are copied to `.agents/skills`,\n`.claude/skills`, and `.pi/skills`. During install/update, unchanged receipt-owned\ncopies upgrade automatically without `--force`. Customized or unrecorded differing\ncanonical directories refuse before mutation; review before explicitly forcing\nreplacement. An explicit install/update retires a legacy YYLO skill only when its\nlocal install record and current digest prove it unchanged; customized/unrecorded\nlegacy and unrelated skills remain preserved. Status flags these legacy copies\nbecause they can still inject obsolete instructions; review them separately,\nnever infer cleanup authority from successful installation.\n\n`skills list` and `skills status` inspect local bytes and receipts offline. Status\nreports the required range and outdated releases even when their hashes match.\nNo compatible published release means installation fails without changing skills;\nit never falls back to an old release or an unsupported future major. Installing\nthe CLI alone does not install/update skills, and `scripts update` does not own\nskills. Maintainers must publish the reviewed immutable skill release before\nshipping a CLI that requires it; publication remains separately authorized.\n\n## What YYLO owns\n\n| Need | Public surface | Boundary |\n| --- | --- | --- |\n| Agent run | `yy pi`, `yy start`, and the agent aliases listed by `yy --help` | Provider credentials and model availability remain external. |\n| Session continuity | `continue`, `clone`, `branches`, `switch`, `continuity` | Scope state is isolated and explicit; cleanup is planned and reversible. |\n| Optional observation | `watch status|await|follow` | Read existing execution evidence; never launch, retry, cancel, or complete tasks. |\n| Validation evidence | `evidence run|status|await` | Content-addressed task evidence tied to exact inputs. |\n| Repository topology | `info`, `where`, `doctor workspace`, `integration` | Read-only discovery is separate from guarded sync/repair/push. |\n| Feature lifecycle | `task start|run|status|checkpoint|preflight|finish` | Implementation belongs in the returned exact-base task worktree. |\n| Protected delivery | `merge status [TASK_ID]`, `merge land TASK_ID`, `merge project TASK_ID` | One-task native Git composition plus expected-old ref update; Ledger projection is separate and retryable. |\n| Maintainer release | repository `scripts/release-cli.sh` | Prepare is read-only; publish needs separate authority. |\n| Records/evaluation | `ledger`, `benchmark` | Transparent delegation to independently installed canonical packages. |\n\nRun `yy --help` for the complete top-level inventory of your installed version; each listed command prints its own usage when invoked with `-h`. The old `lifecycle` command is removed; use typed `task` and `merge` commands.\n\n### Stable machine output\n\nUse `--format json|ndjson --raw` on task, merge, and integration commands, or Ledger's `-f json|ndjson --raw`, for a strict stdout-only data channel. The `capabilities` command publishes command-specific projections in either machine format. See [Machine output contract](docs/machine-output.md) for the versioned envelope and migration policy.\n\n## Beginner agent workflow\n\nInstall the coding agent you intend to use and configure its provider credentials separately. Pi is optional and supports multiple providers:\n\n```bash\nnpm install --global '@mariozechner/pi-coding-agent'\nyy pi --help\nyy pi --no-session 'Summarize this repository and make no changes'\n```\n\nThe final command may contact the configured model provider. `--no-session` prevents Pi session persistence; it does not disable provider usage.\n\nFor a reusable prompt or shell-sensitive text, prefer a file:\n\n```bash\nprintf '%s\\n' 'Explain the test layout. Do not edit files.' > prompt.md\nyy pi --prompt-file prompt.md --no-session\n```\n\nInteractive Pi uses the `ypl` shortcut:\n\n```bash\nypl 'Inspect the current task'\n```\n\n`ypl` expands to `yy pi --live`. Live mode requires an interactive terminal and enabled Pi extensions.\n\n### Controlled iterations\n\n```bash\nyy -s pi -m :gpt -i 3 -p 'Implement the next small verified increment'\n\nyy loop -n 2 \\\n  --step 'yy pi \"Implement the next increment\"' \\\n  --step 'npm test'\n```\n\nQuote prompts so the shell does not expand backticks or `$()` before YYLO receives them. `-i` bounds iterations inside an agent invocation; `yy loop -n` bounds the outer command workflow.\n\nThe loop's `-n/--iterations` bounds the outer command workflow; agent\n`-i/--max-iterations` still bounds iterations inside an agent invocation.\nInline steps are repeatable:\n\n```bash\nyylo loop -n 5 \\\n  --step 'yy pi \"Implement the next increment\"' \\\n  --step 'yy cc \"Inspect and improve your work\"' \\\n  --step 'npm test'\n```\n\nFor a reusable workflow, save the same contract as `flow.yaml`:\n\n```yaml\niterations: 5\ncontinuity: iteration\non_error: continue\nsteps:\n  - run: yy pi \"Implement the next increment\"\n  - run: yy cc \"Inspect and improve your work\"\n  - run: npm test\n```\n\n```bash\nyylo loop --workflow flow.yaml\n```\n\nEvery step receives one-based loop metadata through `YYLO_LOOP_ID`,\n`YYLO_ITERATION`, `YYLO_ITERATION_COUNT`, `YYLO_STEP`, and `YYLO_STEP_COUNT`.\n\n### Ledger references in prompts\n\nUse `##ABC123`, `##readable-slug`, or `##{readable-slug}` to include a Ledger\nRecord by exact ID, slug, or retained alias. Existing `## ABC123` spacing works.\nTasks, Wiki/PDR/workflow documents, and artifacts share native Record lookup;\nambiguous identities are never resolved by guessing. Brace references next to\npunctuation that could be part of a slug (for example `##{design.v2}.`).\nMissing references remain unchanged. Lookup errors produce a manual-resolution\nwarning; references do not execute workflows or recursively expand Record text.\n\nHydration is bounded to 32 distinct identities, a shared 30-second lookup budget,\nand 64 KiB of inserted context (16 KiB per Record). Oversized Records carry a\nretrieval command instead. Artifacts include metadata; only verified inline UTF-8\ntext up to 4 KiB is included. Binary, local, and external artifact bytes are not\nautomatically read or downloaded. Use `yy ledger record get ID_OR_SLUG` for\nexplicit retrieval. Immutable IDs remain authoritative for task lifecycle and\nRecord relations.\n\n## Models and project shortcuts\n\n`yy pi --help` is the source of truth for shipped aliases. Current Pi shortcuts include:\n\n| Shortcut | Resolved model |\n| --- | --- |\n| `:luna` | `openai-codex/gpt-5.6-luna` |\n| `:sol` | `openai-codex/gpt-5.6-sol` |\n| `:gpt` | `openai-codex/gpt-6-astra` (Pi default) |\n| `:astra` | `openai-codex/gpt-6-astra` |\n| `:mini` | `openai-codex/gpt-5.6-terra` |\n| `:sonnet` | `anthropic/claude-sonnet-4-6` |\n| `:opus` | `anthropic/claude-opus-4-6` |\n\nAliases are subagent-specific; for example, Pi and Codex do not share the same `:mini` mapping.\n\nSet a per-project default:\n\n```bash\nyy pi set-default-model :sol\n```\n\nAdd project shortcuts in `.juno_task/config.json`:\n\n```json\n{\n  \"modelShortcuts\": {\n    \"pi\": {\n      \":team-default\": \":sol\"\n    }\n  }\n}\n```\n\nProject shortcuts are scoped to the selected subagent and can reference shipped or project shortcuts. Unknown targets, malformed data, and cycles fail with an actionable error. Managed Workflow Runner model authorization is separate: explicit selectors must be exact members of `workflowModels`; an unflagged `yy pi` continues to inherit the configured default.\n\n## Observable local commands\n\n`watch` optionally observes existing run evidence without owning execution:\n\n```bash\nnpm test # execute explicitly in the authorized workspace\n# If an existing producer has published a watch-compatible run:\nyy watch status RUN_ID\nyy watch follow RUN_ID\nyy watch await RUN_ID\n```\n\n`RUN_ID` is an existing run identity, not one created by `npm test`. `watch exec` is retired. All watch operations are read-only, and interruption stops only the observer. Missing or malformed terminal evidence is not success. Process exit, semantic outcome, cleanup, and task completion are distinct; `task finish` verifies delivery. Historical run directories are preserved.\n\n## Managed workflows and evidence\n\nFresh `yy init` installs managed scripts, prompts, and wiki guidance under `.juno_task/`. Update checksum-managed assets with:\n\n```bash\nyy scripts update\n```\n\nLocally customized files are preserved and a package candidate is written to a managed-conflict path. `--force` is an explicit replacement operation and creates backups; inspect conflicts before using it.\n\n### Workflow Runner\n\nUse a reviewed YAML workflow for ordered, repeatable steps:\n\n```bash\n./.juno_task/scripts/workflow_runner.sh \\\n  --init-example agent-chain .juno_task/workflows/agent-chain.yaml\n./.juno_task/scripts/workflow_runner.sh lint \\\n  --workflow .juno_task/workflows/agent-chain.yaml\n./.juno_task/scripts/workflow_runner.sh \\\n  --workflow .juno_task/workflows/agent-chain.yaml --dry-run \\\n  --print-output none --no-print-step-stdout\n```\n\nA workflow run retains rendered command identity, stdout/stderr, responses, session IDs, declared receipt hashes, attempts, and terminal manifests. `--tmux` creates an observer session; it does not detach the producer.\n\nIf a producer was interrupted, diagnose before mutation:\n\n```bash\n./.juno_task/scripts/workflow_runner.sh recover-attempt RUN_DIRECTORY --dry-run\n./.juno_task/scripts/workflow_runner.sh doctor RUN_DIRECTORY\n```\n\n`RUN_DIRECTORY` is the printed durable run path. Recovery resumes only the first invalid step after verifying unchanged successful evidence. Never edit historical manifests to make them reusable.\n\n### Task validation evidence\n\nAt a clean coherent task commit:\n\n```bash\nyy task checkpoint TASK_ID\nyy evidence run TASK_ID\nyy evidence status TASK_ID\nyy evidence await TASK_ID\n```\n\nThese commands plan and retain exact-input validation evidence. They do not finish or merge the task.\n\n## Typed task and merge flow\n\nThis section is for repositories initialized with the current controller/task policy. Run lifecycle commands from the registered metadata controller. Never edit the integration-owner checkout.\n\n### Deterministic delivery, external implementation\n\n```bash\nyy task start TASK_ID\n# External agent edits, tests and commits in the returned worktree.\n# Retain the returned token privately for gated commands:\nyy task finish TASK_ID --lease-token <current-token>\nyy merge land TASK_ID\n# Only if automatic Ledger projection needs recovery:\nyy merge project TASK_ID\n```\n\n`TASK_ID` is a Ledger task ID. Start prepares an isolated workspace; finish\nverifies the clean committed result and queues it. Merge uses native Git and\nautomatically records verified integration in Ledger. Tests and semantic review\nremain explicit project checks. Task run/resume and automatic implementation\nbudget recovery are retired. No implementation model, retry or repair engine is\nhidden behind watch. Process exit is not completion. For interrupted work,\npreserve the existing workspace and inspect status/lease-status before explicit\ncontinuation; do not automatically reset or replay historical attempts.\n\n### Choose Simple or Advanced\n\nFor a new Simple project, run `git init`, then `yy init --mode simple` to\ninitialize immediately. Add `--directory PATH` to select an existing Git root.\nFor guided setup, `yy init` asks a final mode question:\n\n- **Simple (recommended to start):** code, notebooks, notes and Ledger in one\n  checkout. Agents share files; `yy task local` is bookkeeping, not delivery.\n  No implicit commits, worktrees or package installation.\n- **Advanced:** a separate controller, isolated task worktrees and managed merging.\n\nUse `yy init --interactive --mode simple` to skip the mode question. Inline\ninitialization retains Advanced behavior; `yy init \"Build an API\" --mode advanced`\nmakes that explicit. **Plain `yy init --mode simple` now writes files**, without\nconfirmation or an external plan. Existing preview automation must add `--dry-run`\n(zero writes) or use optional `--plan-file` then `--apply-plan` for reviewed plans.\nInitialization installs no dependencies and does not certify agent readiness.\nNormal initialization does not convert existing workspaces. For a settled registered\nmetadata-only controller, preview then apply a fresh Advanced → Simple copy:\n\n```sh\nyy init --mode simple --from-advanced /controller --directory /new-project --plan-file /external/conversion.json\nyy init --mode simple --apply-plan /external/conversion.json\n```\n\nSource workspaces remain unchanged. Old instructions and settings are retained\ninactive for manual review. Simple → Advanced is not supported, including with\n`--force`.\nRead [Simple and Advanced workspaces](docs/simple-workspaces.md) for exact commands,\nreadiness recovery, persistence, and shared-checkout limits.\n\n### Manual implementation path (managed mode)\n\n```bash\nyy task start TASK_ID\n# Change directory to the worktree printed by start.\n# Read its AGENTS.md/CLAUDE.md, implement, run focused tests, and commit.\nyy task finish TASK_ID\nyy merge status TASK_ID\nyy merge land TASK_ID\nyy merge project TASK_ID\n```\n\nThe ordinary path is clean commit -> `yy task finish TASK_ID`.\nOptional read-only `yy task preflight TASK_ID` diagnoses admission before finish;\nit is not a prerequisite. Delivery remains a separate one-task operation.\n\nSafety invariants:\n\n1. `task start` freezes the protected target SHA, creates a dedicated branch/worktree, and completes configured dependency hydration before reporting `WORKING`.\n2. Product edits and focused tests occur only in that task worktree. Controller metadata and integration-owner product bytes are separate authorities.\n3. `preflight` is optional and read-only. `finish` independently enforces scope, dirty-byte, runtime, hydration, requirements, ownership, and selected-validation checks, requires a clean committed tip, and queues it; it does not merge.\n4. Tests and semantic reviews are explicit project checks outside merge. Merge launches no models, chooses no reviewers, schedules no suites, and maintains no validation cache.\n5. `merge land` selects one immutable task source, composes in a private detached candidate, and uses Git expected-old ref protection. A moved target requires recomposition and renewed candidate checks.\n6. A conflict remains private to its task and cannot block an unrelated task. Preserve conflicts and unrelated dirty bytes; do not reset, stash, force, rebase, squash, or clean to bypass them.\n7. Git success and Ledger projection are separate. A projection retry never repeats Git integration and never blocks another independent land.\n\nObservation commands are safe to repeat:\n\n```bash\nyy task status TASK_ID\nyy task doctor TASK_ID\nyy merge status\nyy merge status TASK_ID\n```\n\nMerge status reports only independently landable active tasks and always reports\n`model_calls: 0`. Historical queue receipts remain immutable data, not an\nexecutable compatibility surface.\n\n## Maintainer npm release\n\nNormal tasks and `yy merge` own integration. After an ordinary version bump is integrated, maintainers use `scripts/release-cli.sh prepare CLI_VERSION BENCHMARK_VERSION`, obtain explicit publication approval, and then run the separate `publish` command. The CLI has no release command.\n\n## Controller generation upgrades\n\nRecognized controller generations migrate automatically on first task/agent use;\ncontroller-local scripts, policy and executable identity move together. Diagnose\nwithout changing state using `yy scripts generation doctor`. Unknown/customized\nbytes are preserved, and fallback requires a trusted retained executable plus\nscripts. See [upgrade, recovery and validation guidance](docs/controller-generation-upgrades.md).\nMaintainer release preparation gates the exact npm tarball and binds its immutable\nacceptance report; this does not authorize publication.\n\n## Receipt-bound workspace relocation\n\nWhen an entire controller is moved between machines, do not rewrite lifecycle JSON or historical receipts by hand. From a clean physical controller checkout, create and review an external plan, apply it once, then verify its immutable receipt:\n\n```bash\nnode juno-code/scripts/workspace-relocation.mjs plan --controller \"$PWD\" \\\n  --map /old/controller=/new/controller --map /old/worktrees=/new/worktrees \\\n  --output /secure/relocation-plan.json\nnode juno-code/scripts/workspace-relocation.mjs apply --controller \"$PWD\" \\\n  --plan /secure/relocation-plan.json --receipt /secure/relocation-receipt.json\nnode juno-code/scripts/workspace-relocation.mjs verify --controller \"$PWD\" \\\n  --receipt /secure/relocation-receipt.json\n```\n\nThe plan binds the Git common directory, HEAD/ref, task-state hash, exact JSON pointers, and old/new physical roots. Apply refuses dirty, stale, tampered, symlinked, replayed, or missing-commit inputs and preserves historical evidence. Scan shipped active surfaces separately with `node juno-code/scripts/check-path-portability.mjs`; fixtures, immutable receipts, logs, generated output, lockfiles, and security canaries are explicitly excluded rather than rewritten.\n\n## Workspace roles and recovery\n\nFor installed consumers, read [upgrade boundaries and troubleshooting](docs/consumer-upgrades.md)\nbefore changing runtime bindings, tracked scripts, or Ledger. Registration repair\nand provenance repair are not complete cross-version upgrade transactions.\n\n| Workspace | Use it for | Do not use it for |\n| --- | --- | --- |\n| Metadata controller | Ledger/task/merge/release orchestration and durable receipts | Product implementation or target integration edits |\n| Task worktree | Scoped implementation, focused tests, coherent commits | Private controller state or protected-target mutation |\n| Integration owner | Clean latest integrated reads and guarded target ownership | Feature edits, Kanban/session writes, or dirt cleanup |\n\nDiscover routing without changing it:\n\n```bash\nyy info --json\nyy where controller\nyy where integration\nyy where target\nyy where task TASK_ID\nyy doctor workspace\n```\n\nRouting is registration-based and fail-closed; YYLO does not guess a nearby controller, switch branches, or clean a checkout to manufacture compliance.\n\nFor integration-owner inspection and guarded refresh:\n\n```bash\nyy integration status\nyy integration sync\n```\n\n`integration status` observes. `integration sync` is a mutation: it refuses dirty/diverged/ambiguous state and verifies nested gitlink availability before moving anything. `yy integration push` is separate remote authority and must not be inferred from sync, merge, or release readiness.\n\n## Ledger and Benchmark delegates\n\nInstall canonical packages independently:\n\n```bash\npython3 -m pip install 'yylo-ledger==0.4.0'\n# Exact Benchmark dependency for CLI 0.2.10, once separately published:\nnpm install --global '@yylo/benchmark@0.2.0'\n\nyylo-ledger --help\nyy ledger --help\nyylo-benchmark --help\nyy benchmark --help\n```\n\nCLI 0.2.10 source requires Benchmark **0.2.0 exactly**, whose thin lifecycle is\ncase draft/create → run → evaluate → report, plus append-only disqualify. Older\nBenchmark versions are rejected before dispatch. These source changes do not\npublish Benchmark, update installed skills, or activate a new global runtime.\n\nDelegation preserves arguments, stdin/stdout/stderr, cwd, exit status, and signals. It never silently chooses a checkout-local or legacy executable. See the [Ledger repository](https://github.com/yylo-dev/yylo-ledger) and [Benchmark repository](https://github.com/yylo-dev/yylo-benchmark) for package-specific guidance and prerelease boundaries.\n\n## Completion and help\n\n```bash\nyy completion install\nyy completion status\nyy help\nyy --help\n```\n\nCompletion supports Bash, Zsh, and Fish. Use the nested help for your installed release rather than copying an option from a different channel.\n\n## Source-checkout toolchain (advanced)\n\nA monorepo checkout containing `juno-code/` and `juno_kanban/` can build isolated source aliases without replacing normal global `yy`:\n\n```bash\n./juno-code/scripts/juno-002-source-toolchain.sh install\nexport PATH=\"$PWD/.juno_toolchain/juno-002/bin:$PATH\"\nyy-juno-002 --version\njuno-kanban-juno-002 --version\n./juno-code/scripts/juno-002-source-toolchain.sh status\n```\n\n`yy ledger` and its labelled `yy kanban` compatibility alias use the exact Ledger compatibility policy `0.4.0`. The isolated source aliases also enforce the legacy controller package compatibility range `juno-kanban >=2.0.5,<3.0.0`. Source selection, controller registration, and data history are separate boundaries:\n\n```bash\n./juno-code/scripts/juno-002-source-toolchain.sh register-controller /path/to/controller controller-branch\n./juno-code/scripts/juno-002-source-toolchain.sh controller-status\n./juno-code/scripts/juno-002-source-toolchain.sh rollback-selection\n```\n\nThe path and branch are placeholders. `rollback-selection` changes only isolated executable selection. Switching branches never downgrades or restores Ledger data. Back up and migrate a board through Ledger's reviewed data procedures.\n\n| Source lane | Owns | Must not do |\n| --- | --- | --- |\n| Controller | Metadata, orchestration, prompts, and receipts | Product implementation or implicit ref changes |\n| Task checkout | Scoped implementation and tests | Protected-target mutation |\n| Integration owner | Guarded candidate integration | Kanban/session writes or unrelated edits |\n| Small fix worktree | Exact-base small product repair | Bypass task/review/candidate boundaries |\n\n## Development\n\n```bash\ngit clone https://github.com/yylo-dev/yylo.git\ncd yylo\nnpm ci\nnpm test\nnpm run typecheck\nnpm run build\nnode dist/bin/cli.mjs --help\n```\n\nThe monorepo may embed YYLO CLI alongside Benchmark and a Ledger submodule, but each public package has its own manifest, version, release contract, and registry channel. A source checkout version is not evidence that the same version was published.\n\n## Help and links\n\n- npm: [@yylo/cli](https://www.npmjs.com/package/%40yylo%2Fcli)\n- Source/issues: [yylo-dev/yylo](https://github.com/yylo-dev/yylo)\n- Ledger: [yylo-dev/yylo-ledger](https://github.com/yylo-dev/yylo-ledger)\n- Ledger package: [yylo-ledger on PyPI](https://pypi.org/project/yylo-ledger/)\n- Benchmark: [yylo-dev/yylo-benchmark](https://github.com/yylo-dev/yylo-benchmark)\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}