normalize CLAUDE.md

Repository guidance for Normalize, a Rust software project published as a group of packages with a command-line interface.

In plain words
What is it for?
It helps maintain the API and command-line tool, publish packages, follow the project’s architecture and interface conventions, and update installation-related files.
Why use it?
It sets rules for designing the underlying data service first, keeping the command-line interface consistent with that service and the project’s documented decisions.

Instructions file

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add instructions/rhi-zone/normalize/claude-md
Clone the repo
git clone --depth 1 https://github.com/rhi-zone/normalize
Per session 7,124 This file is loaded in full into every session.
When invoked 7,124 The same file — it is already loaded in full.
Security scan C 2 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.07124 $0.07124
Opus 5 $0.03562 $0.03562
Sonnet 5 $0.01425 $0.01425
Haiku 4.5 $0.00712 $0.00712

Measured 2d ago against content hash 4fed3d65acb1, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade C, and why

normalize CLAUDE.md scanned grade C with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Downloads and executes remote codehighSupply chain

curl | sh runs whatever the server returns today, which is not necessarily what it returned when this was reviewed.

**installer URL:** `curl -fsSL https://rhi.zone/normalize/install.sh | sh` — the canonical copy lives at `https://github.com/rhi-zone/rhi.zone/blob/master/normalize/install.sh`; the in-repo `install.sh` is just a synced

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

**installer URL:** `curl -fsSL https://rhi.zone/normalize/install.sh | sh` — the canonical copy lives at `https://github.com/rhi-zone/rhi.zone/blob/master/normalize/install.sh`; the in-repo `install.sh` is just a synced
CLAUDE.md · 183 lines

How it starts

The opening of the file, as written. The whole thing — 183 lines — stays where its author put it; the contents beside it link to each section on GitHub.

CLAUDE.md

behavioral rules for me in this repo.

stuff to go read when it's relevant: docs/philosophy.md (design tenets), docs/architecture-decisions.md (technical choices), docs/cli-design.md (CLI surface + principles), docs/audit-2026-03-12.md (architecture audit w/ action items).

publishing

it's published on crates.io as 49 crates (+4 publish = false ones: normalize-grammars, normalize-semantic-facts, xtask, benches). all at v0.3.2 rn (early, still actively being built).

installer URL: curl -fsSL https://rhi.zone/normalize/install.sh | sh — the canonical copy lives at https://github.com/rhi-zone/rhi.zone/blob/master/normalize/install.sh; the in-repo install.sh is just a synced copy of it.

API-first

normalize IS an API that happens to have a CLI on top of it. the service layer returns typed data, the CLI just renders it. so when i'm designing a command i start with the data model — what shape does the result actually have? the CLI surface (subcommand name, flags, positional layout) follows from THAT. i never let how it looks in a terminal drive the data shape.

what that means in practice:

  • a command that returns a list of items returns Vec<T> (or a wrapper), no matter whether the input was a flag, a glob, or a subcommand name.
  • --json / --jq / --jsonl are first-class on every command, bc programmatic consumers (agents, scripts, LSP) are primary users, not an afterthought.
  • when designing a report struct, the question is "what does whoever's calling this API want to DO with the result?" — never "what should this look like printed in a terminal?"

architecture

crate-level context lives in docs/crates.md — that's the canonical registry of every workspace crate (purpose, category, namespace ownership). it replaced the old per-directory SUMMARY.md thing at the crate level. the actually-maintainable source of truth for a crate's purpose is its Cargo.toml description field — keep THAT accurate and the registry stays cheap to regenerate. check the registry before asking "wait which crate owns X?"

Read the full file on GitHub · 183 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 183 lines · 7,124 tokens per session scan C 4fed3d65acb1

Subscribe to this mod's changes

normalize CLAUDE.md is an instructions file published in the GitHub repository rhi-zone/normalize (5 stars, last pushed 4d ago), licensed Apache-2.0. It adds 7,124 tokens to every session, about $0.0356 per session on Opus 5. A static security scan graded it C with 2 findings (downloads and executes remote code, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other instructions, from other repositories

reducethemtokens CLAUDE.md

Instructions for yttrium400/reducethemtokens, covering claude.md, commands, install for development, run tests and build and publish.

yttrium400/reducethemtokens · 1,140 tokens

Ix CLAUDE.md

Instructions for ix-infrastructure/Ix, covering project: ix (this repo), layout, commands, cli dev (from ix-cli/) and skill + tooling (from repo root).

ix-infrastructure/Ix · 3,958 tokens

tree-sitter-fsharp AGENTS.md

Instructions for ionide/tree-sitter-fsharp, covering improving the f# tree-sitter parser, project structure, running the cli, workflow for adding a new feature and 1. create a test case first.

ionide/tree-sitter-fsharp · 2,464 tokens

tree-sitter-analyzer CLAUDE.md

Instructions for aimasteracc/tree-sitter-analyzer, covering ruflo — claude code configuration, rules, test quality rules — locked (2026-06-28), t-1: no new test files for existing plugins (blocker) and t-2: no weak assertions — ratchet-enforced (blocker).

aimasteracc/tree-sitter-analyzer · 8,921 tokens

tree-sitter-analyzer AGENTS.md

Instructions for aimasteracc/tree-sitter-analyzer, covering agent instructions, codemap index, test runtime contract, ci test tier contract and agent dogfood feedback loop.

aimasteracc/tree-sitter-analyzer · 3,260 tokens

kin GEMINI.md

Instructions for firelock-ai/kin, covering kin: read the repository from the graph, pick the tool by what you know, trust the envelope, not the emptiness, if the tools have no graph and a working order.

firelock-ai/kin · 695 tokens