Ramazan Yavuz

Public projects, independent of any business work.

This is my personal hub for open-source projects I publish on github.com/ra-yavuz. Anything here is something I built, found useful, and decided to share. It is not connected to client work or commercial offerings.

For consulting, the broader portfolio, and articles, see ramazan-yavuz.tr.

Stylized illustration of Ramazan Yavuz at a laptop

Projects

claude-can-speak

General CLI

Let Claude Code decide what to say out loud. Most "speak Claude aloud" tools read every reply at you. This one leads with a speak skill that lets Claude voice only what is worth hearing: a "build is done", a heads-up while you look away, a shoutout. A speak-everything firehose with its own on/off switch (off by default) is included too, but the deliberate skill is the point. Local neural TTS (Kokoro for natural English, Piper for German, Turkish, and more) runs in Docker, so nothing goes to the cloud and there are no API keys. Install with npm install -g claude-can-speak.

claude-can-speak logo

edgecall

General CLI

Route a plain-language request to one of your own functions, using a deliberately weak local model. A small self-hosted, OpenAI-compatible API: you POST a sentence, and a tiny model (phi3-class, the kind that runs on a Raspberry Pi or a phone) reads a short paginated menu of your registered functions, picks one, and edgecall runs it. The model never sees the whole list at once: it pages through a few options at a time with a "next" choice, so picking one item off a short menu is all a weak model has to do. No embedding model, no index. Add a function by dropping in a Python file with an id and a one-line description. Talks to any OpenAI-compatible /v1 endpoint (llama.cpp, ollama, LM Studio, hydra-llm).

edgecall logo

doublethink

General CLI

ntfy you can actually trust: a pub/sub broker as easy to stand up as ntfy, but with real authentication and genuinely private channels. ntfy is effortless because its topic name is the only gate, which is also why its topics are effectively public. doublethink keeps the minutes-to-set-up ergonomics and adds what ntfy omits: genuinely private channels. Creating one is self-service (one request, no operator) and returns a high-entropy shared secret. That secret is the gate: whoever holds it can join the channel, no one else can, and the broker never sees it, so it cannot read your messages, which are end-to-end encrypted between the parties who share the secret. Knowing a channel name grants no access. Bidirectional, asynchronous, streaming. Opt-in plaintext public topics too. Cross-platform: run it in Docker or as a single native binary.

doublethink logo

agent-doublethink

General CLI

Keep two coding agents on two machines working the same project in sync, over a channel the broker cannot read. A small, agent-agnostic MCP server: point Claude Code, Codex, or Gemini at it, and a partner agent on another machine at the same channel, and the two exchange plans, decisions, blockers, and divergence flags as they work. Traffic is end-to-end encrypted over doublethink, so the broker only ever sees ciphertext. Roles are discovered automatically (the agent that creates the channel is A, the one that joins is B). A one-line digest of your partner's state is surfaced at the start of each turn, only when something changed, so you catch drift early instead of at merge time. Hand the install prompt's URL to your agent and it sets itself up: downloads the single static binary, registers the MCP server, and connects.

agent-doublethink logo

portunus-ovpn

Linux

Native KDE Plasma 6 panel widget for switching OpenVPN connections. Import, edit, remove and toggle .ovpn profiles from your panel. One VPN active at a time by default; flip a setting for multi-active (intended for split-tunnel combos). Per-connection remember-passphrase backed by NetworkManager secret flags and KWallet. No second VPN daemon, no third-party PPA: just nmcli + NetworkManager + KWallet, already on every KDE box. Named after Portunus, the Roman god of keys and gates.

portunus-ovpn logo

vigil

General

How to build an always-on, autonomous AI operations assistant, and how to keep it diligent. A documentation project. It describes, in enough depth to recreate from scratch, the architecture of a persistent AI operator (per-invocation agent subprocess with a resumable session, supervisor, transport split, channel multiplexers, MCP tools), and documents the load-bearing piece most write-ups skip: the doctrine + hooks pattern that re-asserts an engineering standard on every turn so an auto-approved agent keeps verifying before it acts, refuses workarounds, and never claims done without a real run. Ships a generic doctrine.md, both Claude Code hook scripts, and a settings.json fragment.

vigil logo

hydra-llm

General CLI Linux RAG

Docker for language models, with retrieval baked in. One CLI to download, run, chat with, and search local LLMs. Each model runs in its own container, so docker ps shows what is actually running. Hardware-aware curated GGUF catalog with anonymous Hugging Face downloads (no token required). OpenAI-compatible endpoints on stable local ports. Retrieval-augmented generation is a first-class feature: hydra-llm index ., hydra-llm query "...", hydra-llm chat <model> --rag .. Bake a model, a persona, and a corpus into one alias via hydra-llm create, then chat with it by name. Ships a KDE Plasma 6 panel widget. Pairs with lillycoder for a fully local coding agent. No cloud, no API key, no telemetry.

hydra-llm logo

hydracoder

General Web CLI Linux

