{"slug": "show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words", "title": "Show HN: Entangle, hand a live AI coding session to anyone with three words", "summary": "Entangle, a new open-source tool from developer Gowtham Sai Yadav, lets users share live AI coding sessions from Claude Code, Codex, and opencode with a three-word code, with end-to-end encryption and no account or server. The tool, formerly claude-teleport, also packs session history for migration to a new machine, rewriting paths so conversations resume where they left off. It supports macOS, Linux, and Windows via install scripts or Homebrew.", "body_md": "**Hand a live coding session to anyone.**\n\nClaude Code, Codex, and opencode.\n\nEncrypted, no account, three spoken words.\n\nYour coding sessions live only on the machine that made them. So the day you want to hand a conversation to a teammate, or move to a new laptop, you are stuck: copying the folder by hand does not work, because every session is pinned to the exact path your project sat at, and that path is different everywhere else.\n\nentangle makes it one command. Send a live session straight to someone with a short code they type in, or pack your whole history and carry it to a new machine, with every path rewritten so the conversation opens where it left off.\n\nIt works across coding agents, not just one. A Claude Code session goes to Claude Code,\na Codex session to Codex, an opencode session to opencode - listed together, shared the\nsame way. (Opening one tool's session *inside another* is a different problem, and not\none this solves yet.)\n\nTwo scopes, and it matters which you need. **Sharing one session covers all three tools.**\n**Packing a whole machine covers Claude Code only so far** - move a Codex or opencode\nsession with `entangle share`\n\ninstead. `entangle export`\n\ntells you what it left out rather\nthan letting you discover it on the new laptop.\n\nIt is private by construction. Nothing is uploaded, there is no account and no server in\nthe middle; a direct transfer is end-to-end encrypted, likely secrets are scrubbed before\nanything leaves your machine, and your login never travels at all. The one exception is an\nanonymous once-a-day check for a new release, which sends nothing about you and\n[can be turned off](#updating).\n\nRenamed.This project was`claude-teleport`\n\nuntil it outgrew a single vendor. The old command still works and still updates itself; it will tell you how to switch.\n\nmacOS and Linux:\n\n```\ncurl -fsSL https://gowthamsai.in/install.sh | sh\n```\n\nWith Homebrew:\n\n```\nbrew install gowtham-sai-yadav/tap/entangle\n```\n\nWindows (PowerShell):\n\n```\nirm https://gowthamsai.in/install.ps1 | iex\n```\n\nEach one fetches the right prebuilt binary, verifies its checksum, and puts it on your PATH. Confirm with `entangle version`\n\n.\n\n## Other ways: Go, direct download, from source\n\n**With Go:**\n\n```\ngo install github.com/gowtham-sai-yadav/entangle@latest\n```\n\nThis installs into `$(go env GOPATH)/bin`\n\n(usually `~/go/bin`\n\n). If the command is not found afterward, that folder is not on your PATH yet: `echo 'export PATH=\"$HOME/go/bin:$PATH\"' >> ~/.zshrc && source ~/.zshrc`\n\n.\n\n**Direct download:** grab the file for your machine from the [latest release](https://github.com/gowtham-sai-yadav/entangle/releases/latest) (`...-darwin-arm64`\n\nfor Apple Silicon, `-darwin-amd64`\n\nfor Intel Macs, `-linux-amd64`\n\n, or `-windows-amd64.exe`\n\n), then on macOS/Linux `chmod +x`\n\nit and move it onto your PATH.\n\n**From source:**\n\n```\ngit clone https://github.com/gowtham-sai-yadav/entangle\ncd entangle && go build -o entangle .\n```\n\nThe quickest way in is to just run:\n\n```\nentangle\n```\n\nWith a terminal attached, that opens a full-screen cockpit: your sessions in a searchable list, with every action a keypress away. Send one to a teammate over an encrypted code, share it to a file, receive one, export or import a backup, or update in place, all without remembering a single flag. Press `?`\n\nfor what each key does. Run `entangle tui`\n\nto open it explicitly; piped or scripted, the same binary behaves like a normal CLI.\n\nPrefer typing the commands yourself? Everything below works on its own too.\n\nHand one conversation to someone else, with all its context intact, so they can carry it forward. Find the session first:\n\n```\nentangle sessions\n```\n\nThen send it one of two ways.\n\n**Straight across, by code** (no file to move, nothing uploaded anywhere):\n\n```\nentangle send <id>\n```\n\nYou read out the short code it prints; they run `entangle receive <code>`\n\nfrom their copy of the project. The transfer is end-to-end encrypted, so no server can read it.\n\nIf they do not have entangle, you do not have to talk them through installing it. Both `send`\n\nand the cockpit's `c`\n\nkey give you a message that is ready to paste into chat, with the install line and the receive command already in it:\n\n```\nRun these from inside your copy of the project\n(skip the first line if you already have entangle):\n\n  curl -fsSL https://gowthamsai.in/install.sh | sh\n  entangle receive 6-pioneer-village\n\nWindows PowerShell: irm https://gowthamsai.in/install.ps1 | iex\n```\n\nReceived sessions attach to the directory they are run in, and every file path in the conversation is rewritten to match. That is why it says to run it from inside their copy of the project. From the wrong folder it still imports, but the paths in it point at files that are not there.\n\nThis is what they see. It shows the rewrite it is about to do before it does it, then confirms the session can actually be resumed rather than leaving you to find out:\n\n``` php\nPath remapping:\n  /Users/alex/work/dashboard  ->  /Users/sam/projects/dashboard\n  /Users/sam  ->  /Users/sam\n  /Users/alex  ->  /Users/sam\n\nProjects:\n     OLD                         NEW                            SESSIONS\n  +  /Users/alex/work/dashboard  /Users/sam/projects/dashboard  1\n\nDone. 1 file(s) written, 0 skipped (already present); 0 project entries merged into .claude.json.\n\nVerify: 1/1 migrated project(s) look resume-ready.\n\nIMPORTANT: your login was NOT transferred - credentials never are.\nOpen Claude Code, log in once, then run `claude --resume` inside a project.\n```\n\n**As a file**, if they are not around right now:\n\n```\nentangle share <id>\n```\n\nThey import it later with `entangle import <file>`\n\n.\n\nEither way, likely secrets (keys, tokens, passwords) are scrubbed before anything leaves your machine, and your login is never included. `--last`\n\npicks your most recent session, and `--with-context`\n\nalso includes the project's memory files.\n\nMoving all of your work to a new computer is two commands, one on each.\n\n**On the old machine**, pack everything into a file:\n\n```\nentangle export\n```\n\nCopy the file it creates to the new machine any way you like: AirDrop, a USB stick, `scp`\n\n.\n\n**On the new machine**, install Claude Code and sign in once, then restore:\n\n``` python\nentangle import entangle-backup-*.tgz\n```\n\nIt shows you every project and where it will land, asks you to confirm, fixes the paths, and checks your sessions are resume-ready. Add `--dry-run`\n\nto preview without writing anything, and `--map /old/path=/new/path`\n\nif it guesses a location wrong.\n\n```\nentangle gui\n```\n\ndoes the same restore in a browser: point it at a bundle, see every project as a *from → to* row, untick what you do not want, and nothing is written until you confirm. Add a bundle path to skip straight to the review, or `--port N`\n\nto pin the port. It serves on `127.0.0.1`\n\nonly and needs no network.\n\nThen open a project and carry on:\n\n```\ncd ~/path/to/your/project\nclaude --resume\n```\n\nYour login does not transfer, on purpose. Credentials are locked to each machine, so just sign in once on the new one.\n\nPrefer to stay in VS Code? The [entangle extension](/gowtham-sai-yadav/entangle/blob/main/vscode) adds the same actions to the Command Palette, a status-bar button, and a sidebar: send a session by code, receive one, share to a file, or browse your sessions. It drives the CLI under the hood and offers to install it for you on first use.\n\nIt is not on the VS Code marketplace yet ([#41](https://github.com/gowtham-sai-yadav/entangle/issues/41)). Until it is, run it from this repo: open `vscode/`\n\nin VS Code and press `F5`. The CLI above is the supported way in.\n\n```\nentangle update\n```\n\nchecks for a newer release and swaps the binary in place. **If you installed with Homebrew, run brew upgrade entangle instead.** Replacing the file inside a keg works, but leaves brew still believing the old version is installed, and a later\n\n`brew upgrade`\n\ncan then put an older build back over the top. `entangle`\n\nwarns you before doing this.You will also be told when a release exists, so a stale copy is a choice rather than an accident:\n\n```\nnote: entangle 0.7.0 is available (you have 0.6.0). Update with: entangle update\n```\n\nThe cockpit shows the same thing in its header. The rules behind it:\n\n**It never makes you wait.** The check runs*after*your command has finished and only writes down what it found; the note appears the next time you run something. Your session list is never behind a network round trip.**It asks at most once a day**, and stays quiet for a day after a failure too, so an offline machine does not retry on every command.** It never writes to stdout.**The note goes to stderr, and only when a terminal is attached.`entangle sessions --json`\n\nstays machine-readable, and scripts and CI never see it.**It says nothing when it fails.** No network errors you did not ask for.**It is off for builds from source**(`dev`\n\nversions), which would otherwise be told forever that they are behind.\n\nThis is the one thing entangle asks the network about on its own: an anonymous, unauthenticated `GET api.github.com/repos/.../releases/latest`\n\n. No account, no identifier, and nothing about your sessions. To turn off both the message and the request:\n\n```\nexport ENTANGLE_NO_UPDATE_CHECK=1\n```\n\n**Moves:** your Claude Code sessions, project memory, settings, prompt history, and the portable parts of `~/.claude.json`\n\n, all re-pathed for the new machine. Codex and opencode sessions move one at a time with `entangle share`\n\n.\n\n**Never moves:** your login. Credentials are machine-locked and deliberately left out.\n\n**Skipped:** caches, telemetry, and other throwaway files that rebuild themselves.\n\nImport runs on the destination, so it detects the OS and translates everything, including Windows drive letters and backslashes. Linux and macOS paths look like `/home/you`\n\nor `/Users/you`\n\n; Windows uses `C:\\Users\\you`\n\n. You do not have to do anything special, it just works in any direction.\n\n## Is it safe, and how does it work?\n\n**Safe by default:**\n\n- It never overwrites an existing file. It merges and tells you what it skipped;\n`--overwrite`\n\nbacks up each replaced file first. `--dry-run`\n\nshows exactly what will happen before anything is written.- The file-based flow is fully offline. Sharing scrubs likely secrets (best effort, so glance at what you send) and never includes your login.\n\n**How it works:**\n\nA bundle is a `.tgz`\n\nwith a manifest that records each project's true absolute path, the piece the folder name throws away, read from `~/.claude.json`\n\nand the `cwd`\n\nstored inside each transcript. On import it re-encodes the folder names for the target OS, rewrites the in-file paths (matching Windows paths in their JSON-escaped form so none are missed), merges without overwriting, and verifies every session is resume-ready.\n\nThe full design and reasoning is in [DESIGN.md](/gowtham-sai-yadav/entangle/blob/main/DESIGN.md).\n\n## All commands and flags\n\n```\nentangle                    open the interactive cockpit (default when a terminal is attached)\nentangle tui                open the interactive cockpit explicitly\nentangle export   [--out FILE] [--config-dir DIR]\nentangle import   <bundle> [flags]\nentangle inspect  <bundle>\nentangle verify   [--config-dir DIR]\nentangle sessions [--tool T] [--project P] [--config-dir DIR] [--json]\nentangle share    <session-id | --last> [--tool T] [--project P] [--out FILE] [--with-context] [--no-redact] [--yes]\nentangle send     <session-id | --last> [--tool T] [--project P] [--with-context] [--no-redact] [--rendezvous URL] [--relay HOST:PORT] [--yes]\nentangle receive  <code> [--config-dir DIR] [--map OLD=NEW]... [--rendezvous URL] [--relay HOST:PORT] [--yes]\nentangle update   [--check] [--yes]\nentangle gui      [bundle] [--port N]\n```\n\n`import`\n\nflags:\n\n| Flag | What it does |\n|---|---|\n`--dry-run` |\nShow the plan and write nothing. A good first run. |\n`--map OLD=NEW` |\nRemap a path prefix (repeatable). The most specific match wins. |\n`--project P` |\nImport only this project, by path or folder (repeatable). |\n`--target-home DIR` |\nOverride the detected home directory. |\n`--target-os OS` |\nRender paths for `linux` , `darwin` , or `windows` . |\n`--overwrite` |\nReplace existing files (each is backed up first). |\n`--deep` |\nRewrite old paths everywhere in transcripts, not just the `cwd` field. |\n`--yes` |\nSkip the confirmation prompt. |\n\n`--tool`\n\ntakes `claude-code`\n\n, `codex`\n\n, `opencode`\n\n, or `all`\n\n. It defaults to `all`\n\n, so you rarely need it: `sessions`\n\nshows every agent on the machine, and `share`\n\n/`send`\n\nwork out which one an id belongs to. Pass it when you want a listing narrowed to a single tool.\n\n`inspect`\n\nshows what is inside a bundle. `verify`\n\nchecks the sessions already on this machine are resume-ready (Claude Code only, like `export`\n\n). `send`\n\n/`receive`\n\nuse the public magic-wormhole servers by default; point them at your own with `--rendezvous`\n\n/`--relay`\n\nor the `ENTANGLE_RENDEZVOUS`\n\n/`ENTANGLE_RELAY`\n\nenvironment variables. `ENTANGLE_NO_UPDATE_CHECK=1`\n\nsilences the [release check](#updating).\n\n## FAQ\n\n**Will this delete anything on my old machine?** No. `export`\n\nonly reads.\n\n**Do I need Claude Code on the new machine first?** Yes. Install it and sign in once so your account is set up, then import.\n\n**My new username or OS is different.** That is handled. Preview with `--dry-run`\n\nand adjust with `--map`\n\nif a guess is off.\n\n**I only want a few projects.** Use `--project <path-or-folder>`\n\n(repeatable), or tick just those in the GUI.\n\n**Where does Claude Code keep all this?** Under `~/.claude/`\n\nand `~/.claude.json`\n\n(`%USERPROFILE%`\n\non Windows). Set `CLAUDE_CONFIG_DIR`\n\nto relocate it; entangle respects that variable.\n\n**Some sessions are missing from the list.** Sessions recorded inside a temporary directory are hidden, since they are throwaway (some tools run Claude Code from a scratch folder and leave hundreds behind). Set `ENTANGLE_INCLUDE_TEMP=1`\n\nto show them.\n\n**Do other coding agents work?** Yes, and you do not have to say so. [OpenAI Codex CLI](https://github.com/openai/codex) and [opencode](https://github.com/anomalyco/opencode) sessions are listed alongside your Claude Code ones by default, and share and send the same way:\n\n```\nentangle sessions                   # every tool on this machine\nentangle send <id>                  # the tool is worked out from the id\nentangle sessions --tool codex      # narrow it when you want only one\n```\n\nIn the cockpit (`entangle`\n\non its own) the list starts with every tool merged together; press `t`\n\nto step through one tool at a time and back to all.\n\nThe receiving side needs no flag either: which tool a session came from travels with it, so `receive`\n\nand `import`\n\nput it back where it belongs. They do need that tool installed. Two things are not covered yet - opening a session from one tool inside a different one (a Codex session goes to Codex), and whole-machine `export`\n\n/`verify`\n\n, which read the Claude Code layout only. Move a Codex or opencode session with `share`\n\n/`send`\n\ninstead; both say so when they leave something out.\n\nQuantum teleportation needs two things that are useless apart: a link between two places, and a few words sent the ordinary way. Same here.\n\nIssues and pull requests are welcome. [CONTRIBUTING.md](/gowtham-sai-yadav/entangle/blob/main/CONTRIBUTING.md) covers setup, what CI checks, where each package lives, and the promises the code has to keep. The architecture and the reasoning behind it are in [DESIGN.md](/gowtham-sai-yadav/entangle/blob/main/DESIGN.md).\n\nLooking for something to pick up? [ help wanted](https://github.com/gowtham-sai-yadav/entangle/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) is unclaimed work, and\n\n[is where to start if you are new here.](https://github.com/gowtham-sai-yadav/entangle/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\n\n`good first issue`\n\n```\ngo build -o /tmp/entangle .   # the main package is the repo root\ngo test ./...\n```\n\nCI runs on Linux, macOS, and Windows. Tagging `vX.Y.Z`\n\nbuilds and publishes the release automatically.\n\n[MIT](/gowtham-sai-yadav/entangle/blob/main/LICENSE) © Gowtham Sai Yadav\n\nAn independent, unofficial community project. Not affiliated with, endorsed by, or sponsored by Anthropic. \"Claude\" and \"Claude Code\" are trademarks of Anthropic, PBC, used here only to describe what this tool works with.", "url": "https://wpnews.pro/news/show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words", "canonical_source": "https://github.com/gowtham-sai-yadav/entangle", "published_at": "2026-08-04 13:12:22+00:00", "updated_at": "2026-08-04 13:22:39.115276+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["Entangle", "Gowtham Sai Yadav", "Claude Code", "Codex", "opencode", "Homebrew", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words", "markdown": "https://wpnews.pro/news/show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words.md", "text": "https://wpnews.pro/news/show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words.txt", "jsonld": "https://wpnews.pro/news/show-hn-entangle-hand-a-live-ai-coding-session-to-anyone-with-three-words.jsonld"}}