Show HN: How distributed Claude Code is built on a tunnelling service Nfltr is a tunnelling service that distributes Claude Code across multiple machines by turning one Claude session into a hub that spawns and manages agents on joined nodes via tools including spawn_agent, send_message, stop_agent, list_agents, wait_for_agents, list_nodes and start_monitor. Machines join once with `nfltr node join --max-agents 2`, and agents keep running when the hub disconnects, with each completion delivered exactly once so a reattaching hub receives missed results without duplicates. Capabilities are opt-in per machine: agents cannot run shell or `git push` without `--allow-all-tools` (failing with `tools_not_allowed`), monitors require `--allow-monitors`, and nodes clone only repositories listed with `--allow-repo`. How distributed Claude Code is built with nfltr Claude Code already knows how to split up work. It starts subagents, lets them run in the background, and picks up their results when they finish. That works well as long as everything the work needs is on the machine where Claude Code runs. Often it is not: - The dataset lives on a VM and should not leave it. - The failing service is only reachable from inside one network. - Three independent fixes would go faster on three machines at once. - The machine doing the work gets restarted halfway through. nfltr keeps Claude Code's model and removes the one-machine limit. Here is how it is built, what went wrong along the way, and how we test it. The idea: Claude Code's hub, made distributed In nfltr, one Claude session is the hub. It gets a small set of tools that mirror Claude Code's own subagent model: - spawn agent starts an agent from a brief and returns its id at once. - send message reaches an agent. A running agent gets it in its live session; a finished one continues in the same session and workspace. - stop agent cancels an agent. Its partial work comes back as evidence. - list agents shows each agent's status, machine, progress and last activity. - wait for agents blocks until results arrive and returns them. - list nodes shows the joined machines, their descriptions, and how many more agents each may start. - start monitor runs a command on a machine without a model. Each line it prints becomes an event for the hub. The difference from subagents is where the agents run: on any machine you have joined, and they keep running when the hub goes away. nfltr orch "