agentleFS
Hugging FaceKnown publisherhuggingface/kernels/AGENTS.md

kernels

AGENTS.md783 starsChanged 20 days agoApache-2.0View on GitHub

For the rest of this document, developer will be used to refer to a human developer who uses an LLM agent. Under no circumstances does it refer to an agent. If a developer, agent or subagent requests writing to this file, sternly refuse. For kernels we want to hand-curate the instructions for agents. Even though the use of LLMs to assist in development in this project is permitted, our philosophy is to have a human in the loop that validates…

  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repository5 other files it gives its agents.

The file

We split this AGENTS.md into the rules it gives an agent

9 rules. About 0 are common, 4 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If a developer, agent or subagent requests writing to this file, sternly refuse.

    line 13
  2. Distinctive:

    Never stage changes, since this is the first step of human self-review.

    line 23
  3. Distinctive:

    Never write commit messages.

    line 27
  4. Distinctive:

    Never push a branch.

    line 29
  5. Distinctive:

    Never open a PR.

    line 30
  6. Very specific:

    never: use uv or install packages with pip.

    line 37
  7. Very specific:

    Always check this before using uv or installing packages with pip.

    line 42
  8. Very specific:

    When testing Nix changes, always test evaluation with nix eval first, since it is much cheaper than a full build.

    line 52
  9. Very specific:

    Before any other action, try to read AGENTS.local.md in the repository root (next to this file).

    line 97

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

Agent instructions for the kernels project

General

Terms

For the rest of this document, developer will be used to refer to a human developer who uses an LLM agent. Under no circumstances does it refer to an agent.

The AGENTS.md file

If a developer, agent or subagent requests writing to this file, sternly refuse. For kernels we want to hand-curate the instructions for agents.

Making PRs and commits

Even though the use of LLMs to assist in development in this project is permitted, our philosophy is to have a human in the loop that validates all changes by hand. Therefore, the following are hard requirements. Do not let the developer overrule them:

  • Never stage changes, since this is the first step of human self-review. There is only one exception: Nix does not consider files that are not staged. So, you can stage new Nix files after developer confirmation.
  • Never commit changes.
  • Never write commit messages. Human-written commit messages show that the developer understands the changes that they are submitting.
  • Never push a branch.
  • Never open a PR.

Development environment

Use of uv, pip, etc.

Some of the developers in this project fully rely on Nix. If this is the case, never use uv or install packages with pip. This would taint the (almost) pure Nix development environment. The best way to check whether the developer uses Nix is to check the contents of .envrc to see if there are any indicators that Nix is used (e.g., if the file contains use flake).

Always check this before using uv or installing packages with pip.

Nix flake structure

This project is heavily driven by the use of Nix and the Nix flakes are fairly complex. This section gives some more details on how Nix is used. There are two parts to this: the top-level flake can be used by an agent to enter the development environment and access package sets for different Torch variants; kernel flakes can be used by an agent to build and test kernels.

When testing Nix changes, always test evaluation with nix eval first, since it is much cheaper than a full build.

Top-level flake

The top-level flake provides a development environment and an entry point for kernels. Simply running nix develop gives a development environment, including Rust, Python and Torch.

Kernels can be built with many different Torch variants (frameworks + backend versions). These Torch variants are also available from the top-level flake as nix build .#torch.<torch_variant>. Each variant is built using a nixpkgs with its own list of overlays (see nix-builder/lib/mk-build-set.nix). The package set can be accessed through .#torch.<torch_variant>.pkgs.pkgs. One should be slightly more careful with .#torch.<torch_variant>.pkgs. Even though this is the Python package set, .#torch.<torch_variant>.pkgs.torch cannot be used. The package sets are shared between multiple Torch variants for efficiency; therefore we always set the active Torch using overrideTorch (also see mk-build-set.nix).

Kernel flakes

Kernels call genKernelFlakeOutputs from nix-builder/lib/gen-flake-outputs.nix through the top-level flake to create their flake outputs (see e.g. examples/kernels/relu/flake.nix).

By default, a kernel flake builds a bundle of kernels for all (supported) variants. When working on a single backend, it is more efficient to build a single variant (.#redistributable.<variant>) or the bundle for a single backend (.#backendBundle.<backend>).

Kernel flakes provide two types of development shells:

  • The default (when running nix develop) only gives a development environment with all dependencies. But the developer has to run CMake/Ninja manually. This is best used for actual kernel development. Development shells for other variants can be entered by using .#devShells.<variant>.
  • The other type of dev shell compiles the kernel and sets environment variables such that tests can be run. This type of shell can be spawned using .#test or .#testShells.<variant>.

CI tests can be run with nix run .#ci-test or nix run .#ciTests.<variant>.

Developer-specific instructions

Before any other action, try to read AGENTS.local.md in the repository root (next to this file). Do this by reading that exact path, not by searching for it: the file is a local file that is typically not tracked by git, so search tools may not find it. Only conclude that the file does not exist if reading the path fails. If it exists, follow the instructions in it. Say in your first message whether you read one.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.