Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

yadgar — the client

One binary. yaadgaar login obtains a credential, yaadgaar serve is the MCP server your agent spawns, and everything else manages the machine it runs on (D75, D76).

The command is yaadgaar, and the doubled vowels are not a typo. The Python client this replaces already owns yadgar on PATH, so the transitional client differs in both the PyPI project and the executable — the reasoning is written over BINARY_NAME in src/install/hooks.rs.

Decisions are recorded in yadgarhq/docs — D75 (the proxy that knows no tools), D76 (one binary, and a rules file that is referenced rather than spliced), D72 (the credential), D16 (why the gateway is the only thing that speaks MCP inward).

What it is

A proxy, and deliberately nothing more. tools/list is forwarded to the gateway and its answer returned verbatim; so is tools/call. There is no per-tool code in this repository at all — not a match arm, not a registry, not a feature flag.

That is the boundary rather than an economy. A list the client asserts is a list the client is trusted to filter honestly; forwarding makes the gateway's answer the only answer, and the gateway resolves identity before it replies. It is also what keeps releases uncoupled: this binary lives on people's laptops and the gateway does not, so a client that enumerated tools would make the tool set move at the speed of the slowest machine.

When the gateway is unreachable at spawn, the last tool list is served from cache and calls fail with a plain "gateway unreachable" — because an empty list is indistinguishable from yadgar not being installed, and the agent would silently lose memory and tasks with nothing to report.

Commands

Command What it does
yaadgaar login Asks for the gateway address and your credentials once and stores both together. It registers nothing — install owns every file the agent client reads.
yaadgaar serve The stdio MCP server the agent spawns. Not run by hand.
yaadgaar install Registers the hooks, the rules reference and the MCP entry, in the agent client's user-level config — once per machine, never per repository.
yaadgaar uninstall Removes what install added, and nothing else.
yaadgaar verify Reports drift in the installed environment. Scheduled, not remembered — the daemon cannot see ~/.claude/settings.json, so nothing server-side can ever notice.
yaadgaar hook <event> What settings.json invokes. A hook is a dispatch, not a program.

login then install is the whole setup, and verify is the one to schedule. project_id is derived from the working directory at call time (D53), so one registration serves every repository and a fresh checkout works immediately.

Installing

pip install --no-cache-dir yaadgaar
yaadgaar login
yaadgaar install

To upgrade, the same line with --upgrade:

pip install --no-cache-dir --upgrade yaadgaar

--no-cache-dir is not optional while the only releases are prereleases, and it is the whole of the problem. pip caches the simple-index page it fetched for a project. A machine that has resolved yaadgaar once keeps serving itself that page and cannot see anything published since — so an upgrade reports success against a version that is already stale, rather than failing.

Measured on a fresh Debian VM with 0.1.0a2 already on PyPI. The VM's own curl of the simple index showed all six a2 wheels at the same moment pip insisted only a1 existed:

Command What it did
pipx upgrade yaadgaar "already at latest version 0.1.0a1"
pipx install --force --pip-args=--pre yaadgaar installed a1 again
pipx install --force yaadgaar==0.1.0a2 "Could not find a version that satisfies the requirement"
pip install --no-cache-dir yaadgaar==0.1.0a2 worked, first try

Every row is the same cache. The third one is worth reading twice: an EXACT version that PyPI was serving at that moment came back as no such version, which is what a stale index page looks like from the inside.

No --pre and no version pin are needed, and this is measured rather than reasoned — a bare pip download --no-deps --no-cache-dir yaadgaar against a fresh index fetches 0.1.0a2, and pip install --no-cache-dir --upgrade --dry-run yaadgaar resolves to Would install yaadgaar-0.1.0a2. PEP 440 falls back to prereleases when a requirement matches nothing else, so pinning would only fix this README to a version that goes stale on the next release. --pre widens a requirement and does not refetch anything, which is why it changed nothing on the VM.

One command does NOT take that fallback: pip index versions yaadgaar reports "No matching distribution found" while pip index versions --pre yaadgaar lists both. It is a diagnostic, not an install, and it is the one place --pre earns its keep here.

Once a stable release exists, all of this goes away and pipx install yaadgaar / pipx upgrade yaadgaar are the lines. Until then pipx's own upgrade path is the one measured failing above; the pipx equivalent, pipx install --force --pip-args="--no-cache-dir" yaadgaar, is untested — the pip lines are the ones that were actually run.

Rust, shipped to PyPI as wheels via maturin. The language follows the rest of the system; the channel follows the people already using it, and a pip-installable command is not a thing a rewrite gets to take away. A plain GitHub-release binary was rejected for exactly that reason.

