🔌

delta

🔌Plugin🧩 Mod

Records your Claude Code sessions to Delta, together with the Git code they work on, and gives each session its own link. Teammates can open that link and join the session from their own Claude Code, the delta.dev site or the Delta app.

zed-industries/delta-claude39Added Nov 12, 2026

Installation

$/plugin marketplace add zed-industries/delta-claude
$/plugin install delta@zed-industries

Run these in Claude Code. In a session that is already open, run /reload-plugins after installing.

Permissions to check

  • Tool calls
  • Your prompts
  • Network
  • Writes files
  • Runs programs
  • Model calls

Also: Interface · /commands · Own data · Environment · Settings · Session info

Raw check output (Claude Code 2.1.322)

hooks: session.attach, prompt.submit, turn.start, turn.complete, ui.render{component=AbovePrompt}, ui.render{component=AskUserQuestion}, ui.render{component=UserMessage}, ui.render{component=CommandOutput}, session.end, config.set{key=theme}, session.start, command.run{command=rename}, command.run{command=delta}, command.run{command=delta-share}, command.run{command=delta-unshare}, command.run{command=delta-join}, command.run{command=delta-setup}, command.run{command=delta-update}, command.run{command=delta-plugin-update}, command.run{command=delta-org}, session.append{door=prompt|command|response|tool-result|delivery}, session.append{door=tool-message, origin has {kind=tool, tool=/"^(?!Skill$)"/}}, session.send, tool.call

calls: $.agent.list (via hostOf), $.agent.spawn (via hostOf), $.clock.after, $.clock.every (via hostOf), $.clock.now (via hostOf), $.clock.sleep (via hostOf), $.command.list (via hostOf), $.command.register (via hostOf), $.command.run (via hostOf), $.config.list (via hostOf), $.env.get (via hostOf), $.env.set (via hostOf), $.fs.exists (via hostOf), $.fs.list (via hostOf), $.fs.read (via hostOf), $.fs.stat (via hostOf), $.fs.write (via hostOf), $.http.fetch (via hostOf), $.model.complete (via hostOf), $.process.run (via hostOf), $.process.spawn (via hostOf), $.prompt.submit (via hostOf), $.session.append (via hostOf), $.session.cwd (via hostOf), $.session.id, $.session.messages (via hostOf), $.session.root (via hostOf), $.session.surfaces (via hostOf), $.session.turns (via hostOf), $.session.version, $.settings.read (via hostOf), $.store.delete (via hostOf), $.store.get (via hostOf), $.store.keys (via hostOf), $.store.set (via hostOf), $.tool.call (via hostOf), $.turn.abo… [+142 chars]

env reads: CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, CLAUDE_CODE_ENTRYPOINT, CLAUDE_CODE_REMOTE, CLAUDE_CONFIG_DIR, DELTA_ACP_SESSION, HOME, OS, USERPROFILE

env writes: CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD

mod

Delta for Claude Code

Delta gives every agent thread a URL. With this plugin, your Claude Code sessions are recorded to Delta along with the Git checkout they work in. Anyone on your team can then open the thread and join it, from their own Claude Code session, from delta.dev, or from the Delta app.

Installation

You need Claude Code 2.1.303 or newer. Older versions show a warning but are not blocked. Inside Claude Code, add the marketplace:

/plugin marketplace add zed-industries/delta-claude

Then install the plugin:

/plugin install delta@zed-industries

The plugin uses the delta CLI. If it isn't installed on macOS, Linux, or Windows, the plugin installs it the first time you set up syncing, share, or join, and Delta offers to open your browser to sign in. You don't need to open the Delta app first. When Delta is missing on Windows, setup first asks you in Claude whether to install it. Only choosing Install Delta downloads and runs the official stable installer for your native architecture. Choosing Not now leaves it uninstalled; retry setup, share, or join when ready, or install from delta.dev. It uses the installer's default scope; approve a Windows permission prompt if one appears. If Windows requires a restart, restart before retrying setup. The plugin finds the installed CLI through the registry, without requiring a PATH refresh. Background discovery never installs Delta.

At startup the plugin checks an existing Delta installation for updates in the background, with a ten-second budget. It notifies you when an update is available; it never installs updates or opens a browser as part of this check. A failed check does not stop syncing or sharing.

Run /delta-update (or /delta update) to update the installed Delta app and CLI. A running Delta app, including the one serving synced and shared sessions, restarts to install the update; those sessions briefly disconnect and reconnect on their own, and an app that had a window reopens. On Windows, the installer runs after the Delta CLI exits, and the command waits up to ten more minutes for it; approve the Windows prompt if one appears. If Windows reports that a restart is required, restart Windows before using Delta. If the installer outlasts the wait, it keeps running; let it finish, then run delta update --check before retrying. Download and installation progress appears in the transcript while the command runs. This does not update the Claude plugin itself. The startup notice offers this command only when the CLI can install the update. Otherwise, follow the CLI's platform-specific instructions: for example, run the Windows installer, or update a package-managed installation through its package manager. Older CLIs that lack the update command point to delta.dev.

Plugin updates

