{"_id":"@alextis59/open-bot","_rev":"5-e89c5d1a11401b34f573dbfdf347fa76","name":"@alextis59/open-bot","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@alextis59/open-bot","version":"0.1.0","keywords":["opencode","agent","docker","local","chat"],"license":"MIT","_id":"@alextis59/open-bot@0.1.0","maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"homepage":"https://github.com/alextis59/open-bot#readme","bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"bin":{"open-bot":"dist/cli.mjs"},"dist":{"shasum":"8bdd9d596eb77fb31a79dcbdbc008ccf63419b60","tarball":"https://registry.npmjs.org/@alextis59/open-bot/-/open-bot-0.1.0.tgz","fileCount":15,"integrity":"sha512-fF4OTu6hiTsTrYh/E9Z3zSomPRXjuXTwN72ErICDKYT2ya8EmFak4TIZS3kakzSsX7ZVI7Rrv6Pze6MFHuV4cQ==","signatures":[{"sig":"MEUCIQCNlXY2k36gd7tUW4Hgjd1Da6vWwa7Wcfd2fK7W1fu9UAIgVuKBmfCq5fZMaeypMdaucLDyaeC6vkg1VDk+q/NvK6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1548925},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"38db6e07a56a025ac3fd184e4a913f606024d95f","private":false,"scripts":{"dev":"bun run --filter @open-bot/cli start -- serve","lint":"biome check .","test":"bun test","serve":"bun run packages/cli/src/cli.ts serve","format":"biome check --write .","pack:npm":"bun run scripts/pack-npm.ts","build:web":"bun run --filter @open-bot/web build","typecheck":"tsc --noEmit -p tsconfig.json","build:image":"bash packages/bot-image/build.sh","test:docker":"OPEN_BOT_LIVE=1 bun test packages/server/src/orchestrator/live.docker.test.ts --timeout 120000","prepublishOnly":"bun run pack:npm"},"_npmUser":{"name":"alextis59","email":"alex.tis59@gmail.com"},"repository":{"url":"git+https://github.com/alextis59/open-bot.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.2","description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","dockerode":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.4","typescript":"^5.8.2","@biomejs/biome":"^1.9.4","@types/dockerode":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/open-bot_0.1.0_1786905961995_0.22948454080438818","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alextis59/open-bot","version":"0.1.1","keywords":["opencode","agent","docker","local","chat"],"license":"MIT","_id":"@alextis59/open-bot@0.1.1","maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"homepage":"https://github.com/alextis59/open-bot#readme","bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"bin":{"open-bot":"dist/cli.mjs"},"dist":{"shasum":"a9e39b3dfb9993272203a04a6954cc43d575fe0e","tarball":"https://registry.npmjs.org/@alextis59/open-bot/-/open-bot-0.1.1.tgz","fileCount":19,"integrity":"sha512-URWVGIRir10c5d/O/VmUflbB5xvHGJrMVp898+AozJ3thSVcsznRb0b6aDD9sMbeywfh522iom6Jl4tJeK0hDg==","signatures":[{"sig":"MEYCIQDsLKIUr6kwZjurikg5ebhDuU34Vn1BYDs979XDblKlYgIhALxLFn2GucfDqS5hML++lr4VRjPsn8S/U1iZTvNV1XHY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2313129},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"4d367e5cda70b012faed98bfc5c30199a7feb7ae","private":false,"scripts":{"dev":"bun run --filter @open-bot/cli start -- serve","lint":"biome check .","test":"bun test","serve":"bun run packages/cli/src/cli.ts serve","format":"biome check --write .","pack:npm":"bun run scripts/pack-npm.ts","test:e2e":"OPEN_BOT_E2E=1 bun test packages/web/e2e --timeout 180000","build:web":"bun run --filter @open-bot/web build","typecheck":"tsc --noEmit -p tsconfig.json","build:image":"bash packages/bot-image/build.sh","test:docker":"OPEN_BOT_LIVE=1 bun test packages/server/src/orchestrator/live.docker.test.ts --timeout 120000","prepublishOnly":"bun run pack:npm"},"_npmUser":{"name":"alextis59","email":"alex.tis59@gmail.com"},"repository":{"url":"git+https://github.com/alextis59/open-bot.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.2","description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","dockerode":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.4","typescript":"^5.8.2","@biomejs/biome":"^1.9.4","@types/dockerode":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/open-bot_0.1.1_1786920764173_0.021254087001207234","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alextis59/open-bot","version":"0.1.2","keywords":["opencode","agent","docker","local","chat"],"license":"MIT","_id":"@alextis59/open-bot@0.1.2","maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"homepage":"https://github.com/alextis59/open-bot#readme","bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"bin":{"open-bot":"dist/cli.mjs"},"dist":{"shasum":"6185df1357a928f2f79fa917edc32d47a6326365","tarball":"https://registry.npmjs.org/@alextis59/open-bot/-/open-bot-0.1.2.tgz","fileCount":22,"integrity":"sha512-ruwgHjLDCmx0IMonmE5ujg7MHnJnqMKMzEdI9k5QcrPOOEWtE+i4JYIuCr/8LDDpyHAC6NcEeLBiBsGWRCMoBw==","signatures":[{"sig":"MEUCID9mtAopyBl2gcT4+WPJ+Ok2NTRa7TWcZ3kMNv2J0GY3AiEAofvxh4H8bhPzGkfbHLrSZja+moN70q3j9EbxoJxsFc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2663128},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"9259031551b946292825b64413826cb5240ce4d5","private":false,"scripts":{"dev":"bun run --filter @open-bot/cli start -- serve","lint":"biome check .","test":"bun test","serve":"bun run packages/cli/src/cli.ts serve","format":"biome check --write .","pack:npm":"bun run scripts/pack-npm.ts","test:e2e":"OPEN_BOT_E2E=1 bun test packages/web/e2e --timeout 180000","build:web":"bun run --filter @open-bot/web build","typecheck":"tsc --noEmit -p tsconfig.json","build:image":"bash packages/bot-image/build.sh","test:docker":"OPEN_BOT_LIVE=1 bun test packages/server/src/orchestrator/live.docker.test.ts --timeout 120000","prepublishOnly":"bun run pack:npm"},"_npmUser":{"name":"alextis59","email":"alex.tis59@gmail.com"},"repository":{"url":"git+https://github.com/alextis59/open-bot.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.2","description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","dockerode":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.4","typescript":"^5.8.2","@biomejs/biome":"^1.9.4","@types/dockerode":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/open-bot_0.1.2_1786988226997_0.37653516253651986","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alextis59/open-bot","version":"0.1.3","keywords":["opencode","agent","docker","local","chat"],"license":"MIT","_id":"@alextis59/open-bot@0.1.3","maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"homepage":"https://github.com/alextis59/open-bot#readme","bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"bin":{"open-bot":"dist/cli.mjs"},"dist":{"shasum":"d8299399ac000102462d8a5aa494579e69333c2b","tarball":"https://registry.npmjs.org/@alextis59/open-bot/-/open-bot-0.1.3.tgz","fileCount":22,"integrity":"sha512-WjDE1Mib2J9+Wn67gfM6AbZ0xJUds06rtkM/TTjwuocBtg9sx33542qHU6muXnW9qYjoMSM2EEmk0PYW39A0KA==","signatures":[{"sig":"MEYCIQCe2sGqpVcmNK07hi9wSX92a67TY5g+1mGwbKdqvaXuJwIhAJzQ5h9xA+1WvuPHigKalyZdYeI07WXRs9jtPVnr5h69","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2665348},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"9e019feaf3275feea549126fc57ca0ab76cea3dc","private":false,"scripts":{"dev":"bun run --filter @open-bot/cli start -- serve","lint":"biome check .","test":"bun test","serve":"bun run packages/cli/src/cli.ts serve","format":"biome check --write .","pack:npm":"bun run scripts/pack-npm.ts","test:e2e":"OPEN_BOT_E2E=1 bun test packages/web/e2e --timeout 180000","build:web":"bun run --filter @open-bot/web build","typecheck":"tsc --noEmit -p tsconfig.json","build:image":"bash packages/bot-image/build.sh","test:docker":"OPEN_BOT_LIVE=1 bun test packages/server/src/orchestrator/live.docker.test.ts --timeout 120000","prepublishOnly":"bun run pack:npm"},"_npmUser":{"name":"alextis59","email":"alex.tis59@gmail.com"},"repository":{"url":"git+https://github.com/alextis59/open-bot.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.2","description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","dockerode":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.4","typescript":"^5.8.2","@biomejs/biome":"^1.9.4","@types/dockerode":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/open-bot_0.1.3_1787122958215_0.5316987910543267","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alextis59/open-bot","version":"0.1.4","private":false,"description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","license":"MIT","type":"module","bin":{"open-bot":"dist/cli.mjs"},"engines":{"node":">=22.12.0"},"repository":{"type":"git","url":"git+https://github.com/alextis59/open-bot.git"},"bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"homepage":"https://github.com/alextis59/open-bot#readme","keywords":["opencode","agent","docker","local","chat"],"publishConfig":{"access":"public"},"workspaces":["packages/*"],"scripts":{"test":"bun test","test:e2e":"OPEN_BOT_E2E=1 bun test packages/web/e2e --timeout 180000","test:docker":"OPEN_BOT_LIVE=1 bun test packages/server/src/orchestrator/live.docker.test.ts --timeout 120000","typecheck":"tsc --noEmit -p tsconfig.json","lint":"biome check .","format":"biome check --write .","dev":"bun run --filter @open-bot/cli start -- serve","build:web":"bun run --filter @open-bot/web build","build:image":"bash packages/bot-image/build.sh","pack:npm":"bun run scripts/pack-npm.ts","prepublishOnly":"bun run pack:npm","serve":"bun run packages/cli/src/cli.ts serve"},"devDependencies":{"@biomejs/biome":"^1.9.4","@types/bun":"^1.2.4","@types/dockerode":"^4.0.1","typescript":"^5.8.2"},"dependencies":{"dockerode":"^5.0.1","yaml":"^2.9.0","zod":"^4.4.3"},"_id":"@alextis59/open-bot@0.1.4","gitHead":"2a5db65b7d663ad222804d691f5c4166cb834050","_nodeVersion":"22.19.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-Hu+3nXUBjmo6UqXQIbQZx3FCuXX7dpSaejmBiHmJ6cBdLA1VY+EwOSb1SYmh69aRVqvO6kePkfnSdqYzzi9fQw==","shasum":"eb755a30827d022b7ae6c1fdb8a43eb3a085eae9","tarball":"https://registry.npmjs.org/@alextis59/open-bot/-/open-bot-0.1.4.tgz","fileCount":22,"unpackedSize":2668407,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAFtVMYagbSFuoEvOsMw+ceT9eBgPEZASILR+BOHCUioAiB1S+VcSvKujdQE1y4EY8l+ykIgL5+JKpxeDx2Izb216Q=="}]},"_npmUser":{"name":"alextis59","email":"alex.tis59@gmail.com"},"directories":{},"maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/open-bot_0.1.4_1787137476332_0.5489505567859982"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T18:46:01.779Z","modified":"2026-08-19T11:04:36.708Z","0.1.0":"2026-08-16T18:46:02.184Z","0.1.1":"2026-08-16T22:52:44.357Z","0.1.2":"2026-08-17T17:37:07.197Z","0.1.3":"2026-08-19T07:02:38.424Z","0.1.4":"2026-08-19T11:04:36.554Z"},"bugs":{"url":"https://github.com/alextis59/open-bot/issues"},"license":"MIT","homepage":"https://github.com/alextis59/open-bot#readme","keywords":["opencode","agent","docker","local","chat"],"repository":{"type":"git","url":"git+https://github.com/alextis59/open-bot.git"},"description":"Local OpenCode teammates in Docker, with a Slack-like chat UI","maintainers":[{"name":"alextis59","email":"alex.tis59@gmail.com"}],"readme":"# open-bot\n\nLocal, open-source Grok Bot–style teammates, each running OpenCode in its own Docker container.\n\n## Docs\n\n- [v1 scope](FEATURES.md)\n- [v2 and later](FEATURES-v2.md)\n- [Sessions and memory](docs/sessions-and-memory.md)\n- [Providers and models](docs/providers.md)\n- [v1 specification](Study.md)\n- [Implementation plan](ImplementationPlan.md)\n\n## Develop\n\nRequires [Bun](https://bun.sh) 1.3+ installed from bun.sh (`~/.bun/bin/bun`). The Snap package cannot talk to the Docker socket.\n\n```bash\nbun install\nbun test\nbun run typecheck\nbun run lint\nbash packages/bot-image/build.sh   # once, for live Docker tests\n```\n\n## Install globally (npm)\n\nRequires Node 22+, Docker, and a provider API key.\n\n```bash\nnpm install -g @alextis59/open-bot\nopen-bot image          # builds the local OpenCode runtime image\nopen-bot serve          # http://127.0.0.1:7733\n```\n\nAfter the first start, edit `~/.open-bot/credentials.yaml` and `~/.open-bot/config.yaml`.\n\nSimple (one gateway, one adapter):\n\n```yaml\n# config.yaml\nproviders:\n  - id: openrouter\n    adapter: openai_compatible\n    base_url: https://openrouter.ai/api/v1\n    credential: openrouter\n    models:\n      - id: openai/gpt-4.1-mini\n        label: GPT-4.1 mini\n```\n\n```yaml\n# credentials.yaml\nschema_version: 1\nopenrouter:\n  api_key: sk-...\n```\n\nSame URL, different adapters per model (one credential, one `base_url`):\n\n```yaml\nproviders:\n  - id: work\n    adapter: openai_compatible   # default when a model omits adapter\n    base_url: https://gateway.company.com/v1\n    credential: work\n    models:\n      - id: gpt-4.1\n        label: GPT 4.1\n      - id: claude-sonnet-4\n        label: Claude\n        adapter: anthropic\n      - id: gemini-2.5-pro\n        label: Gemini\n        adapter: google\n        model: gemini-2.5-pro   # optional upstream id if it differs from id\n        # npm: \"@ai-sdk/google\" # optional override of the adapter package\n```\n\n`kind` is still accepted as an alias of `adapter`. Built-in adapters: `openai_compatible` (default), `openai`, `anthropic`, `google`. Restart `open-bot serve` after editing `config.yaml`. Full field reference and more examples: [docs/providers.md](docs/providers.md).\n\n### Proxy and container env\n\nOpenCode talks to the gateway **from inside the bot container**, so corporate proxies must be set there — not only on the host.\n\n- **Per bot:** Settings → Environment in the UI, or `env:` in that bot's `bot.yaml`.\n- **All bots:** `env:` on `~/.open-bot/config.yaml`. A bot value overrides the same host key.\n- Saving env (or mounts) recreates a running container so the new process env takes effect.\n- Names starting with `OPENCODE_`, `OPEN_BOT_`, or `XDG_` are reserved.\n\n```yaml\n# config.yaml — defaults for every bot\nenv:\n  HTTP_PROXY: http://proxy.corp:8080\n  HTTPS_PROXY: http://proxy.corp:8080\n  NO_PROXY: localhost,127.0.0.1,.corp\n```\n\n```yaml\n# bots/<id>/bot.yaml — override or add\nenv:\n  NO_PROXY: localhost,127.0.0.1,.corp,openrouter.ai\n```\n\nSettings has an **Add proxy vars** button that pre-fills `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY`. Some tools also read lowercase `http_proxy`; add those names if you need them.\n\nIf the laptop can reach the gateway **directly** (hostname in host `NO_PROXY`) but the bot on the `open-bot` bridge cannot — and the corp proxy cannot `CONNECT` to that host either — put the bot on the host network so it uses the same path as the laptop:\n\n```yaml\n# config.yaml\ndocker:\n  network: host\n```\n\nRestart `open-bot serve` and recreate the bot (Stop/Start). Each bot still gets its own loopback port for OpenCode. The container can see other localhost services; that is the tradeoff. Keep `base_url: https://llm.example/v1` and the same `NO_PROXY` as the laptop.\n\nYou do **not** publish port 8080 (or any gateway port) on the bot container. Published ports are inbound (OpenCode on 4096). The model call is outbound from the container.\n\n`localhost` / `127.0.0.1` inside the container is the container itself, not the work laptop. If the gateway listens on the host at `:8080`, use:\n\n```yaml\nbase_url: http://host.docker.internal:8080/v1\n```\n\nBot containers get `host.docker.internal` mapped to the host (including Linux). Recreate a running bot after upgrading so the mapping is applied. If the gateway is another machine (`http://llm.corp:8080`) and the same `curl` fails only in the container, that is DNS or routing on the `open-bot` bridge, not a missing publish.\n\nPublish (maintainers):\n\n```bash\nnpm publish --access=public\n```\n\n`prepublishOnly` runs `bun run pack:npm` first (needs Bun on the publisher machine). Skip that with `npm publish --ignore-scripts` only if `dist/` is already built.\n\nThe npm package is `@alextis59/open-bot` (public). The CLI command is still `open-bot`. The bot containers still run OpenCode in Docker; the npm package is the host control plane + UI.\n\n## Quickstart (from source)\n\n```bash\nbun install\nbash packages/bot-image/build.sh\nbun run build:web\n# edit ~/.open-bot/credentials.yaml after the first serve creates it\nbun run serve\n# open http://127.0.0.1:7733\n```\n\nOptional Compose (needs the Docker socket):\n\n```bash\ndocker compose up\n```\n\nSingle binary (after `bun run build:web`):\n\n```bash\nbun build --compile packages/cli/src/cli.ts --outfile open-bot\n./open-bot serve\n```\n\nData lives in `$OPEN_BOT_HOME` (default `~/.open-bot`). See [docs/v1-trace.md](docs/v1-trace.md) for how each v1 feature is implemented.","readmeFilename":"README.md"}