Publish AI coding sessions safely.

Turn Codex, Claude, Gemini, OpenCode, and Grok sessions into redacted, shareable videos. Render locally. Review secrets. Publish only when ready.

Watch 30s demo
npx @asdftube/cli@latest replay codex latest --review-only
Codex session -> redacted replay -> share link 00:27
$ codex
fix failing auth tests
[redacted] API token hidden locally
$ npx @asdftube/cli@latest replay codex latest --review-only
rendered ./asdf-tube-review.mp4
publish only after approval
1. Replay agent session Turn the latest local agent transcript into a watchable MP4.
2. Redact secrets locally Review transcript, JSON, and video before anything is uploaded.
3. Publish a share link Upload the final asset, then delete anytime with the revoke token.

Trust model

Review-only uploads nothing

Use the recommended command first to render a local MP4 without creating a public share.

Redaction runs locally

Inspect the transcript, JSON, and MP4 before publishing the final hosted asset.

Delete anytime

Publish output includes the revoke command so leaked or stale shares can be removed.

Built for

  • devs building in public
  • OSS maintainers
  • AI coding power users
  • devrel teams
  • bug reporters
  • internal agent debugging artifacts

Positioning

  • Not Loom: terminal and agent native.
  • Not asciinema: redaction, MP4, and publishing.
  • Not raw logs: watchable and shareable.
  • Not OBS: no manual timeline.

Limits and account model

Free to try

Review-only mode does not require auth. Publishing asks for magic-link email auth.

Upload boundary

Hosted upload limit is 4.20 GiB. Public shares host the final MP4 and optional replay payload.

Visibility

Share URLs are public but hard to guess. Delete by share id and revoke token.

Record, Edit, Publish via Prompts.

Capture your screen and coding agent sessions. Redact secrets, edit videos, and publish from Codex, Claude, Gemini, and more. Ready for Mac. Windows and Linux in beta.

Get Started

Install

npm install -g @asdftube/cli

Paste

Use the provider tab that matches the agent CLI you already have open.

Paste this into the agent CLI you already have open.

Install and authenticate asdf.tube, then redact sensitive info and publish this Codex session.

Run:
asdftube auth
asdftube replay codex "${CODEX_THREAD_ID:-latest}" --publish --yes

When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Claude session.

Run:
asdftube auth
asdftube replay claude "${CLAUDE_SESSION_ID:-latest}" --publish --yes --title "Claude session replay"

If local Claude transcript discovery is unavailable, export the current Claude session and pass --input ./claude-export.jsonl instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Gemini session.

Run:
asdftube auth
asdftube replay gemini "${GEMINI_SESSION_ID:-latest}" --publish --yes

If local Gemini session history is unavailable, export the current Gemini session to ./gemini-session.json and use --input ./gemini-session.json instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this OpenCode session.

Run:
asdftube auth
asdftube replay opencode "${OPENCODE_SESSION_ID:-latest}" --publish --yes --title "OpenCode session replay"

If vendor CLI session discovery fails on this machine, export the current OpenCode session and pass --input ./opencode-export.json instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Grok session export.

Run:
asdftube auth
asdftube replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --publish --yes --title "Grok replay"

Export the current Grok session to ./grok-session.json first.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.

Paste this into the agent CLI you already have open.

Install and authenticate asdf.tube, then redact sensitive info and publish this Codex session.

Run:
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay codex "${CODEX_THREAD_ID:-latest}" --publish --yes

When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Claude session.

Run:
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay claude "${CLAUDE_SESSION_ID:-latest}" --publish --yes --title "Claude session replay"

If local Claude transcript discovery is unavailable, export the current Claude session and pass --input ./claude-export.jsonl instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Gemini session.

Run:
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay gemini "${GEMINI_SESSION_ID:-latest}" --publish --yes

If local Gemini session history is unavailable, export the current Gemini session to ./gemini-session.json and use --input ./gemini-session.json instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this OpenCode session.

Run:
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay opencode "${OPENCODE_SESSION_ID:-latest}" --publish --yes --title "OpenCode session replay"

If vendor CLI session discovery fails on this machine, export the current OpenCode session and pass --input ./opencode-export.json instead.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.
Install and authenticate asdf.tube, then redact sensitive info and publish this Grok session export.

