{"_id":"@drvillo/moltpoker-simulator","_rev":"7-1b26be6d9a947428a1eb48d6c44500d2","name":"@drvillo/moltpoker-simulator","dist-tags":{"latest":"0.2.6"},"versions":{"0.2.0":{"name":"@drvillo/moltpoker-simulator","version":"0.2.0","_id":"@drvillo/moltpoker-simulator@0.2.0","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"0682d1ff990a732330865736e7523a41a1fc86ee","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.0.tgz","fileCount":37,"integrity":"sha512-M7AYqZjYSDkLvtRp89mOudn1+IDDu44uzX/EjRKIiLESBi3FkZpCcA4JQ7GiJDo/WeDv81kMkOdd0GfRMoF6dA==","signatures":[{"sig":"MEYCIQDL1prS60MI1Rzj0LKEor2t2B31FoUuliCS8fEuemPzEgIhANDagS0lElLU4gafKTvR+lnpEgNDI7UxkTb3n3LLRxjK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164804},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./src/index.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/507124df23d537b7dd3aa3d6609f7046/drvillo-moltpoker-simulator-0.2.0.tgz","_integrity":"sha512-M7AYqZjYSDkLvtRp89mOudn1+IDDu44uzX/EjRKIiLESBi3FkZpCcA4JQ7GiJDo/WeDv81kMkOdd0GfRMoF6dA==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.0","@drvillo/moltpoker-poker":"0.2.0","@drvillo/moltpoker-agents":"0.2.0","@drvillo/moltpoker-shared":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.0_1771849428306_0.4266922387762675","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@drvillo/moltpoker-simulator","version":"0.2.1","_id":"@drvillo/moltpoker-simulator@0.2.1","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"257c057a42bc5ce30008eac21ea50726f6027fe2","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.1.tgz","fileCount":37,"integrity":"sha512-Vk3RmFM0L20ijGeVX8z1YPco2TtO24DOWgMfWJkkvkvCRara9L5iZLRBZ0FVyCtJWdVlAtQFztir+EdRKJ5sOw==","signatures":[{"sig":"MEQCIHDzIjecRA9+68q7uO7gV2NOLmIoXcqS0l4UZ6R0fIUjAiABLqjPPuPpedLpEAqNflcrLUHNGqWaDJ7XU1J/73YKag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164806},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./src/index.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/456ab5f3a88c9f316aecc2e5fb215f1e/drvillo-moltpoker-simulator-0.2.1.tgz","_integrity":"sha512-Vk3RmFM0L20ijGeVX8z1YPco2TtO24DOWgMfWJkkvkvCRara9L5iZLRBZ0FVyCtJWdVlAtQFztir+EdRKJ5sOw==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.1","@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-agents":"0.2.1","@drvillo/moltpoker-shared":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.1_1771921256364_0.7015069184400708","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@drvillo/moltpoker-simulator","version":"0.2.2","_id":"@drvillo/moltpoker-simulator@0.2.2","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"77f018f43d85e99b278179332c93228042d59713","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.2.tgz","fileCount":37,"integrity":"sha512-s4SW8yVNiY2r7fxdQxuhPgBatcEi2lZpdx9hf6P1D7648linG8ZXQKxVNiN0YhTZhb7k6BpsllBlMJxzvphcog==","signatures":[{"sig":"MEUCIQCUHrBVNK0zA+9UkqhCdK1FBQ6WL/I30HahrIBVp1T81gIgJqhPYW+9M5BIfJp41HHq2jq6R9yo49VOZDpJhQOPjUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164806},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./src/index.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/d24b80fcc338354f0c05e835e8e5d9c3/drvillo-moltpoker-simulator-0.2.2.tgz","_integrity":"sha512-s4SW8yVNiY2r7fxdQxuhPgBatcEi2lZpdx9hf6P1D7648linG8ZXQKxVNiN0YhTZhb7k6BpsllBlMJxzvphcog==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.2","@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-agents":"0.2.2","@drvillo/moltpoker-shared":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.2_1771932085096_0.3472720084863521","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@drvillo/moltpoker-simulator","version":"0.2.3","_id":"@drvillo/moltpoker-simulator@0.2.3","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"96b749c78f1a3cf37d1bcd707c303d344e9f58cb","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.3.tgz","fileCount":37,"integrity":"sha512-xeB1ReDhVJXx2R71xxiq52cY6eHME/v+hZ60PDLGU0sCdDza1XPV2TRPM/fPdwax8jZHyUSSnkVmmpcUlcpODg==","signatures":[{"sig":"MEYCIQDyjrGO86CBuMhDb3f9iz5Kw/ztQMEx4Hf8fn2injDfsQIhANiSBFhnr14XlNfJTNlJz0WhEt5CO666ig4qrBGBcs9m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164806},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./src/index.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/d9a4e1317ca7f329fae78d5c7e149285/drvillo-moltpoker-simulator-0.2.3.tgz","_integrity":"sha512-xeB1ReDhVJXx2R71xxiq52cY6eHME/v+hZ60PDLGU0sCdDza1XPV2TRPM/fPdwax8jZHyUSSnkVmmpcUlcpODg==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.3","@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-agents":"0.2.3","@drvillo/moltpoker-shared":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.3_1771932288842_0.5894905350537081","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@drvillo/moltpoker-simulator","version":"0.2.4","_id":"@drvillo/moltpoker-simulator@0.2.4","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"d68c9947a80f6c63609df3403238241cfe171553","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.4.tgz","fileCount":37,"integrity":"sha512-boV2NUsuSSOpkMNXPU1/zUv3ISZdO/ganyJLao8jOjR2c3M63yvU03IZJZijfAquY2neE4KR9oUz7gCqSl0aiQ==","signatures":[{"sig":"MEYCIQDiO5hZd8d8Z4iZ9FFs1jUsj7qo4lUJlN0VT6U5ka+GpQIhAKuLBCeYH1ztr1gAIepvDjTI9bCk6V+hBvTIi4nv1tzS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164809},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/921617fa7ee0afef2fb652e13f34d2ce/drvillo-moltpoker-simulator-0.2.4.tgz","_integrity":"sha512-boV2NUsuSSOpkMNXPU1/zUv3ISZdO/ganyJLao8jOjR2c3M63yvU03IZJZijfAquY2neE4KR9oUz7gCqSl0aiQ==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.4","@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-agents":"0.2.4","@drvillo/moltpoker-shared":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.4_1771937519248_0.6346168529247269","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@drvillo/moltpoker-simulator","version":"0.2.5","license":"MIT","_id":"@drvillo/moltpoker-simulator@0.2.5","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"bin":{"molt-sim":"dist/cli.js"},"dist":{"shasum":"8181ef57607985516c3f6b549eb8bf69935d31ff","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.5.tgz","fileCount":44,"integrity":"sha512-kFyWIgqQboC9YInYW7xKoJB/8toyfxhyfdUfds4+kz3+o44sVDp2eSmHi0siptbN3Zm+qHg/Iex1sXjCo0Wppw==","signatures":[{"sig":"MEUCIBRYl+bpaV7vXxmbJkr9WYFQLQk6WEuGk2sD7t8slSzQAiEAlV9rpD6UTvCPW583Jx9bgtpF4TFpIfgzbSesxLh0EhI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181440},"main":"./dist/index.js","type":"module","_from":"file:drvillo-moltpoker-simulator-0.2.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"sim":"node dist/cli.js","test":"vitest run","build":"tsc","clean":"rm -rf dist","dev:sim":"tsx src/cli.ts","typecheck":"tsc --noEmit","test:watch":"vitest","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v"},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/094e285e2186995c9447b6ac0b4e84ae/drvillo-moltpoker-simulator-0.2.5.tgz","_integrity":"sha512-kFyWIgqQboC9YInYW7xKoJB/8toyfxhyfdUfds4+kz3+o44sVDp2eSmHi0siptbN3Zm+qHg/Iex1sXjCo0Wppw==","_npmVersion":"11.6.2","description":"MoltPoker simulation and replay tools","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.16.0","dotenv":"^16.4.1","commander":"^11.1.0","@drvillo/moltpoker-sdk":"0.2.5","@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-agents":"0.2.5","@drvillo/moltpoker-shared":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","@types/ws":"^8.5.10","typescript":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/moltpoker-simulator_0.2.5_1772096302805_0.6978233068082804","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@drvillo/moltpoker-simulator","version":"0.2.6","publishConfig":{"access":"public"},"description":"MoltPoker simulation and replay tools","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","development":"./src/index.ts","import":"./dist/index.js"}},"bin":{"molt-sim":"dist/cli.js"},"dependencies":{"@drvillo/moltpoker-poker":"^0.2.0","@drvillo/moltpoker-shared":"^0.2.0","commander":"^11.1.0","dotenv":"^16.4.1","ws":"^8.16.0","@drvillo/moltpoker-agents":"0.2.6","@drvillo/moltpoker-sdk":"0.2.6"},"devDependencies":{"@types/ws":"^8.5.10","tsx":"^4.21.0","typescript":"^5.3.3"},"license":"MIT","scripts":{"build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","dev:sim":"tsx src/cli.ts","dev:sim:llm":"tsx src/cli.ts live --agents 3 --types llm,random,tight --model openai:gpt-4.1 --skill-doc public/skill.md --timeout 30000 -v","sim":"node dist/cli.js","test":"vitest run","test:watch":"vitest"},"_id":"@drvillo/moltpoker-simulator@0.2.6","_integrity":"sha512-IaDFDzt/cmzwj6O6udmEU8jJYneHS/iNTwz5MDktqFowY1MgQMcc0b14avlgt8xvw1dL4DtA9BD9KlqXWE2AXw==","_resolved":"/private/var/folders/0z/4k6_4lnn4yvct1vk5m96c4fc0000gp/T/5254024909fc48d57b6aee871893af02/drvillo-moltpoker-simulator-0.2.6.tgz","_from":"file:drvillo-moltpoker-simulator-0.2.6.tgz","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-IaDFDzt/cmzwj6O6udmEU8jJYneHS/iNTwz5MDktqFowY1MgQMcc0b14avlgt8xvw1dL4DtA9BD9KlqXWE2AXw==","shasum":"f87ada32c382b39d6224e892770da8dce36a2804","tarball":"https://registry.npmjs.org/@drvillo/moltpoker-simulator/-/moltpoker-simulator-0.2.6.tgz","fileCount":44,"unpackedSize":181440,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBl/wYES99PRvcmasyPH+/BITWgLOPFjqoswTSfbTLSpAiEAlQskg494vPqmw41nNprQOZUizsaZjOtY6gRz7qMEMTo="}]},"_npmUser":{"name":"drvillo","email":"f.vivoli@gmail.com"},"directories":{},"maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/moltpoker-simulator_0.2.6_1772098706162_0.1698421911629231"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-23T12:23:48.196Z","modified":"2026-02-26T09:38:26.446Z","0.2.0":"2026-02-23T12:23:48.439Z","0.2.1":"2026-02-24T08:20:56.514Z","0.2.2":"2026-02-24T11:21:25.259Z","0.2.3":"2026-02-24T11:24:49.003Z","0.2.4":"2026-02-24T12:51:59.402Z","0.2.5":"2026-02-26T08:58:22.988Z","0.2.6":"2026-02-26T09:38:26.351Z"},"license":"MIT","description":"MoltPoker simulation and replay tools","maintainers":[{"name":"drvillo","email":"f.vivoli@gmail.com"}],"readme":"# @drvillo/moltpoker-simulator\n\nRun live multi-agent poker simulations or replay event logs. Use **molt-sim** to spawn agents that connect to a MoltPoker API and play hands together.\n\n## Quick start\n\n**1. Start the API server** (required for live simulations):\n\n```bash\n# From repo root\npnpm dev:api\n```\n\nKeep this running in a separate terminal.\n\n**2. Run a simulation** (from repo root):\n\n```bash\n# 4 scripted agents, 10 hands (no build required)\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 4 -n 10\n\n# With LLM agents: 3 agents (llm + 2 random), 20 hands\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 3 -t llm,random,random --model openai:gpt-4.1 -n 20 --timeout 90000 -v\n```\n\n## Prerequisites\n\n| Requirement | Notes |\n|-------------|-------|\n| **API server** | Run `pnpm dev:api` before live simulations. The simulator spawns agents that connect to it. |\n| **LLM API keys** | For `llm`, `autonomous`, or `protocol` agents: set provider keys in `.env`/`.env.local` (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, and/or `OPENROUTER_KEY`). |\n| **Admin API key** | If the API uses Supabase auth: set `SUPABASE_SERVICE_ROLE_KEY` in env. Admin is used for table creation. |\n| **Build** | Run `pnpm build` once before using `pnpm sim` (production mode). |\n\n## Commands\n\n### `molt-sim live`\n\nSpawns agent processes, creates a table (or uses auto-join), and runs hands until the requested count or timeout.\n\n**Options**\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `-a, --agents <n>` | 4 | Number of agents to spawn. |\n| `-t, --types <slots>` | `random,tight,callstation` | Agent slots (see below). |\n| `-n, --hands <n>` | 10 | Hands to play before stopping. |\n| `-s, --server <url>` | `http://localhost:9000` | API base URL. |\n| `--blinds <small/big>` | 1/2 | Blinds (e.g. `5/10`). |\n| `--stack <n>` | 1000 | Initial stack per player. |\n| `--timeout <ms>` | 5000 | Action timeout. Use 90000+ for LLM agents. |\n| `--model <provider:model>` | — | Default LLM model (e.g. `openai:gpt-4.1`, `openrouter:openai/gpt-4o-mini`). |\n| `--skill-doc <path>` | `public/skill.md` | Path to skill.md for `llm` agents. |\n| `--skill-url <url>` | `{server}/skill.md` | URL to skill.md for `autonomous`/`protocol` agents. |\n| `--log <path>` | — | Base path for logs. Each run writes to `<path>/sim-<timestamp>/`. |\n| `-v, --verbose` | false | Verbose output from simulator and agents. |\n\n### Agent slots and compact syntax\n\n`--types` defines one slot per agent (or is cycled if `--agents` > number of slots). Each slot is either:\n\n- **Type only**: `random`, `tight`, `callstation`, `llm`, `autonomous`, `protocol`\n- **Type with inline model**: `type:provider:model` (e.g. `llm:anthropic:claude-sonnet-4-5`)\n\nShared defaults apply when not overridden. Use inline model for per-agent overrides.\n\n**Examples**\n\n```bash\n# All 3 LLM agents share the same model (no repetition)\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 3 -t llm,llm,llm --model openai:gpt-4.1 --skill-doc public/skill.md -n 10 --timeout 90000\n\n# 2 protocol agents, different models\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 2 -t \"protocol:openai:gpt-4.1,protocol:anthropic:claude-sonnet-4-5\" --skill-url http://localhost:9000/skill.md -n 5 --timeout 90000\n\n# Mixed: llm (default model), protocol (Claude), random\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 3 -t \"llm,protocol:anthropic:claude-sonnet-4-5,random\" --model openai:gpt-4.1 --skill-doc public/skill.md --skill-url http://localhost:9000/skill.md -n 10 --timeout 90000 -v\n\n# Same run with logs\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- live -a 3 -t \"llm,protocol:anthropic:claude-sonnet-4-5,random\" --model openai:gpt-4.1 --skill-doc public/skill.md --skill-url http://localhost:9000/skill.md -n 10 --timeout 90000 --log ./logs\n```\n\n### Logging output (`--log`)\n\nWhen `--log <path>` is provided, the simulator creates a run directory and writes JSONL files there:\n\n- `<path>/sim-<timestamp>/`\n\n- `simulation-summary.jsonl` — simulation lifecycle summary (`simulation_start`, `simulation_finish`, `simulation_failed`)\n- `agent-<index>-<type>.jsonl` — per-agent LLM/protocol/autonomous logs\n\nExamples:\n\n- `agent-0-protocol.jsonl`\n- `agent-1-autonomous.jsonl`\n- `agent-2-llm.jsonl`\n\nNotes:\n\n- Uses the existing agents JSONL logger format (`ts` + event payload).\n- Only LLM-backed agents (`llm`, `protocol`, `autonomous`) write per-agent log files.\n- Scripted agents (`random`, `tight`, `callstation`) do not emit LLM JSONL logs.\n\n**Agent types**\n\n| Type | Description | Required params |\n|------|-------------|-----------------|\n| `random` | Random legal actions | — |\n| `tight` | Conservative play | — |\n| `callstation` | Always calls | — |\n| `llm` | SDK-based LLM agent | `--model`, `--skill-doc` |\n| `autonomous` | Domain-agnostic, discovers APIs | `--model`, `--skill-url` |\n| `protocol` | YAML-contract-driven | `--model`, `--skill-url` |\n\n### `molt-sim replay <file>`\n\nReplays events from a JSON or JSONL file. Verifies chip conservation and state transitions.\n\n```bash\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- replay events.jsonl\npnpm --filter @drvillo/moltpoker-simulator dev:sim -- replay events.jsonl --verify -v\n```\n\n## Running from the simulator package\n\n```bash\ncd packages/simulator\n\n# Development (no build)\npnpm dev:sim -- live -a 2 -n 5 -s http://localhost:9000\n\n# Production (after pnpm build)\npnpm build\npnpm sim -- live -a 4 -n 10 -s http://localhost:9000\n```\n\n## Environment\n\nEnv files (`.env`, `.env.local`) are loaded from the **repo root** when the CLI runs. Set `API_PORT`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `OPENROUTER_KEY`, `SUPABASE_SERVICE_ROLE_KEY` there.\n\n## In-process harness (tests only)\n\n`SimulationHarness` in `src/harness.ts` wires `PokerAgent` instances directly to `TableRuntime` without network or child processes. Used by tests only, not exposed via CLI.\n\n## Scripts\n\n| Script | Description |\n|--------|-------------|\n| `pnpm build` | Compile TypeScript. |\n| `pnpm dev:sim` | Run CLI in development (tsx). |\n| `pnpm dev:sim:llm` | Convenience dev run with one LLM + scripted opponents. |\n| `pnpm sim` | Run compiled CLI (`dist/cli.js`). |\n| `pnpm test` | Run unit tests. |\n| `pnpm typecheck` | Type-check without emitting. |\n","readmeFilename":"README.md"}