At startup and hourly, the plugin checks GitHub for a newer release of itself, even when the marketplace's auto-update is off. When there is one, the status band offers Update, Later (24 hours) and Mute; nothing installs without your action. In a terminal, updating reloads plugins right away (/reload-plugins --force, which reloads every enabled plugin). Desktop may apply the update when the session is idle; otherwise start a new Code session.

  • /delta-plugin-update updates the plugin; /delta-plugin-update check only checks.
  • /delta-plugin-update notifications off (or on) turns the background checks and notices off.

Both also work as /delta plugin-update …, and the /delta menu offers them under More actions. One check an hour is shared by every session.

Installs follow the marketplace branch they were added from (main, or develop with #develop); local copies, other sources and other refs are left alone. Checks need a standalone claude CLI (2.1.303 or newer) on PATH, and don't run in headless sessions or when CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC is set.

If your installed plugin predates the updater, refresh the marketplace and update once from your shell. For a project or local installation, run it from that project with --scope project or --scope local. Then run /reload-plugins, or start a new Desktop Code session.

claude plugin marketplace update zed-industries && claude plugin update delta@zed-industries --scope user

Usage

Setup

Run /delta-setup in a repository to choose its team and which sessions sync:

  • Private sync: every new session syncs, and only you can see it until you share it.
  • Team sharing: every new session syncs and is shared with your team.
  • Manual: a session syncs only when you run /delta-share.

Setup can create a team and invite teammates by email. It saves your choice to .delta/settings.json and keeps that file out of Git, since the choice is yours.

The plugin offers setup once per repository: right after you install it, or the first time you start a session in a repository that isn't set up yet.

If automatic sync needs you to sign in, an interactive session asks before opening your browser. If Delta's beta terms still need accepting, it offers to open them too. You can keep working while you finish; that same session then syncs, including messages recorded while it waited. To stop waiting, run /delta-share again. Headless sessions never open a browser.

Sharing

/delta-share asks who should see the session: your team, just you, or people you name by email address. /delta-share ada@example.com invites them directly. /delta-unshare makes the current thread private without stopping sync. People invited explicitly retain access.

Commands

Each command also works as /delta <command>, such as /delta share. /delta on its own opens a menu of these actions.

CommandDescription
/delta-share [<email>…]Sync the current session and its checkout, and choose who sees it
/delta-unshareMake the current thread private while keeping sync and explicit invitations
/delta-join <link>Join a shared thread in a fresh session, in the thread's checkout
/delta-setupChoose this repository's team and which sessions sync
/delta-updateUpdate the installed Delta app and CLI
/delta-plugin-update [check | notifications on|off]Update the Claude Code plugin and reload, check its version, or control update notifications
/delta-org listList your Delta teams
/delta-org currentShow the selected team
/delta-org switch <ID>Select a different team
/delta-org invite <email>…Invite people to the selected team
/delta-org manageOpen the selected team's members page on the dashboard

Sharing and joining need an interactive Claude Code terminal or Desktop Code tab.

Privacy

Delta stores what a recorded session contains: your conversation, including tool inputs and outputs and Claude's thinking, plus the files in your checkout (staged, unstaged, and untracked files that aren't ignored). Nothing is uploaded until you share or join a session, or the repository's setting syncs it automatically.

After a recorded turn, the plugin asks Claude Code's haiku model to summarize the turn and maintain a short search summary. It sends bounded turn prose and the previous description through your Claude Code session's credentials, not Delta's inference configuration. This uses your Claude plan, API, or configured provider and may be unavailable if Haiku is blocked or rate-limited. A summary that cannot finish before Claude Code exits is omitted; recording still works. The generated title is separate from your visible thread title and never replaces a manual rename.

A shared or joined session shows you as connected through Claude Code. An open Delta view takes precedence.

The plugin sends product telemetry to Delta: which integration ran each command, the plugin version, and when turns start and finish and how they ended. Telemetry events contain no messages, file paths, tool inputs, or error text.

Live activity telemetry also identifies the external source and the command-line transport into Delta. It does not identify the person's interface. Several updates can belong to one tool call, so event rows are not counts of tool calls or edit operations. Historical imports do not produce these activity events.

Development

Validate the plugin and run its tests:

claude plugin validate .
claude plugin validate .claude-plugin/plugin.json
claude plugin test .
npx --yes --package typescript@7.0.2 tsc -p . --verbatimModuleSyntax
python3 scripts/check-cli-setup.py

On macOS, Linux, or WSL, exercise the real plugin install, update and same-session reload against a disposable local marketplace, without changing your installed plugins. Add --notifications to also check the startup notice against GitHub's public release manifest:

python3 scripts/check-plugin-update.py

Run the shell setup check on macOS, Linux, or WSL. On Windows, also exercise the PowerShell installation orchestration with mocked downloads and installer processes:

powershell.exe -NoLogo -NoProfile -NonInteractive -File scripts/check-windows-setup.ps1

The type check reads the declarations Claude Code writes into .claude-plugin/types/ whenever it loads this folder, as claude --plugin-dir . below does.

To try your changes, start Claude Code with the plugin loaded from this checkout:

claude --plugin-dir .

License

Copyright (C) 2026 Zed Industries.

Licensed under the GNU Affero General Public License, version 3 only (AGPL-3.0-only). See LICENSE.