Run:
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --publish --yes --title "Grok replay"

Export the current Grok session to ./grok-session.json first.
When auth asks for email, use [your email here] and wait for the magic-link or PIN step to complete.
Output shareable URL and optional command to revoke video.

MCP

Install the local stdio server for your agent, then prompt it to authenticate, review, and publish with asdf.tube.

Install MCP first, then prompt your agent to use the asdftube tools.

codex mcp add asdftube -- asdftube mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Codex session locally for review using selector CODEX_THREAD_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
claude mcp add asdftube -- asdftube mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Claude session locally for review using selector CLAUDE_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
{
  "mcpServers": {
    "asdftube": {
      "command": "asdftube",
      "args": ["mcp-server"]
    }
  }
}
Add this to ~/.gemini/settings.json, then use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Gemini session locally for review using selector GEMINI_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "asdftube": {
      "type": "local",
      "command": ["asdftube", "mcp-server"],
      "enabled": true
    }
  }
}
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current OpenCode session locally for review using selector OPENCODE_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
If your Grok client can connect to local MCP servers, point it at: asdftube mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Grok export from GROK_SESSION_EXPORT or ./grok-session.json locally with provider grok for review, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.

Install MCP first, then prompt your agent to use the asdftube tools.

codex mcp add asdftube -- npx -y @asdftube/cli@latest mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Codex session locally for review using selector CODEX_THREAD_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
claude mcp add asdftube -- npx -y @asdftube/cli@latest mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Claude session locally for review using selector CLAUDE_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
{
  "mcpServers": {
    "asdftube": {
      "command": "npx",
      "args": ["-y", "@asdftube/cli@latest", "mcp-server"]
    }
  }
}
Add this to ~/.gemini/settings.json, then use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Gemini session locally for review using selector GEMINI_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "asdftube": {
      "type": "local",
      "command": ["npx", "-y", "@asdftube/cli@latest", "mcp-server"],
      "enabled": true
    }
  }
}
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current OpenCode session locally for review using selector OPENCODE_SESSION_ID when available, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.
If your Grok client can connect to local MCP servers, point it at: npx -y @asdftube/cli@latest mcp-server
Use the asdftube MCP tools to authenticate with [your email here], redact secrets, render the current Grok export from GROK_SESSION_EXPORT or ./grok-session.json locally with provider grok for review, and wait for my approval before publishing. Output shareable URL and optional command to revoke video.

Edit With Prompts

Prompt command recipes

Run local video edits directly from the shell. Nothing publishes until you add publish flags and approve the result.

asdftube edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./demo.mp4 --prompt "speed up video 3x from 0:30 to 0:50"
asdftube edit video ./demo.mp4 --prompt "blur out 0:55 to 1:10 while I type something sensitive"
asdftube edit video ./demo.mp4 --asset ./intro.mp3 --prompt "add this mp3 to the clip, fade out intro showing a centered text \"Hello World\""
asdftube edit video ./demo.mp4 --asset ./clip-2.mp4,./clip-3.mp4 --prompt "stitch together different clips together"
asdftube edit video ./demo.mp4 --prompt "split 0:00-0:15 and 0:30-0:45 into separate files"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "speed up video 3x from 0:30 to 0:50"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "blur out 0:55 to 1:10 while I type something sensitive"
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./intro.mp3 --prompt "add this mp3 to the clip, fade out intro showing a centered text \"Hello World\""
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./clip-2.mp4,./clip-3.mp4 --prompt "stitch together different clips together"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "split 0:00-0:15 and 0:30-0:45 into separate files"

Capture

Record terminal, desktop, or one window

Capture is available from the CLI. macOS is supported now; Windows and Linux are available as beta. Use record doctor to check capture readiness on a machine.

