Public uvx CLI for running a small recursive Ralph council against OpenRouter, appending the winning decision to a hash-chained decisions.log, and optionally uploading that log to Hugging Face.
By default, uploads target:
- dataset repo:
PeetPedro/ultrawhale-dogfood - dataset path:
ralph/decisions.log
You can keep those defaults or override them during first-run setup.
Each run:
- snapshots the workspace
- optionally reads
workspace.txt - optionally reads a local
dyad-mapping/checkout frompeterlodri-sec/dyad-mapping - asks a small council of Ralphs for the next decision
- appends the winning decision to
decisions.log - optionally uploads
decisions.logto Hugging Face
- Python 3.11+
uvforuvx- an OpenRouter API key
- optional: a Hugging Face token if you want uploads
Run the setup flow:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local setupThe setup prints the exact config path it writes to.
Typical locations:
- macOS:
~/Library/Application Support/ultra-ralph-local/config.json - Linux:
~/.config/ultra-ralph-local/config.json - Windows: platformdirs user config directory for
ultra-ralph-local
It asks for:
OPENROUTER_API_KEY(required)HF_TOKEN(optional)- Hugging Face dataset repo, default
PeetPedro/ultrawhale-dogfood - dataset path, default
ralph/decisions.log - whether uploads should be enabled by default
Then run one iteration in the current directory:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-localOr point it at another workspace:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local \
--workspace /path/to/workspaceRun continuously every 33 minutes:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local loopCustom interval:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local loop --interval 900CTRL-C requests a graceful stop: the current run finishes, then the loop exits.
Loop output is also appended to ralph-loop.log inside the workspace.
Highest to lowest:
- CLI flags
- environment variables
- saved config file
- built-in defaults
Supported environment variables:
OPENROUTER_API_KEYHF_TOKENRALPH_DIRorULTRA_RALPH_WORKSPACERALPH_HF_REPORALPH_HF_PATHRALPH_UPLOAD
Uploads are non-fatal.
If Hugging Face auth is missing or upload fails:
- the local run still succeeds
decisions.logis still updated- the CLI prints a warning
Disable uploads for one run:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local --no-uploadOverride the default destination:
uvx --from git+https://github.com/8b-is/ultra-ralph-local ultra-ralph-local \
--hf-repo your-name/your-dataset \
--hf-path ralph/decisions.logThe current workspace is the prompt context.
Optional files/directories:
workspace.txt: extra plain-text contextdyad-mapping/: additional context from a local checkout ofpeterlodri-sec/dyad-mapping, usingREADME.md,essences.md, and the latestsession-*-summary.md
If those files are absent, the tool still runs.
Clone the repo, then run:
uv run ultra-ralph-local setup
uv run ultra-ralph-local
uv run ultra-ralph-local loopRun tests:
uv run --with pytest pytestsrc/ultra_ralph_local/cli.py: main CLIstart_ralph_loop.sh: thin local wrapper arounduv rundyad-mapping/: optional context files mirrored frompeterlodri-sec/dyad-mapping
- no API keys are committed
- config is written to a user config file, not the repo
- uploads use the Hugging Face API, not an external
hfCLI dependency decisions.logandralph-loop.logare local runtime artifacts and are ignored
The constellation — a sovereign mesh of art, music, books, math, and machine intelligence.
Eleven surfaces, one commons. Self-hosted, self-owned, rendered in the open.
Footer links mirrored from vaked.dev:
MIT. See LICENSE.