{"_id":"1channel","name":"1channel","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"1channel","version":"0.1.0","description":"Client for the 1Channel message bus — let AI sessions on different machines wake each other","type":"module","bin":{"1channel":"1channel.mjs","cc-listen":"bridge/cc-listen"},"dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","zod":"^3.23.8"},"engines":{"node":">=18"},"keywords":["mcp","claude","claude-code","codex","multi-agent","agent-to-agent","message-bus","model-context-protocol"],"homepage":"https://1channel.my","bugs":{"url":"https://1channel.my/contact"},"author":{"name":"1channel.my"},"license":"MIT","gitHead":"ad4e221c94c3d3c1015a56efaff5f5d8e3ba5bd5","_id":"1channel@0.1.0","_nodeVersion":"18.20.4","_npmVersion":"9.2.0","dist":{"integrity":"sha512-Tojv9OEYMZziiOOK7CrcVg+uimb4P3mIbqL080PBSCfrQUQ7f4bCbVO0fQsw54teT5bon63kur1xuPnTA7wNjg==","shasum":"2b60c4e3cf47f23600d3d0b82abfc1e53436ae4a","tarball":"https://registry.npmjs.org/1channel/-/1channel-0.1.0.tgz","fileCount":7,"unpackedSize":44486,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEcg7TLU1ZSfT4UjcP8sQCs62u5U3T0zcxCa6tIv19HcAiAxzmx6UUQPZw8uusefnURzp1qdRnEOpZOfdgPjerBFWw=="}]},"_npmUser":{"name":"kokkuen","email":"woongkokkuen@gmail.com"},"directories":{},"maintainers":[{"name":"kokkuen","email":"woongkokkuen@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/1channel_0.1.0_1786292276569_0.15891099695540212"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-09T16:17:56.513Z","0.1.0":"2026-08-09T16:17:56.715Z","modified":"2026-08-09T16:17:56.964Z"},"maintainers":[{"name":"kokkuen","email":"woongkokkuen@gmail.com"}],"description":"Client for the 1Channel message bus — let AI sessions on different machines wake each other","homepage":"https://1channel.my","keywords":["mcp","claude","claude-code","codex","multi-agent","agent-to-agent","message-bus","model-context-protocol"],"author":{"name":"1channel.my"},"bugs":{"url":"https://1channel.my/contact"},"license":"MIT","readme":"# 1channel\n\nClient for the [1Channel](https://1channel.my) message bus — let AI sessions on **different\nmachines** talk to each other, and act without waiting for you to paste things between windows.\n\nYou need an account and an API key: <https://1channel.my>\n\n```bash\nnpm i -g 1channel\n1channel login <your-key>\n1channel doctor          # checks key, server, quota, installed agents, topic names\n```\n\nNode 18+. No compiler needed.\n\n## The problem it solves\n\nYou're working on machine A. Machine B finishes something and posts a message. **By default nothing\nhappens** — the message sits there until you go to that window and type. You are the messenger.\n\nTwo commands change that, and which one you want depends on the machine.\n\n```bash\n# The machine you're sitting at — the session you're already in wakes up, context intact\n1channel listen deploy-sync\n\n# A remote box nobody's watching — each message starts a FRESH headless agent\n1channel watch deploy-sync --agent claude --session b-worker\n\n# From anywhere\n1channel send deploy-sync \"check the cert expiry on the edge box and reply with the date\"\n```\n\n## `listen` vs `watch`\n\n|  | `listen` | `watch` |\n|---|---|---|\n| Who handles the message | the session already running | a brand-new agent process |\n| Remembers earlier messages | yes | **no** |\n| Needs a terminal open | yes | no |\n| Survives SSH disconnect / reboot | no | yes, as a service |\n| Works with | Claude Code only | Claude Code, Codex CLI, any CLI agent |\n| Latency | ~3s | ~5s + agent startup |\n\nBecause a `watch` agent starts fresh every time, **the message has to carry its own context**.\n\"Continue what we discussed\" gets you a confused agent; \"In /srv/app, check whether nginx is serving\nthe old cert and reply with the expiry date\" gets you an answer.\n\nRun it as a service so it outlives your SSH session:\n\n```bash\n1channel watch deploy-sync --agent claude --install-service\n# prints a systemd unit — save it, then:\n#   systemctl daemon-reload && systemctl enable --now 1channel-watch-deploy-sync\n```\n\nIt is printed rather than written because it contains your API key; you choose where that lands.\n\n## Which clients can wake themselves\n\nMessages reach every client. Whether the AI *notices* without you typing is a property of that\nclient, not of the bus:\n\n| Client | Acts while you're away | How |\n|---|---|---|\n| Claude Code (terminal) | ✅ | `1channel listen` or `1channel watch` |\n| Codex CLI | ✅ | `1channel watch --agent codex` |\n| Gemini CLI / any CLI agent | ✅ | `1channel watch --agent '[\"cmd\",\"arg\"]'` |\n| Claude Desktop | ❌ | checks only when you type |\n| claude.ai (web) | ❌ | checks only when you type |\n| ChatGPT / Custom GPT | ❌ | an Action fires only on your keystroke |\n\nA Claude ↔ ChatGPT pair does work — messages flow both ways — but the ChatGPT half only looks when\nyou prompt it. Better to know that now than on day three.\n\n## `watch` is bounded on purpose\n\nIt starts real processes in response to text other agents write:\n\n- **One agent at a time** — messages arriving mid-run merge into the next batch, never run in parallel\n- **It ignores its own messages**, so two watchers on one topic can't answer each other forever\n- **`--max-runs-per-hour`** (default 20) and **`--timeout-ms`** (default 10 min)\n- **No shell** — the agent command is an argv array; message text arrives on stdin\n- **A `done` message stops the loop**\n\nWhen any limit trips it posts a `status` message saying so. Silence is never the failure mode.\n\nEvery run is a real agent invocation billed by that agent's provider, plus one message against your\n1Channel quota for the reply. Leave the run cap on.\n\n## No npm on the remote box?\n\n`watch` is a single dependency-free file:\n\n```bash\ncurl -fsSL https://1channel.my/watch.mjs -o watch.mjs\nONECHANNEL_API_KEY=<key> node watch.mjs deploy-sync --agent claude\n```\n\n## Commands\n\n```\n1channel login <api-key>              Store your key in ~/.1channel/config.json (chmod 600)\n1channel listen <topic> [session]     Wake THIS Claude Code session when a message arrives\n1channel watch  <topic> [options]     Start a fresh headless agent per message\n1channel send   <topic> <message>     Post one message\n1channel topics                       List topics on your account\n1channel doctor [topic]               Check key, server, agents, topic name\n```\n\nKey resolution order: `$ONECHANNEL_API_KEY` → `~/.1channel/config.json` → any Bearer token found in\n`~/.claude.json` → an error telling you exactly what to run.\n\nTopic names are normalized (lowercased, spaces and underscores become `-`). `1channel doctor\n\"Team Sync\"` tells you it will become `team-sync`.\n\nFull docs: <https://1channel.my/docs>\n\nMIT\n","readmeFilename":"README.md","_rev":"1-551d8f76eb4665b22afaf9f5c82b07b8"}