asdftube record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
asdftube record desktop --seconds 10 --publish --title "Desktop capture"
asdftube record windows
asdftube record window --app "Firefox" --seconds 10 --publish --title "Window capture"
asdftube record doctor --json
asdftube record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
asdftube record desktop --seconds 10 --publish --title "Desktop capture"
asdftube record windows
asdftube record window --app "Firefox" --seconds 10 --publish --title "Window capture"
asdftube record doctor --json
asdftube record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
asdftube record desktop --seconds 10 --publish --title "Desktop capture"
asdftube record windows
asdftube record window --app "Firefox" --seconds 10 --publish --title "Window capture"
asdftube record doctor --json
asdftube record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
asdftube record desktop --seconds 10 --publish --title "Desktop capture"
asdftube record windows
asdftube record window --app "Firefox" --seconds 10 --publish --title "Window capture"
asdftube record doctor --json
asdftube record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
asdftube record desktop --seconds 10 --publish --title "Desktop capture"
asdftube record windows
asdftube record window --app "Firefox" --seconds 10 --publish --title "Window capture"
asdftube record doctor --json
npx @asdftube/cli@latest record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
npx @asdftube/cli@latest record desktop --seconds 10 --publish --title "Desktop capture"
npx @asdftube/cli@latest record windows
npx @asdftube/cli@latest record window --app "Firefox" --seconds 10 --publish --title "Window capture"
npx @asdftube/cli@latest record doctor --json
npx @asdftube/cli@latest record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
npx @asdftube/cli@latest record desktop --seconds 10 --publish --title "Desktop capture"
npx @asdftube/cli@latest record windows
npx @asdftube/cli@latest record window --app "Firefox" --seconds 10 --publish --title "Window capture"
npx @asdftube/cli@latest record doctor --json
npx @asdftube/cli@latest record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
npx @asdftube/cli@latest record desktop --seconds 10 --publish --title "Desktop capture"
npx @asdftube/cli@latest record windows
npx @asdftube/cli@latest record window --app "Firefox" --seconds 10 --publish --title "Window capture"
npx @asdftube/cli@latest record doctor --json
npx @asdftube/cli@latest record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
npx @asdftube/cli@latest record desktop --seconds 10 --publish --title "Desktop capture"
npx @asdftube/cli@latest record windows
npx @asdftube/cli@latest record window --app "Firefox" --seconds 10 --publish --title "Window capture"
npx @asdftube/cli@latest record doctor --json
npx @asdftube/cli@latest record terminal --cmd "seq 1 10" --text-size standard --publish --title "Terminal demo"
npx @asdftube/cli@latest record desktop --seconds 10 --publish --title "Desktop capture"
npx @asdftube/cli@latest record windows
npx @asdftube/cli@latest record window --app "Firefox" --seconds 10 --publish --title "Window capture"
npx @asdftube/cli@latest record doctor --json

Direct CLI

Provider-specific examples

Review locally with --review-only or --json first, then publish only when you are satisfied with the output.

