ClewdR is a Rust proxy for Claude — both Claude.ai and Claude Code — serving native Claude and OpenAI-compatible endpoints from a single binary.
It runs as one static executable on Linux, macOS, Windows and Android, with a Docker image available, and typically uses <10 MB RAM, starts in <1 s, and weighs ~15 MB.
- Download the latest release for your platform from GitHub. Assets are named
clewdr-<os>-<arch>.zip, where<os>is one oflinux,musllinux,macos,windowsorandroid, and<arch>isx86_64oraarch64.curl -L -O https://github.com/Xerxes-2/clewdr/releases/latest/download/clewdr-linux-x86_64.zip unzip clewdr-linux-x86_64.zip chmod +x clewdr
- Run the binary:
./clewdr
- Open
http://127.0.0.1:8484and enter the admin password printed to the console.
docker run -d --name clewdr \
-p 8484:8484 \
-v clewdr-data:/etc/clewdr \
ghcr.io/xerxes-2/clewdr:latestImages are published for linux/amd64 and linux/arm64. Use :latest, or pin a release with :v0.13.1.
Mount something at /etc/clewdr, or the generated passwords are lost on every recreate. The config lives there as clewdr.toml, with logs under log/.
Read the passwords from the container:
docker logs clewdr | grep PasswordOr set them yourself, which is easier to automate. Any config key can be set as an environment variable by upper-casing it and prefixing CLEWDR_; the value is read as the type that key holds, so CLEWDR_PASSWORD=12345 is the string 12345. Booleans accept true/false, yes/no, on/off and 1/0 in any case.
docker run -d --name clewdr \
-p 8484:8484 \
-v clewdr-data:/etc/clewdr \
-e CLEWDR_PASSWORD=your-api-password \
-e CLEWDR_ADMIN_PASSWORD=your-admin-password \
ghcr.io/xerxes-2/clewdr:latestThe image already sets CLEWDR_IP=0.0.0.0 so the port is reachable, and disables the update checks, since an image cannot replace its own binary.
ClewdR needs at least one Claude.ai cookie before it can serve requests.
- Export your Claude.ai cookies (e.g. via browser devtools).
- Paste them into
Claude→Submit Cookie, one cookie per line, and submit. Claude→Cookie Statusthen shows each cookie's state and remaining quota.
The Config tab covers everything else: the API and admin passwords, an outbound proxy, retry limits, and rules for skipping cookies. Server settings such as IP and port need a restart to take effect; the rest apply on save.
If you forget the password, delete clewdr.toml and start the binary again. Docker users can mount a persistent folder for that file.
All paths below are relative to http://127.0.0.1:8484.
| Claude.ai | Claude Code | |
|---|---|---|
| Native Claude | /v1/messages |
/code/v1/messages |
| OpenAI-compatible | /v1/chat/completions |
/code/v1/chat/completions |
| Model list | /v1/models |
/code/v1/models |
| Token counting | — | /code/v1/messages/count_tokens |
Streaming works on every endpoint. The API password is printed to the console on startup, separately from the admin password.
SillyTavern:
{
"api_url": "http://127.0.0.1:8484/v1/chat/completions",
"api_key": "password-from-console",
"model": "claude-sonnet-4-6"
}The model-list endpoint above returns the ids ClewdR currently accepts, including a -thinking variant of each.
Any other OpenAI-compatible client — Continue, Cursor and the rest — works the same way: point its API base at http://127.0.0.1:8484/v1/ and use the API password as the key.
The frontend compiles to WebAssembly into static/, which the server then serves. That directory is gitignored, so it has to be built first, or cargo run starts a server with no UI. cargo xtask handles the ordering:
cargo xtask check # report on the required toolchain pieces
cargo xtask build # release build of the frontend and the server
cargo xtask dev # both, with frontend hot reload, on :3000
cargo xtask lint # clippy over every valid feature combination
cargo xtask fmt # format (always via nightly)
cargo xtask ci # everything CI runsBuilding the frontend needs rustup target add wasm32-unknown-unknown and cargo binstall trunk. Running cargo xtask itself needs nothing.
Two gotchas if you bypass xtask. Formatting must go through nightly, because .rustfmt.toml uses nightly-only options that stable silently ignores.
--all-features also fails: embed-resource/external-resource and portable/xdg are mutually exclusive pairs enforced in build.rs.