Skip to main content

clud

hero-clud

A fast Rust CLI for Claude Code and Codex that runs in YOLO mode by default — no permission prompts, maximum velocity.

The name clud is simply a shorter, easier-to-type version of claude.

Covenant For Humanity

The token is not debris, not novelty, not signal without consequence. It is ore awaiting intention, and intention is the furnace by which the digital alchemist sifts value from noise. When the artifact is true, it does not merely answer; it extends what a person may become. The lesser practitioner seeks output, but the digital alchemist seeks transformation. The measure is not volume, but whether the work carries consciousness across a threshold.

Read the full Affirmations Of Covenants guiding this software intention.

Platform Build Lint Unit Test Integration Test
Linux x86 Build Lint Unit Test Integration Test
Linux ARM Build Lint Unit Test Integration Test
Windows x86 Build Lint Unit Test Integration Test
Windows ARM Build Lint Unit Test Integration Test
macOS x86 Build Lint Unit Test Integration Test
macOS ARM Build Lint Unit Test Integration Test

Installation

macOS / Linux

curl -fsSL https://raw.githubusercontent.com/zackees/clud/main/install.sh | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/zackees/clud/main/install.ps1 | iex

Both scripts install uv if needed, then uv tool install clud, and put clud on PATH for new shells. Pin a version with CLUD_VERSION=2.0.14 curl ... | sh (POSIX) or $env:CLUD_VERSION = '2.0.14'; irm ... | iex (PowerShell). Re-run to upgrade.

Already have a Python package manager? Any of these works equivalently:

uv tool install clud   # recommended — isolated, fast
pipx install clud      # equivalent if you already use pipx
pip install clud       # plain pip; you must ensure the install bin dir is on PATH

Usage

clud                              # Launch Claude in YOLO mode via subprocess
clud --codex                      # Use Codex as the backend
clud --claude                     # Use Claude as the backend (default)
clud --pty                        # Force PTY launch mode
clud --subprocess                 # Force subprocess launch mode
clud --pty --graphics=sixel       # Force a Sixel header above PTY output
clud --demo-gfx-sixel             # Render the README hero image as a Sixel demo
clud --detach -p "review this PR" # Start a daemon-managed session without attaching
clud --detachable -p "fix CI"     # Ctrl+C asks whether to keep the session in background
clud --transcript session.log -p "debug this" # Tee daemon session output to a file
clud -c                           # Continue the most recent conversation
clud --resume                     # Resume a session
clud --resume abc123              # Resume a specific session by ID or search term
clud -p "refactor the auth layer" # Run with a prompt, exit when done
clud -m "what does this do?"      # Send a one-off message
clud --model opus -p "review PR"  # Choose a model
clud --safe -p "drop the table"   # Disable YOLO mode (keeps permission prompts)
clud --dry-run -p "hello"         # Print what would run without executing
echo "explain this error" | clud  # Pipe mode: read prompt from stdin
clud -- --verbose --debug         # Pass extra flags through to the backend
clud attach                       # List background sessions you can reattach to
clud attach sess-123              # Attach to a specific session
clud list                         # Show background session IDs, PIDs, and cwd
clud wasm guest.wasm              # Run a local wasm module with clud's embedded runtime

Flags