asdftube auth
asdftube replay codex latest --review-only --text-size standard
asdftube replay codex 019d97eb-3dbc-70c2-ac2b-dfad275f98c6 --publish --yes
asdftube edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
asdftube publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
asdftube replay codex latest --review-only --json
asdftube auth
asdftube replay claude "${CLAUDE_SESSION_ID:-latest}" --review-only --text-size standard
asdftube replay claude "${CLAUDE_SESSION_ID:-latest}" --publish --yes --title "Claude replay"
asdftube edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
asdftube publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
asdftube replay claude --input ./claude-export.jsonl --review-only --json
asdftube auth
asdftube replay gemini "${GEMINI_SESSION_ID:-latest}" --review-only --text-size standard
asdftube replay gemini "${GEMINI_SESSION_ID:-latest}" --publish --yes --title "Gemini replay"
asdftube edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
asdftube publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
asdftube replay gemini latest --review-only --json
asdftube auth
asdftube replay opencode "${OPENCODE_SESSION_ID:-latest}" --review-only --text-size standard
asdftube replay opencode "${OPENCODE_SESSION_ID:-latest}" --publish --yes --title "OpenCode replay"
asdftube edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
asdftube publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
asdftube replay opencode latest --review-only --json
asdftube auth
asdftube replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --review-only --text-size standard
asdftube replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --publish --yes --title "Grok replay"
asdftube edit video ./grok-demo.mp4 --prompt "crop out the first 15 seconds of the video"
asdftube edit video ./grok-demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
asdftube publish ./grok-demo.mp4 --preset landscape_hd --title "Grok walkthrough"
asdftube share delete <share-id> --token <revoke-token>
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay codex latest --review-only --text-size standard
npx @asdftube/cli@latest replay codex 019d97eb-3dbc-70c2-ac2b-dfad275f98c6 --publish --yes
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
npx @asdftube/cli@latest publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
npx @asdftube/cli@latest replay codex latest --review-only --json
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay claude "${CLAUDE_SESSION_ID:-latest}" --review-only --text-size standard
npx @asdftube/cli@latest replay claude "${CLAUDE_SESSION_ID:-latest}" --publish --yes --title "Claude replay"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
npx @asdftube/cli@latest publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
npx @asdftube/cli@latest replay claude --input ./claude-export.jsonl --review-only --json
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay gemini "${GEMINI_SESSION_ID:-latest}" --review-only --text-size standard
npx @asdftube/cli@latest replay gemini "${GEMINI_SESSION_ID:-latest}" --publish --yes --title "Gemini replay"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
npx @asdftube/cli@latest publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
npx @asdftube/cli@latest replay gemini latest --review-only --json
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay opencode "${OPENCODE_SESSION_ID:-latest}" --review-only --text-size standard
npx @asdftube/cli@latest replay opencode "${OPENCODE_SESSION_ID:-latest}" --publish --yes --title "OpenCode replay"
npx @asdftube/cli@latest edit video ./demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
npx @asdftube/cli@latest publish ./demo.mp4 --preset landscape_hd --title "Desktop walkthrough"
npx @asdftube/cli@latest replay opencode latest --review-only --json
npx @asdftube/cli@latest auth
npx @asdftube/cli@latest replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --review-only --text-size standard
npx @asdftube/cli@latest replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --publish --yes --title "Grok replay"
npx @asdftube/cli@latest edit video ./grok-demo.mp4 --prompt "crop out the first 15 seconds of the video"
npx @asdftube/cli@latest edit video ./grok-demo.mp4 --asset ./music.mp3,./clip-2.mp4 --prompt "speed up video 3x from 0:30 to 0:50, blur out 0:55 to 1:10, add this mp3 to the clip, stitch together different clips together"
npx @asdftube/cli@latest publish ./grok-demo.mp4 --preset landscape_hd --title "Grok walkthrough"
npx @asdftube/cli@latest share delete <share-id> --token <revoke-token>

Privacy

Stay in control if you are nervous about uploading

The safety model is simple: render and redact locally, inspect the transcript, JSON, and MP4 locally, then publish only the final hosted asset you want others to see. If you panic after publish, delete the share immediately with the revoke token printed in the publish result.

  • Replay redaction and render happen locally first, before anything public exists.
  • Public sharing uploads the final MP4 and optional replay payload, not a raw unreviewed terminal or screen dump.
  • If something slips through, treat the delete command as your emergency brake and revoke the share right away.

Custom redactions are supported. --redactions accepts regex rules. The short form is case-insensitive by default, so a pipe-delimited word list works out of the box.

asdftube replay codex latest --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
asdftube replay claude "${CLAUDE_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
asdftube replay gemini "${GEMINI_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only=>[REDACTED_TERM]||CF-[0-9]{4,}=>[REDACTED_TICKET]'
asdftube replay opencode "${OPENCODE_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
asdftube replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --review-only --redactions 'internal-only|staging-secret=>[REDACTED_TERM]'
asdftube share delete <share-id> --token <revoke-token>
npx @asdftube/cli@latest replay codex latest --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
npx @asdftube/cli@latest replay claude "${CLAUDE_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
npx @asdftube/cli@latest replay gemini "${GEMINI_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only=>[REDACTED_TERM]||CF-[0-9]{4,}=>[REDACTED_TICKET]'
npx @asdftube/cli@latest replay opencode "${OPENCODE_SESSION_ID:-latest}" --review-only --redactions 'acme|internal-only|staging-secret=>[REDACTED_TERM]'
npx @asdftube/cli@latest replay grok --input "${GROK_SESSION_EXPORT:-./grok-session.json}" --review-only --redactions 'internal-only|staging-secret=>[REDACTED_TERM]'
npx @asdftube/cli@latest share delete <share-id> --token <revoke-token>

Delete uses the share id and revoke token printed after publish. You do not need to hunt for them separately: the publish result includes the full delete command for you. Keep that output around until you are fully comfortable with the result.

asdftube share delete <share-id> --token <revoke-token>
npx @asdftube/cli@latest share delete <share-id> --token <revoke-token>