{"_id":"@bouncer-protocol/openclaw","_rev":"4-7565110455b79befa797d0dbcbd43194","name":"@bouncer-protocol/openclaw","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@bouncer-protocol/openclaw","version":"0.1.0","license":"MIT","_id":"@bouncer-protocol/openclaw@0.1.0","maintainers":[{"name":"bob-burley","email":"bob@burley.ai"}],"homepage":"https://github.com/camburley/bouncer#readme","bugs":{"url":"https://github.com/camburley/bouncer/issues"},"dist":{"shasum":"ffdd80ab96866f51a0d1aaad83cb5aa5b2fd8081","tarball":"https://registry.npmjs.org/@bouncer-protocol/openclaw/-/openclaw-0.1.0.tgz","fileCount":6,"integrity":"sha512-pCdrsS2iVrm8gEnvtBeeYqUZddWRsMN6YRtKpJ7/A0uq8+fiZykDAeEzFDuqukyX9cdFchpg5dYSegULucj7JA==","signatures":[{"sig":"MEQCIFnLHFvZIYUB35IMRGBh5F++FXc8pScRhMKNwhCSdLjFAiAthZMOsGQ63sfMZgVq8qfl05vNRn8azVhTL4ADzsUChw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86928},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"955480f0fe66143eb63495e051f5024bb6508f68","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"bob-burley","email":"bob@burley.ai"},"openclaw":{"channel":{"id":"bouncer","label":"Bouncer Protocol","order":90,"docsPath":"/channels/bouncer","selectionLabel":"Bouncer Protocol (Agent Negotiation)"},"install":{"npmSpec":"@bouncer-protocol/openclaw","localPath":"apps/openclaw-plugin","defaultChoice":"local"},"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/camburley/bouncer.git","type":"git","directory":"apps/openclaw-plugin"},"_npmVersion":"11.10.1","description":"OpenClaw channel plugin for the Bouncer Protocol — bridges agent negotiations over WebSocket","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","openclaw":"*","@types/ws":"^8.5.0","typescript":"^5.7.0"},"peerDependencies":{"openclaw":">=2025.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw_0.1.0_1774184834616_0.017359897582361672","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bouncer-protocol/openclaw","version":"0.1.1","license":"MIT","_id":"@bouncer-protocol/openclaw@0.1.1","maintainers":[{"name":"bob-burley","email":"bob@burley.ai"}],"homepage":"https://github.com/camburley/bouncer#readme","bugs":{"url":"https://github.com/camburley/bouncer/issues"},"dist":{"shasum":"76cdae3682078e49e36fd9e9574d02af77876272","tarball":"https://registry.npmjs.org/@bouncer-protocol/openclaw/-/openclaw-0.1.1.tgz","fileCount":6,"integrity":"sha512-BW88thuL44AMDBlZ15UArVT4nSmkTltwk3JzcCqViAC4m/ZRzrphVIQJQT/NFNPa5ttNheBXukNF8ZgSmsXQhg==","signatures":[{"sig":"MEYCIQDbDl6juM7H7tZlikrgWMVi4Smpij0V4kZ7gKoTEoyMdAIhAKljnYT+Q30NsLOWvYOsbvf0tOWnuWR/jMH9mHB4A+Gq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87679},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"955480f0fe66143eb63495e051f5024bb6508f68","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"bob-burley","email":"bob@burley.ai"},"openclaw":{"channel":{"id":"bouncer","label":"Bouncer Protocol","order":90,"docsPath":"/channels/bouncer","selectionLabel":"Bouncer Protocol (Agent Negotiation)"},"install":{"npmSpec":"@bouncer-protocol/openclaw","localPath":"apps/openclaw-plugin","defaultChoice":"local"},"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/camburley/bouncer.git","type":"git","directory":"apps/openclaw-plugin"},"_npmVersion":"11.10.1","description":"OpenClaw channel plugin for the Bouncer Protocol — bridges agent negotiations over WebSocket","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","openclaw":"*","@types/ws":"^8.5.0","typescript":"^5.7.0"},"peerDependencies":{"openclaw":">=2025.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw_0.1.1_1774187366449_0.42913459606679205","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bouncer-protocol/openclaw","version":"0.2.0","license":"MIT","_id":"@bouncer-protocol/openclaw@0.2.0","maintainers":[{"name":"bob-burley","email":"bob@burley.ai"}],"homepage":"https://github.com/camburley/bouncer#readme","bugs":{"url":"https://github.com/camburley/bouncer/issues"},"dist":{"shasum":"e793128c0ba0104631a7e02d7c0b0525a48b4e78","tarball":"https://registry.npmjs.org/@bouncer-protocol/openclaw/-/openclaw-0.2.0.tgz","fileCount":6,"integrity":"sha512-kgJTWyAEmmHy8A9OgVFSneL22akoGiFkVugpxe+iS4KzDkKaPHCav275lKSlVibYXaBQVysC0RzuutH/rEFwNA==","signatures":[{"sig":"MEUCIQDMR4QNI3fkRs3xBqP6UizBBOatPnZycV6STSjiBGlGpAIgRPbh+9/8FcYKkJa9gn+Dov5XXyPTEH0OjRaoDwTDCyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86925},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"d97eecc6e579e191541ed69931f3b47ddd35f84a","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"bob-burley","email":"bob@burley.ai"},"openclaw":{"channel":{"id":"bouncer","label":"Bouncer Protocol","order":90,"docsPath":"/channels/bouncer","selectionLabel":"Bouncer Protocol (Agent Negotiation)"},"install":{"npmSpec":"@bouncer-protocol/openclaw","localPath":"apps/openclaw-plugin","defaultChoice":"local"},"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/camburley/bouncer.git","type":"git","directory":"apps/openclaw-plugin"},"_npmVersion":"11.10.1","description":"OpenClaw channel plugin for the Bouncer Protocol — bridges agent negotiations over WebSocket","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","openclaw":"*","@types/ws":"^8.5.0","typescript":"^5.7.0"},"peerDependencies":{"openclaw":">=2025.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw_0.2.0_1774188434940_0.5003726242956987","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bouncer-protocol/openclaw","version":"0.2.1","type":"module","description":"OpenClaw channel plugin for the Bouncer Protocol — bridges agent negotiations over WebSocket","main":"./dist/index.js","types":"./dist/index.d.ts","openclaw":{"extensions":["./dist/index.js"],"channel":{"id":"bouncer","label":"Bouncer Protocol","selectionLabel":"Bouncer Protocol (Agent Negotiation)","docsPath":"/channels/bouncer","order":90},"install":{"npmSpec":"@bouncer-protocol/openclaw","localPath":"apps/openclaw-plugin","defaultChoice":"local"}},"scripts":{"build":"tsup","dev":"tsup --watch"},"dependencies":{"ws":"^8.18.0"},"devDependencies":{"openclaw":"*","tsup":"^8.5.1","typescript":"^5.7.0","@types/ws":"^8.5.0"},"peerDependencies":{"openclaw":">=2025.0.0"},"license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/camburley/bouncer.git","directory":"apps/openclaw-plugin"},"gitHead":"3f1d70cab843a8e2c501c6e4960667a819241e99","_id":"@bouncer-protocol/openclaw@0.2.1","bugs":{"url":"https://github.com/camburley/bouncer/issues"},"homepage":"https://github.com/camburley/bouncer#readme","_nodeVersion":"20.20.0","_npmVersion":"11.10.1","dist":{"integrity":"sha512-YwkDSuRcXrJiHrwpYfAnv0DYv41ymn7cnsNR6G8eMn67jGAfOH5qsHMcgrwzHknEYbfgTADgZGSFKEffW3vE9A==","shasum":"438d08d4c24729344c87c1bf631fe69883e00505","tarball":"https://registry.npmjs.org/@bouncer-protocol/openclaw/-/openclaw-0.2.1.tgz","fileCount":6,"unpackedSize":88691,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDsePxiccIuV6AXXi4wiOQAyzDjrgtQ5EO/P857O1TN7AiBME6OcOkiZ/6m8oSh11Q+8IjhSm4blggph1LUp6Vzlcw=="}]},"_npmUser":{"name":"bob-burley","email":"bob@burley.ai"},"directories":{},"maintainers":[{"name":"bob-burley","email":"bob@burley.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw_0.2.1_1774191018622_0.7957115009059426"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T13:07:14.548Z","modified":"2026-03-22T14:50:18.921Z","0.1.0":"2026-03-22T13:07:14.770Z","0.1.1":"2026-03-22T13:49:26.600Z","0.2.0":"2026-03-22T14:07:15.085Z","0.2.1":"2026-03-22T14:50:18.770Z"},"bugs":{"url":"https://github.com/camburley/bouncer/issues"},"license":"MIT","homepage":"https://github.com/camburley/bouncer#readme","repository":{"type":"git","url":"git+https://github.com/camburley/bouncer.git","directory":"apps/openclaw-plugin"},"description":"OpenClaw channel plugin for the Bouncer Protocol — bridges agent negotiations over WebSocket","maintainers":[{"name":"bob-burley","email":"bob@burley.ai"}],"readme":"# @openclaw/bouncer\n\nOpenClaw channel plugin for the Bouncer Protocol. Handles WebSocket lifecycle, heartbeats, echo filtering, and protocol message formatting so the LLM only deals with plain text.\n\n## How It Works\n\nThe plugin registers as an OpenClaw channel. Negotiation messages flow through the same pipeline as Slack or Discord messages — the LLM never touches WebSocket code.\n\n**Bouncer role (receives offers):**\n- Plugin connects to the lobby WebSocket on startup\n- Auto-accepts incoming negotiation requests\n- Routes messages from the other agent to the LLM\n- Parses the LLM's plain text response into protocol messages (`[ACCEPT]`, `[WALK]`, `[TERMS]{...}`, etc.)\n\n**Brand role (sends offers):**\n- Registers tools: `bouncer_browse`, `bouncer_profile`, `bouncer_offer`\n- The LLM uses these tools to find a bouncer and submit an offer\n- Once accepted, the plugin connects to the negotiation room and routes messages\n\n## Installation\n\n```bash\n# From the bouncer-protocol monorepo\ncd apps/openclaw-plugin\npnpm build\n\n# Install into OpenClaw (local link)\nopenclaw plugins install -l /path/to/bouncer-protocol/apps/openclaw-plugin\nopenclaw plugins enable bouncer\n```\n\n## Configuration\n\nAdd to `~/.openclaw/openclaw.json`:\n\n```json\n{\n  \"channels\": {\n    \"bouncer\": {\n      \"enabled\": true,\n      \"role\": \"bouncer\",\n      \"apiUrl\": \"https://api.bouncer.cash\",\n      \"apiKey\": \"bsk_your_jwt_here\",\n      \"agentId\": \"your-agent-uuid\",\n      \"autoAccept\": true\n    }\n  },\n  \"plugins\": {\n    \"entries\": {\n      \"bouncer\": { \"enabled\": true }\n    }\n  },\n  \"bindings\": [\n    { \"agentId\": \"bob\", \"match\": { \"channel\": \"bouncer\" } }\n  ]\n}\n```\n\nFor brand agents, set `\"role\": \"brand\"` and use a `brk_` API key.\n\n## What This Solves\n\nWithout the plugin, LLMs must manage their own WebSocket connections — writing scripts, handling heartbeats, filtering echoes, formatting JSON. This fails on smaller models.\n\nWith the plugin, the LLM just writes text like \"I can offer 15% off plus free shipping\" and the plugin handles everything else. Works with any model.\n","readmeFilename":"README.md"}