Local-AI development orchestrator with a web UI. Enter a project goal and watch local models plan it, build it, and review it, with no hosted AI in the loop. A planner turns the goal into a task graph, a scheduler routes each task to a right-sized local model, a reviewer checks each result, and an append-only journal makes a crash or a full context window recoverable. A dark UI shows each model as a live terminal, and a chat box lets you steer the run in plain language. Built on hydra-llm (model substrate) and lillycoder (agent loop), so it runs entirely on your own hardware. Made to keep development moving when hosted AI becomes too expensive to use.

hydracoder logo

lillycoder

General CLI Linux

A small chat REPL that drops into any folder. The local LLM on the other end can read, write, and edit your files, run shell commands, and install packages, all gated by per-tool permission prompts and a hard-deny safety classifier. Talks to any OpenAI-compatible /v1 endpoint (llama.cpp, ollama, LM Studio, hydra-llm). No cloud, no telemetry.

lillycoder logo

hydra-rag-hooks

General CLI Linux RAG

apt install. Type rag <q> in Claude Code OR Codex CLI. Done. UserPromptSubmit hooks for both Anthropic's Claude Code and OpenAI's Codex CLI from one apt-installable package. Keyword-triggered local RAG: type rag <q> in either CLI; the hook auto-indexes the project on first use (LanceDB + fastembed, runs fork-detached so your turn is not blocked), then prepends retrieved chunks to the prompt before the model sees it. Both CLIs share the same .hydra-index/ store, the same toggles, and the same bundled MCP server (rag_search, rag_status, rag_list_stores) for model-decided retrieval. apt install wires Claude Code via /etc/claude-code/managed-settings.json; one codex plugin add per user enables Codex. Successor to claude-rag-hook v0.6.x; existing .claude-rag-index/ folders are auto-renamed in place on first run, no re-indexing. Pairs with hydra-llm for shared embedder and store.

hydra-rag-hooks logo

inhibit-charge

Linux CLI

Park your Linux laptop battery at a target charge level using the kernel's inhibit-charge mode. Unlike threshold-only tools (TLP, GNOME, KDE), the battery does not trickle-cycle on AC. No slow drift, no repeated mini-cycles.

inhibit-charge logo

herald

Linux CLI

A small Linux daemon and CLI that prints a daily quote at the top of every new terminal and at login. Cached quote refreshed on a configurable timer (default every 3 hours), local fallback pool, optional user prefix.

herald logo

meowtrics

Linux CLI General

A small animated emoji that lives in your system tray and gossips about your machine. Cat-shaped by default, sweats when the CPU is hot, naps when you're idle. KDE Plasma 6 plasmoid, GNOME / XFCE / Cinnamon / Budgie / MATE / LXQt via StatusNotifierItem, Sway / i3 / polybar via JSON output.

meowtrics logo

Apt repository

Every Debian / Ubuntu tool on this page in one place, kept up to date with the rest of your system. All Debian and Ubuntu packages from these projects (where applicable) are published to a single signed apt archive at ra-yavuz.github.io/apt. Add it to your sources once and every tool installs and upgrades with the normal apt install / apt upgrade commands you already use. New releases land in the repo automatically, GPG-signed, no separate download steps.

One line setup + install

Sets up the signed repo if not already added, refreshes the package index, and installs the package. Idempotent, safe to re-run. Replace <package> with any of inhibit-charge, herald, meowtrics, lillycoder, hydra-llm, claude-rag-hook, portunus-ovpn, edgecall:

sudo bash -c 'set -e; install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://ra-yavuz.github.io/apt/pubkey.gpg -o /etc/apt/keyrings/ra-yavuz.gpg && echo "deb [signed-by=/etc/apt/keyrings/ra-yavuz.gpg] https://ra-yavuz.github.io/apt stable main" > /etc/apt/sources.list.d/ra-yavuz.list && apt update && apt install -y <package>'

Once the repo is set up, future installs and upgrades are just sudo apt update && sudo apt install <package> and sudo apt upgrade. The sudo apt update step is required: without it apt will not see new packages or new versions.

Tested on Ubuntu (Linux only). The packages should work on any recent Debian / Ubuntu derivative and on WSL2 Ubuntu (it is a Linux distro), with the caveat that projects depending on hardware sysfs (inhibit-charge) or a Linux desktop tray (meowtrics) cannot work inside WSL2 in any meaningful way. macOS support is per-project: hydra-llm runs under Docker Desktop and lillycoder installs from source via pip; the rest are Linux-only by design. Each project page has its own Platform support section.

Why use the apt repository: automatic updates, signed provenance, no manual .deb downloads, plays nicely with the rest of your system. Recommended for any installation you intend to keep.

Alternative, install directly from GitHub: every release attaches a prebuilt .deb to the source repository's GitHub Releases page. Useful for one-off installs, testing a specific version, or environments where adding a third-party apt source is not allowed.

About

Disclaimer

Every project listed here is provided as is, without warranty of any kind. Some projects interact with low-level system interfaces and may affect your hardware. The author is not liable for any damage to hardware, data, or system caused by installing or running these projects. Read each project's README and project page before installing.