Flag Description
-p, --prompt Run with a prompt, exit when complete
-m, --message Send a one-off message
-c, --continue Continue the most recent conversation
-r, --resume [TERM] Resume by session ID or search term
--claude Use Claude as the backend
--codex Use Codex as the backend
--subprocess Force subprocess launch mode
--pty Force PTY launch mode
--graphics <auto|off|sixel> Control PTY graphics headers. auto only enables Sixel from a live terminal probe
--graphics-image <PATH> Render a custom image as the PTY graphics header when Sixel is enabled
--demo-gfx-sixel Render the README hero image as a standalone Sixel demo and exit
--detach Start a daemon-managed session directly in the background
--detachable Run attached under the daemon; Ctrl+C prompts whether to background or end
--transcript <PATH> Tee daemon-managed session output bytes to a transcript file
--model <NAME> Set model preference (e.g., haiku, sonnet, opus)
--safe Disable YOLO mode (don't inject --dangerously-skip-permissions)
--dry-run Print what would be executed, then exit
-v, --verbose Show debug output
-h, --help Show help
-V, --version Show version

Unknown flags are forwarded directly to the backend agent.

clud now defaults to subprocess launch mode for Claude and Codex. Use --pty to opt back into PTY while Claude PTY issues are being investigated.

PTY Graphics Headers

PTY sessions can reserve a small header area above the backend terminal and draw a Sixel image there. --graphics=auto is conservative: it only enables the header when running-process reports Sixel as supported from a live probe of the current terminal. Missing metadata, non-TTY attaches, blocked terminals, and host-name-only hints stay text-only. Use --graphics=off to disable the feature or --graphics=sixel to force it.

By default clud renders the bundled README hero image. Pass --graphics-image <PATH> to use a PNG or JPEG instead. Direct PTY launches reserve rows before the backend starts. Daemon-managed sessions decide at attach time, because the detached worker does not know which terminal will attach later; reattach and resize paths redraw the header where the terminal reports support.

Codex Support

codex-supported

The Rust version of clud supports Codex directly. Use --codex to switch backends for interactive runs, prompt-driven execution, resume flows, and detachable sessions.

Codex Hook Warnings

On clud --codex launches, clud runs a lightweight hook-health check before starting Codex. The check compares Claude Code and Codex PreToolUse hook coverage and inspects Codex hook trust state. These warnings are informational; normal launch continues unless the backend itself fails.

If Codex has PreToolUse hooks but Claude Code does not, clud prints:

[clud] warning: Codex PreToolUse hooks exist, but Claude PreToolUse hooks are missing or inactive. Run `clud --fix-hooks`.

Run clud --dry-run --fix-hooks to see the planned repair actions. Run clud --fix-hooks only when you want clud to add deterministic Codex trust entries or ask the selected backend to translate a missing hook between Claude Code and Codex.

Codex hook matchers may use * as a catch-all. When equivalent Claude Code hooks use the same command across several tool matchers, the Codex repair plan prefers one catch-all hook instead of repeated per-tool prompts. That reduces duplicate Codex hook review/trust approvals while keeping per-tool hooks when commands differ.

On Windows, Codex hook commands that call a .cmd or .bat wrapper need explicit exit-code propagation. If the command does not include $LASTEXITCODE, clud warns:

[clud] warning: Codex hook command in C:\Users\you\.codex\hooks.json uses a Windows batch wrapper without explicit `$LASTEXITCODE` propagation; a blocking hook may fail open.

Fix the hook by invoking a native executable directly, or by making the PowerShell hook command end with exit $LASTEXITCODE after the batch wrapper. Without that, a hook intended to block a tool call can return success to Codex after the wrapper fails.

Detached Sessions

Use daemon-managed sessions when you want to disconnect and reattach later.

clud --detachable --codex -p "refactor the parser"
# press Ctrl+C, then press y within 5 seconds to keep it running in background

clud attach
clud attach sess-123
clud list

If you press Ctrl+C in a --detachable session, clud asks continue session in the background? with a 5-second countdown. Press y to background it. Press Ctrl+C again, press anything else, or do nothing to end the session instead.

clud attach without a session ID lists background sessions. clud list shows the same sessions with their root PID and current working directory.

Voice Mode (F3 push-to-talk)

clud captures microphone input and transcribes it directly into the active backend prompt using local whisper.cpp. Hold F3, speak, release F3, and the transcript appears at your cursor without auto-submitting — you can edit it before pressing Enter. Available on all six supported platforms (Linux x86/ARM, Windows x86/ARM, macOS x86/ARM). On Linux, microphone capture uses arecord on demand so libasound is not required for normal startup.

Enabling it

The minimum is a single env var:

export CLUD_VOICE=1
clud
# Windows PowerShell
$env:CLUD_VOICE = "1"
clud

On first F3 press, clud auto-downloads the Whisper ggml-small.en.bin model (~466 MB) into a per-OS cache directory and verifies it against a pinned SHA-256. The download runs in the background as soon as voice mode starts up, so by the time you reach for F3 it's usually ready.

Platform Cache path
Linux ~/.cache/clud/whisper/ggml-small.en.bin
macOS ~/Library/Caches/clud/whisper/ggml-small.en.bin
Windows %LOCALAPPDATA%\clud\whisper\ggml-small.en.bin

If you already have a model on disk, point CLUD_WHISPER_MODEL at it and the auto-download is skipped.

How F3 behaves on different terminals

Terminal Behavior
Kitty-protocol terminals (kitty, Ghostty, modern iTerm2, WezTerm, Alacritty with kitty mode) True press-and-hold: recording stops the instant you release F3.
Everything else (Windows Terminal / ConPTY, older xterm, etc.) Press F3 to start; recording auto-stops after 1.5 seconds of silence (VAD) or 30 seconds maximum, whichever comes first.

Cues are short tones generated programmatically on macOS/Windows — ding on start (~880 Hz, 90 ms), dong on stop (~660 Hz, 120 ms). Linux uses a terminal bell so clud does not link audio output libraries at startup. If the default audio output device is unavailable, clud falls back to a terminal bell.

Environment variables

Variable Default Purpose
CLUD_VOICE unset Enable voice mode (1, true, yes, on). Setting CLUD_WHISPER_MODEL also implicitly enables it.
CLUD_WHISPER_MODEL auto-managed cache path Override the model location. Trusted as-is — no hash check on user paths.
CLUD_VOICE_LANGUAGE inferred (English with small.en) Force a Whisper language code, e.g. en, de, fr.
CLUD_VOICE_TEST_TRANSCRIPT unset Test-only bypass: replaces real transcription with this exact string. Used by the integration test suite.

Troubleshooting

  • Nothing happens when I press F3. Check that CLUD_VOICE=1 is exported in the same shell. On Linux, install alsa-utils so arecord is available, then verify a default input device exists (arecord -l on Linux, "Sound" preferences on macOS/Windows).
  • "voice mode is enabled but the Whisper model is not yet available" — the auto-download hasn't finished. Watch stderr for [clud] voice: download N% (...) lines, or pre-seed the cache path manually with curl -L -o <cache-path> https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en.bin.
  • Recording keeps stopping mid-sentence on non-kitty terminals. The VAD silence window is 1.5 s — pause less, or switch to a kitty-protocol terminal for true hold-to-record.
  • Transcript is empty / garbage. Whisper struggles on very short utterances and noisy backgrounds. The MIN_CAPTURE_MS floor (150 ms) silently drops sub-150 ms blips; speak for at least half a second.

clud loop — The Ralph Loop

clud-loop-ralph

Run the backend in a ralph loop: iterate on a task until the agent signals it's done, or until the iteration count runs out. Fully autonomous — no user interaction between iterations.

clud loop "Implement the API endpoints from the spec"
clud loop TASK.md                                  # Read prompt from a file
clud loop https://github.com/org/repo/issues/42    # Fetch & iterate on a GH issue
clud loop --loop-count 10 "fix bugs"               # Custom iteration count

/clud-loop for Codex

/clud-loop is the Codex-facing polyfill for Claude-style /loop. Codex does not document arbitrary top-level custom slash-command registration, so clud ships this as a bundled clud-loop skill and installs it into Codex skill locations. If your Codex surface does not show /clud-loop directly, invoke the skill through /skills or $clud-loop.

/clud-loop [interval] [prompt]
/clud-loop 30m check CI and fix new failures
/clud-loop check CI and fix new failures

The skill keeps the durable task and work journal in .clud/loop/LOOP.md. Without a cadence, it keeps the current Codex chat as the orchestrator: the main agent runs one bounded iteration at a time, optionally dispatches bounded worker subagents, records structured results, updates the ledger, and stops on explicit DONE/NO_WORK/BLOCKED/FAILED/RESOURCE_LIMIT/LOOP_DETECTED/USER_STOP conditions.

With a cadence, the skill prefers a Codex same-thread automation that wakes the current thread for one bounded iteration and then stops. The old external process runner remains available only when the user explicitly asks for legacy or daemon-backed automation.

The legacy interval form is:

clud --codex loop --repeat 30m --loop-count 1 --no-done .clud/loop/LOOP.md

The legacy one-shot external form is clud --codex loop .clud/loop/LOOP.md.

Task input modes

The positional argument is classified in this order:

  1. GH issue / PR URL — the issue body is fetched via gh and cached to <git-root>/.clud/loop/<owner>__<repo>__issue-<n>.md. Subsequent runs reuse the cache; pass --refresh to force a re-fetch.
  2. Short form #42 — resolves owner/repo via gh repo view.
  3. Local file path — read as the prompt.
  4. Literal string — used as-is.

Completion signal (DONE / BLOCKED marker files)

clud loop injects a short contract into the prompt asking the agent to write one of two marker files under <git-root>/.clud/loop/:

Marker Meaning Exit code
DONE Task resolved (one-line summary inside) 0
BLOCKED Agent can't proceed (reason inside) 3
(neither) Iteration count exhausted 2
non-zero backend exit Infra failure propagate

Stale DONE / BLOCKED files from a prior run are cleared at start so the loop can't short-circuit on iteration 1.

Opt out with --no-done-marker to restore the old "run N times unless the backend fails" behavior.

clud rebase — Auto-Rebase

Fetches from origin, rebases the current branch, and resolves conflicts.

clud rebase

clud fix — Auto-Fix

Detects linting and test tools in your repo, runs them, and fixes failures in a loop until everything passes.

clud fix

clud up — Ship It

Runs lint, test, cleanup, then commits.

clud up

clud wasm — Embedded Runtime

Loads a local .wasm module, wires up a host logging import, and invokes an exported function.

clud wasm hello.wasm
clud wasm hello.wasm --invoke _start

Development

bash build                  # Build dev wheel (Rust binary + Python package)
bash lint                   # Lint (cargo fmt + clippy + ruff + banned imports)
bash test                   # Unit tests (Rust + Python)
bash test --integration     # Include integration tests with mock agents

License

Clud Proprietary License. Free use is available for individuals and organizations under 6 people, with lifetime grandfathering for organizations that qualified before growing beyond that size. Larger organizations need a commercial license unless they have a grandfathered or contributor-granted free license. See LICENSE for the full terms.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clud-2.4.0.tar.gz (910.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

clud-2.4.0-py3-none-win_arm64.whl (6.6 MB view details)

Uploaded Python 3Windows ARM64

clud-2.4.0-py3-none-win_amd64.whl (9.2 MB view details)

Uploaded Python 3Windows x86-64

clud-2.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

clud-2.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (57.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

clud-2.4.0-py3-none-macosx_11_0_arm64.whl (8.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

clud-2.4.0-py3-none-macosx_10_15_x86_64.whl (8.4 MB view details)

Uploaded Python 3macOS 10.15+ x86-64

File details

Details for the file clud-2.4.0.tar.gz.

File metadata

  • Download URL: clud-2.4.0.tar.gz
  • Upload date:
  • Size: 910.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clud-2.4.0.tar.gz
Algorithm Hash digest
SHA256 96af78f6ca2aebf1d70940d95c3c98e0ad09b34f19ed519641e6b35086fe5d55
MD5 fabd7eabd531c4fd33bc79039deab18b
BLAKE2b-256 584397886dc0865cb3e91d892f49b332357c73ef7ad18f6ac5b4b602d3225493

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0.tar.gz:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-win_arm64.whl.

File metadata

  • Download URL: clud-2.4.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 6.6 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clud-2.4.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 d2b0d66977547bf7e83fe4fb30f3548392b6df22f6bc015bf8d4558f39505e03
MD5 22ccc0744bc9396aab66aa9df388c88b
BLAKE2b-256 d1db1ef57102d8027ed9c88ce7e33affb014cea4a4a0736beb76bdd1b6c4f9c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-win_arm64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: clud-2.4.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 9.2 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clud-2.4.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 128f43b390d5beb320d519623fad9091a2a11b95769d58bfdce5132efc54fbbd
MD5 7064afbca2a9a69f9b2517089b039607
BLAKE2b-256 8da2527825b8168bb42ea148ab9f2da96ff287fa8f4f443b1033164b9b216af8

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-win_amd64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clud-2.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 adc190cb05ce71c347e398fa75942d798a38fca551ff34da4a26e11843b0146e
MD5 0bd0f8774ad410c905ee3c872f7c68e3
BLAKE2b-256 f3abdc2d17cb5289ff021df036e2be4a20a5cd97b8663a6c1c464c501aa12525

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for clud-2.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1438c043eff996f10896bb7486766af1cbb598acdf7da0d79daa4a903e8ee5ec
MD5 fda43a74cdad6c147a8ea72af81b2d63
BLAKE2b-256 954c8a5cd21b71d28a9e5ff55fe32c355a17b0053ae131729ca6873e7b717d58

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: clud-2.4.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 8.0 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clud-2.4.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07b084fec02c846ea4c06d2be66794e689694fd998f07c52b98eea9fa3010a09
MD5 09c6d5e1f255fe3b521cdfdcad02826f
BLAKE2b-256 5128c332f235e46c4ea4f333e5ccd18e4668a7e30d8306305548c1752825b082

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-macosx_11_0_arm64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clud-2.4.0-py3-none-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: clud-2.4.0-py3-none-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 8.4 MB
  • Tags: Python 3, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clud-2.4.0-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 7412b6f1b6b44e7c237d39a44a2c9d547ede19f6d207492085d336241ae1fa0c
MD5 262c727df6deec57a4c7e082d11df36d
BLAKE2b-256 d959c157aa9b4f17e45263173346297d9f3480c82c63157141924bc8dfaab51b

See more details on using hashes here.

Provenance

The following attestation bundles were made for clud-2.4.0-py3-none-macosx_10_15_x86_64.whl:

Publisher: auto-release.yml on zackees/clud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page