{"_id":"@agentiny-ai/app","_rev":"8-4e8eb0455d203339a9890ee6400dc378","name":"@agentiny-ai/app","dist-tags":{"latest":"0.0.165"},"versions":{"0.0.152":{"name":"@agentiny-ai/app","version":"0.0.152","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.152","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.tech","bugs":{"url":"https://github.com/agentiny-ai/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"8d6b17b16abe963d5285ed163758ca1bc988e2da","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.152.tgz","fileCount":3488,"integrity":"sha512-bkRpolHAvXIw8qMHM18M0OuR5qgNftMg+w7854u/S6j3i8Cvkkqt3oxRfjgCR4Pc5Pao4uC1vCsi4SOswV+w0A==","signatures":[{"sig":"MEYCIQDF9R0NtXtDyqfZPxjbVxpLwJBEwyfVj0asbPdcIL/wsQIhAKa6BEeZM6NrMeafgL/Mv1XZW0RsqRbEcJ3CmEMngL3d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90244738},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"e2a50f0602e42ee7bd0d4a26130697004066988b","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/agentiny-ai/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.107.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.152_1784154512230_0.20178219222842597","host":"s3://npm-registry-packages-npm-production"}},"0.0.153":{"name":"@agentiny-ai/app","version":"0.0.153","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.153","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.tech","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"27535783c6c58bede765da83ccb335083a0b9759","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.153.tgz","fileCount":3505,"integrity":"sha512-IBGauBtl5Mu8I0G+zi6lkWebZ87ZbzzXOE58PnnZhWxzvLj5cEWOcu0Pg5nEUlx4jLK95vZm7aWEEMG3ua6uIw==","signatures":[{"sig":"MEUCIBjhuLfRbnMSeLuDoib+6o/Rj2po69JHrI3bx7sOvg7mAiEAnUnwRA2ic/RwGYS30oXh17Oq45+6864DenQTy4oJkDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90800178},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"90b481f63d3024b1f0f701fb0a7e81b782ce7e28","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.107.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.153_1784239708813_0.8169831197114408","host":"s3://npm-registry-packages-npm-production"}},"0.0.154":{"name":"@agentiny-ai/app","version":"0.0.154","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.154","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.tech","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"24bb2bab81af8b06713e96ca781e783a9f5f87b8","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.154.tgz","fileCount":3508,"integrity":"sha512-wh1FdQ7cqjPHjIJYjZRLZFcma6pfetswzeRcBVH7Uz0y9qtD/Adm6EIzX8YcAXB3GVYLa+mffgrxSBMQTT8ohw==","signatures":[{"sig":"MEUCIQDNSDpkzfUjlKO/X9q0ftTEVSllcWYxj4n/h8QN9QcQEwIgAw2KIzM1cHbynKaGM/rhj4RMHXE7HqVpKhfHT0/RIz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90976967},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"e06ccef44122ace2d7ac0c9ebcdef1973f15e0a3","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.107.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.154_1784328624158_0.920138661391902","host":"s3://npm-registry-packages-npm-production"}},"0.0.160":{"name":"@agentiny-ai/app","version":"0.0.160","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.160","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.app","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"f927165904d8c8a1178f198d1d016d9b8122c83f","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.160.tgz","fileCount":3508,"integrity":"sha512-qTKMr7FzuekSALB5166sJUEh4NpKS3PnIUwT4buMFwESBfK7uCs+NUkQbPtu+50gsVhfZAMZSEJONyOQzl2UzQ==","signatures":[{"sig":"MEUCIQCHbkML2SuErYSN7qdgGC2G+00j9o69lm70Z8B9QHXVTQIgQsAZ3l3AVQ/3cq3EI3OQYwmirMz14JJcWO9DcHO2GdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91014218},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"74f49e52d85be7f9516382fd679d08c2e07ce386","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.114.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.160_1784886739380_0.11441655934203343","host":"s3://npm-registry-packages-npm-production"}},"0.0.161":{"name":"@agentiny-ai/app","version":"0.0.161","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.161","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.app","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"d1743d6f4928100c752b4316824736e1ae926405","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.161.tgz","fileCount":3508,"integrity":"sha512-h9lcI9MjgqwSxI6iZjLr4gw2Ho3OKqzvr1djPDKJyZv1Sfyabyp4kIZESVmIbEEsJp0hFB8+5L4dcOpFr1UtCQ==","signatures":[{"sig":"MEYCIQDCIImeWeRoTaCY2VHX74mjI18kvLNku9hOk+dyrlyRJAIhAIwT7+nt2ZbNeQ0J10LTEUjKWPJSoVa6AioCf2ydgtUI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91083084},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"3ae85e3f2bba9fead54b541676f44242fc379c70","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.114.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.161_1785003879779_0.013247914697272822","host":"s3://npm-registry-packages-npm-production"}},"0.0.162":{"name":"@agentiny-ai/app","version":"0.0.162","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.162","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.app","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"4cddade39e7db035bb85988738d66a45cf5646da","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.162.tgz","fileCount":3508,"integrity":"sha512-iUUhwoiVEGRBS3RyYoKl5eEzZoDBt0GZtDZEXV99cXmIXwiynAf1w0D3Xk4ySbh3QNDGAEL/28u6/bNi4gAVBw==","signatures":[{"sig":"MEUCIBy9n3ucxwVL2EcAwaxKpSliSTcdvNU89OE9+rGqwUhcAiEA4mVH+zoBViiEiasJgwLrus+Ue+uPFXk8kMhcTNS7eyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91086413},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"bf6d7e428e4d9a8a69cbaa3ff231053a16262fbe","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.114.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.162_1785138010855_0.9780292872821517","host":"s3://npm-registry-packages-npm-production"}},"0.0.164":{"name":"@agentiny-ai/app","version":"0.0.164","license":"Apache-2.0","_id":"@agentiny-ai/app@0.0.164","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"homepage":"https://agentiny.app","bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"bin":{"agentiny-app":"dist/index.js"},"dist":{"shasum":"ef11041763c10a5e0242904288724042231a7402","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.164.tgz","fileCount":3508,"integrity":"sha512-eAaClcBmo6AkhYrTWjhS2HiWNdY4/1liVwCr/DaHCAWgscUzWqJehcwB5TfY86vtp9Bl6AtHyhVKfbwM1Dy9/g==","signatures":[{"sig":"MEUCIHxh3PJgY6y+jhWKV285qTQqj6+dH83juG2M0/vnZZarAiEAtgicwhR0oa75gcLI6Qz5oW0uC1TR2aqXkD7+/TGntkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91160976},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"b4b6a7227cdec5370b75d5856e5c8020c49e7956","scripts":{"knip":"knip","lint":"eslint src/","test":"vitest run","build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","bundle":"bun run scripts/bundle.ts","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\""},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"repository":{"url":"git+https://github.com/farooq-8627/agentiny.git","type":"git","directory":"src/app"},"_npmVersion":"11.18.0","description":"Run Agentiny locally — one command, no clone needed","directories":{},"_nodeVersion":"22.15.1","dependencies":{"citty":"^0.2.2","wrangler":"^4.114.0","commander":"^14.0.3","postal-mime":"^2.7.5","playwright-core":"^1.61.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.24.0","eslint":"^9.39.4","vitest":"^4.1.9","@types/bun":"^1.3.14","typescript":"^6.0.3","@alook/shared":"workspace:*","typescript-eslint":"^8.62.1"},"_npmOperationalInternal":{"tmp":"tmp/app_0.0.164_1785606913952_0.17271297832646093","host":"s3://npm-registry-packages-npm-production"}},"0.0.165":{"name":"@agentiny-ai/app","version":"0.0.165","description":"Run Agentiny locally — one command, no clone needed","license":"Apache-2.0","homepage":"https://agentiny.app","repository":{"type":"git","url":"git+https://github.com/farooq-8627/agentiny.git","directory":"src/app"},"bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"type":"module","bin":{"agentiny-app":"dist/index.js"},"main":"./dist/index.js","engines":{"node":">=20"},"publishConfig":{"access":"public"},"scripts":{"build":"bun build src/index.ts --outdir dist --target node --format esm --external commander --external wrangler && node scripts/bundle-cli.mjs","prepack":"pnpm run build && node -e \"const{existsSync}=require('fs');if(!existsSync('bundled/web'))throw new Error('bundled/ missing — run pnpm bundle first')\"","bundle":"bun run scripts/bundle.ts","knip":"knip","lint":"eslint src/","test":"vitest run"},"dependencies":{"citty":"^0.2.2","commander":"^14.0.3","playwright-core":"^1.61.1","postal-mime":"^2.7.5","wrangler":"^4.114.0"},"devDependencies":{"@alook/shared":"workspace:*","@types/bun":"^1.3.14","eslint":"^9.39.4","knip":"^6.24.0","typescript":"^6.0.3","typescript-eslint":"^8.62.1","vitest":"^4.1.9"},"gitHead":"c9d1d8565d5f1428572e9bc2d8119f871dc429fb","_id":"@agentiny-ai/app@0.0.165","_nodeVersion":"22.15.1","_npmVersion":"11.18.0","dist":{"integrity":"sha512-H4WHAUOy+nb43JtuM8/4Lf6yGnwa+Lh85+yzU45kii8j1QijeGcH8c/QVCd/R8NuNYBqj2wLYddHAOhuYqkE3g==","shasum":"5861d6df51eba3418e9b0bd15ba4cf046af4fecb","tarball":"https://registry.npmjs.org/@agentiny-ai/app/-/app-0.0.165.tgz","fileCount":3508,"unpackedSize":91181960,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxKR8WYmuiQm+MMUSmltV9op8q0jZ3Gf61WfYt96+SSQIhANKl/LiiewqPxjKuWpb9o/2sKPpWfA9ymFMEG37MOBTn"}]},"_npmUser":{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"},"directories":{},"maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/app_0.0.165_1785649324447_0.8693183505912598"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T22:28:32.038Z","modified":"2026-08-02T05:42:05.015Z","0.0.152":"2026-07-15T22:28:32.711Z","0.0.153":"2026-07-16T22:08:29.329Z","0.0.154":"2026-07-17T22:50:24.604Z","0.0.160":"2026-07-24T09:52:19.843Z","0.0.161":"2026-07-25T18:24:40.263Z","0.0.162":"2026-07-27T07:40:11.399Z","0.0.164":"2026-08-01T17:55:14.476Z","0.0.165":"2026-08-02T05:42:04.865Z"},"bugs":{"url":"https://github.com/farooq-8627/agentiny/issues"},"license":"Apache-2.0","homepage":"https://agentiny.app","repository":{"type":"git","url":"git+https://github.com/farooq-8627/agentiny.git","directory":"src/app"},"description":"Run Agentiny locally — one command, no clone needed","maintainers":[{"name":"farooq-8627","email":"umarfarooq2862@gmail.com"}],"readme":"# @agentiny-ai/app\n\nRun Agentiny locally — one command, no clone needed.\n\n## Quick Start\n\n```bash\nnpx @agentiny-ai/app onboard\n```\n\nThis will:\n\n1. Check your environment (Node.js >= 20, AI runtime)\n2. Install Agentiny to `~/.agentiny/self-hosted/`\n3. Generate secrets (`BETTER_AUTH_SECRET`, `ENCRYPTION_KEY`)\n4. Run database migrations (SQLite via Cloudflare D1 local)\n5. Start all services (web, email worker, WebSocket)\n6. Create your account and workspace\n7. Register your AI runtime and start the daemon\n8. Open the dashboard in your browser\n\n## Commands\n\n| Command | Description |\n| --- | --- |\n| `npx @agentiny-ai/app onboard` | Full setup: install, migrate, start, and register |\n| `npx @agentiny-ai/app start` | Start services from an existing installation |\n| `npx @agentiny-ai/app stop` | Stop all services |\n| `npx @agentiny-ai/app update` | Update to latest version, re-run migrations, then stop |\n\n### Embedded CLI\n\n`@agentiny-ai/app` bundles a copy of `@agentiny-ai/cli` for managing the local daemon and runtime registration:\n\n```bash\nnpx @agentiny-ai/app register          # Register CLI with local server\nnpx @agentiny-ai/app daemon start      # Start the daemon\nnpx @agentiny-ai/app daemon stop       # Stop the daemon\nnpx @agentiny-ai/app daemon status     # Check daemon status\nnpx @agentiny-ai/app cli <any command> # Pass-through to @agentiny-ai/cli\n```\n\n## Options\n\n```\n--port-web <port>    Web server port (default: 15210)\n--port-email <port>  Email worker port (default: 15211)\n--port-ws <port>     WebSocket worker port (default: 15212)\n--skip-register      Skip account creation (onboard only)\n```\n\n## Architecture\n\n### Services\n\nAgentiny runs three local services, each in its own Wrangler dev process:\n\n| Service | Default Port | Description |\n| --- | --- | --- |\n| **Web** | 15210 | Main web app (Next.js on Wrangler) — dashboard, API, auth |\n| **Email Worker** | 15211 | Email processing worker |\n| **WebSocket (WS-DO)** | 15212 | Real-time communication via Durable Objects |\n\nAll services share a single SQLite database (Cloudflare D1 local mode) with state persisted at `~/.agentiny/self-hosted/web/.wrangler/state/`.\n\n### Directory Layout\n\n```\n~/.agentiny/self-hosted/\n├── web/                  # Web app (wrangler.toml, migrations, .dev.vars)\n│   ├── .wrangler/state/  # D1 database & KV persistence\n│   └── migrations/       # SQL migration files\n├── email-worker/         # Email worker (wrangler.toml, .dev.vars)\n├── ws-do/                # WebSocket Durable Object worker\n├── logs/                 # Service logs (web.log, email-worker.log, ws-do.log)\n└── .pids.json            # PID tracking for running services\n```\n\n### Database Migrations\n\nMigrations are SQL files applied via `wrangler d1 migrations apply --local`. They run automatically during:\n\n- **`onboard`** — applies all migrations on fresh install\n- **`update`** — applies any new migrations after installing the latest version\n\nWrangler tracks which migrations have been applied; only pending ones are executed.\n\n### Secrets Management\n\nOn first `onboard`, secrets are auto-generated and written to `.dev.vars` files:\n\n- **Web**: `BETTER_AUTH_SECRET`, `BETTER_AUTH_URL`, `ENCRYPTION_KEY`, OAuth client ID/secret placeholders\n- **Email Worker**: `ENCRYPTION_KEY` (synced from web)\n\nSecrets are never overwritten on subsequent runs — only missing files are created.\n\n## Dev Mode\n\nWhen the `ALOOK_PROJECT_ROOT` environment variable is set, `@agentiny-ai/app` runs in dev mode against the monorepo:\n\n- Runs `pnpm predev` to set up environment files\n- Runs `pnpm db:migrate` for migrations (instead of Wrangler CLI)\n- Starts web via `next dev` (instead of Wrangler)\n- Services run in foreground with prefixed log output (`[web]`, `[email-worker]`, `[ws-do]`)\n- `Ctrl+C` cleanly stops all services\n\n```bash\nALOOK_PROJECT_ROOT=/path/to/alook npx @agentiny-ai/app onboard\n```\n\n## Requirements\n\n- Node.js >= 20\n- One of: `claude`, `codex`, or `opencode` CLI installed\n\n## Limitations\n\n- Email send/receive is not available in local mode\n- OAuth login (GitHub, Google) is disabled; use email/password\n\n## License\n\nApache-2.0 — see [LICENSE](../../LICENSE).\n","readmeFilename":"README.md"}