The wheel carries the compiled binary and no Python at all — bindings = "bin" in pyproject.toml — so import yaadgaar is not a thing and is not meant to be.

A wheel is per-platform, so there are six: Linux, macOS and Windows, each on x86_64 and aarch64. Every one is built on a runner of its own architecture rather than cross-compiled, and release.yaml refuses to publish unless all six are present — shipping the four that built would leave two platforms silently installing an older version.

Development

cargo build
cargo test
pre-commit run --all-files

There is no Containerfile and no chart here: this repository is not a service, and what it ships is a wheel. CI is the shared workflow in yadgarhq/actions, which detects that and skips the image, chart and proto stages (D62).

To build a wheel locally:

maturin build --release   # → target/wheels/, for THIS machine only

The other five targets are built by .github/workflows/release.yaml, which is this repository's one piece of local CI. The reason it is not in yadgarhq/actions with everything else is written at the top of that file.

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

yaadgaar-0.1.0a3-py3-none-win_arm64.whl (3.2 MB view details)

Uploaded Python 3Windows ARM64

yaadgaar-0.1.0a3-py3-none-win_amd64.whl (3.2 MB view details)

Uploaded Python 3Windows x86-64

yaadgaar-0.1.0a3-py3-none-manylinux_2_28_aarch64.whl (3.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

yaadgaar-0.1.0a3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

yaadgaar-0.1.0a3-py3-none-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

yaadgaar-0.1.0a3-py3-none-macosx_10_12_x86_64.whl (3.5 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file yaadgaar-0.1.0a3-py3-none-win_arm64.whl.

File metadata

  • Download URL: yaadgaar-0.1.0a3-py3-none-win_arm64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 e151878a65684af608a4518449834b0f34aecd4a52d5583133c84fe668e54624
MD5 4d327e5770a3f797e21a457e39a63a7a
BLAKE2b-256 72bb0d18772729be488874e15fe0c8dff408804f5703abbccb3da1cf8a6e54f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-win_arm64.whl:

Publisher: release.yaml on yadgarhq/yadgar

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

File details

Details for the file yaadgaar-0.1.0a3-py3-none-win_amd64.whl.

File metadata

  • Download URL: yaadgaar-0.1.0a3-py3-none-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c5bfeaf66e03cf541cf7b1c86571643e78c22d51c17a5bfd259a1dc05b571c83
MD5 3d32af8f54d88cc79ea285a8647aac62
BLAKE2b-256 67495a602ce257f715a0d5850bedfd55e651c387b55d0e65cde8f818d213c027

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-win_amd64.whl:

Publisher: release.yaml on yadgarhq/yadgar

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

File details

Details for the file yaadgaar-0.1.0a3-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e43e0b27b4ee944e2ca105a15d0d3258353782359b70052e0283a89387be52ec
MD5 d45680f0ad94346065d936d6632f7595
BLAKE2b-256 7cf84bf65ac3bc2e6f2eb2ca409d390e9d99ee86483f8ddbbd97740f50822136

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release.yaml on yadgarhq/yadgar

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

File details

Details for the file yaadgaar-0.1.0a3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9858d2bcf17698438c4d3cd2912b0cd31169f5f9777896c0d2dbed73cd7bf61e
MD5 75f2a3d092fb6ae815f29da0052bce82
BLAKE2b-256 1f4f14ca39ad0aedc48fe3d9a2cbf3f27024ecdfc9b862441ac79ee5ca2ed14a

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on yadgarhq/yadgar

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

File details

Details for the file yaadgaar-0.1.0a3-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8fb48ac3b693e0d3c49b3c6dd48063a6fa02cdf76e13b0b394e9ca7105def4c
MD5 993b8c8896d9b66b90af54d5b19ec132
BLAKE2b-256 a07241e11964b70a24245a91a3a9b4ff1ad7a7f1bde4637aadcfa1b864a9898f

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yaml on yadgarhq/yadgar

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

File details

Details for the file yaadgaar-0.1.0a3-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for yaadgaar-0.1.0a3-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 329812e91e353d8be3e90121cb9abf50598a29c5c019ec2223aa8510a82fe919
MD5 5a73d0ebe6c171e2e78404e9e010e97d
BLAKE2b-256 b42cec9727b765f7c513e704ee9991e41fb7730e8cfaf15ae330d2523d56ea07

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaadgaar-0.1.0a3-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yaml on yadgarhq/yadgar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page