Fast Rust CLI for running Claude Code and Codex in YOLO mode
Project description
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.
| Platform | Build | Lint | Unit Test | Integration Test |
|---|---|---|---|---|
| Linux x86 | ||||
| Linux ARM | ||||
| Windows x86 | ||||
| Windows ARM | ||||
| macOS x86 | ||||
| macOS ARM |
Installation
pip install clud
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 --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 -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 |
--detach |
Start a daemon-managed session directly in the background |
--detachable |
Run attached under the daemon; Ctrl+C prompts whether to background or end |
--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.
Codex Support
The Rust version of clud supports Codex directly. Use --codex to switch
backends for interactive runs, prompt-driven execution, resume flows, and
detachable sessions.
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=1is exported in the same shell. On Linux, installalsa-utilssoarecordis available, then verify a default input device exists (arecord -lon 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 withcurl -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_MSfloor (150 ms) silently drops sub-150 ms blips; speak for at least half a second.
clud loop — The Ralph Loop
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
Task input modes
The positional argument is classified in this order:
- GH issue / PR URL — the issue body is fetched via
ghand cached to<git-root>/.clud/loop/<owner>__<repo>__issue-<n>.md. Subsequent runs reuse the cache; pass--refreshto force a re-fetch. - Short form
#42— resolvesowner/repoviagh repo view. - Local file path — read as the prompt.
- 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
BSD 3-Clause License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clud-2.0.10.tar.gz.
File metadata
- Download URL: clud-2.0.10.tar.gz
- Upload date:
- Size: 305.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c3d6f0b62f7ed4d9cbf4b26791a7af13a34648dc710a472c85fae51851f2329
|
|
| MD5 |
556df36b423347b093625055920ed65a
|
|
| BLAKE2b-256 |
08dcde6e7e59be7e1d489b9105981960280d8a69b928681b9c27d1c8979118fa
|
Provenance
The following attestation bundles were made for clud-2.0.10.tar.gz:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10.tar.gz -
Subject digest:
4c3d6f0b62f7ed4d9cbf4b26791a7af13a34648dc710a472c85fae51851f2329 - Sigstore transparency entry: 1615847461
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-win_arm64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-win_arm64.whl
- Upload date:
- Size: 4.4 MB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05cfa81972a581f2479c41c37a71427d5ec9ca812d0add2e2a321ced8140dcea
|
|
| MD5 |
0df429721d39965ebfd48a5a877306ef
|
|
| BLAKE2b-256 |
094595b9ffe410f86aeafbf98f41078b2bf891f845dc9cead21905d8321bf123
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-win_arm64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-win_arm64.whl -
Subject digest:
05cfa81972a581f2479c41c37a71427d5ec9ca812d0add2e2a321ced8140dcea - Sigstore transparency entry: 1615847502
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-win_amd64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-win_amd64.whl
- Upload date:
- Size: 5.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8f7ed69fbbff9863b6b300acb963b156948b21795fdcf631cfae3a6336a0666
|
|
| MD5 |
25022827a460d3fcdcb87e5528db2827
|
|
| BLAKE2b-256 |
c8110e718c6a24ad213746ca12dd89988d58a57af0bcb7de7a06c5636c337979
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-win_amd64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-win_amd64.whl -
Subject digest:
d8f7ed69fbbff9863b6b300acb963b156948b21795fdcf631cfae3a6336a0666 - Sigstore transparency entry: 1615847469
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c14f7eeed1e980ba27eced01331fce6b78d3b1000844bb26633daf26e72cfb5
|
|
| MD5 |
254aa9d77156b282bcc5a51ec5ea9128
|
|
| BLAKE2b-256 |
9c603bdaff2e44199bd5b20f5fe29a62c32e84f973bd8926941de4dd305ac2c7
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
9c14f7eeed1e980ba27eced01331fce6b78d3b1000844bb26633daf26e72cfb5 - Sigstore transparency entry: 1615847466
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 4.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1198b4291923dd6cb00d66fa4c339461942ee16964fd93e54417982b1ea28410
|
|
| MD5 |
72361f28eb9a22c4217c25f662b0df89
|
|
| BLAKE2b-256 |
27d6847455e8aad63715a8ad6e3201eee12eab4d2a414fcda47551dfa7e54ef7
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
1198b4291923dd6cb00d66fa4c339461942ee16964fd93e54417982b1ea28410 - Sigstore transparency entry: 1615847464
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.7 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e40b7f9aa8725068322597e80a0e2cd29a03da97e4c1f36dc7db6b5032d3c766
|
|
| MD5 |
571e5b4be1e8acac55cf85325cc12581
|
|
| BLAKE2b-256 |
672eae78dd61aa9f31f4c15bb21fd15edbfc6fd9ffe1e3591e25967cf4d577a5
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-macosx_11_0_arm64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-macosx_11_0_arm64.whl -
Subject digest:
e40b7f9aa8725068322597e80a0e2cd29a03da97e4c1f36dc7db6b5032d3c766 - Sigstore transparency entry: 1615847570
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clud-2.0.10-py3-none-macosx_10_15_x86_64.whl.
File metadata
- Download URL: clud-2.0.10-py3-none-macosx_10_15_x86_64.whl
- Upload date:
- Size: 5.0 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1256acef968588257563ab8176d8eb914a1b22f44ccb39e1a1ce5d388c468747
|
|
| MD5 |
d511481c4b60a1ea5158041412d14566
|
|
| BLAKE2b-256 |
9589636fe954b92338b3483b485409f2f9133a70567041d9c060beda0a140b62
|
Provenance
The following attestation bundles were made for clud-2.0.10-py3-none-macosx_10_15_x86_64.whl:
Publisher:
auto-release.yml on zackees/clud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clud-2.0.10-py3-none-macosx_10_15_x86_64.whl -
Subject digest:
1256acef968588257563ab8176d8eb914a1b22f44ccb39e1a1ce5d388c468747 - Sigstore transparency entry: 1615847479
- Sigstore integration time:
-
Permalink:
zackees/clud@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Branch / Tag:
refs/tags/2.0.10 - Owner: https://github.com/zackees
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@9838f40b14d4253a43b05d52f77d0e6640edad65 -
Trigger Event:
push
-
Statement type: