tools CLAUDE.md

A guide for developing TypeScript tools used by large language model agents in the @agent-sh/harness monorepo. A monorepo is one repository containing multiple related packages or projects.

In plain words
What is it for?
Use it when changing tool names, descriptions, input schemas, errors, outputs, pagination, or tests for the harness library.
Why use it?
It explains that these tools must be designed for probabilistic model behavior, not only tested like ordinary deterministic functions.

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/avifenesh/tools/claude-md
Clone the repo
git clone --depth 1 https://github.com/avifenesh/tools
Per session 1,659 This file is loaded in full into every session.
When invoked 1,659 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin 95% copy Near-identical to another mod 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.01659 $0.01659
Opus 5 $0.00830 $0.00830
Sonnet 5 $0.00332 $0.00332
Haiku 4.5 $0.00166 $0.00166

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

Security

Grade A, and why

tools CLAUDE.md scanned grade A with 0 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 3d 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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

This is a copy

95% identical to tools AGENTS.md — 10 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

CLAUDE.md · 120 lines

How it starts

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

CLAUDE.md — @agent-sh/harness-* monorepo

Guidance for Claude Code working on this repo. The repo builds LLM-facing agent tools (Read, Write, Grep, Glob, ...) as a TypeScript-first npm library, with Rust ports coming later. The tools are consumed by real language models inside agent harnesses — not by deterministic callers.

The prime directive: treat LLM tools as a chaotic distributed system, not as kernel code

The user is a systems software engineer (Valkey, CRIU, ElastiCache). These tools look like regular functions — typed inputs, typed outputs, clean error enums — but that framing is a trap. The consumer is a probabilistic model, so the contract is not "given these args, produce this output." The contract is:

Given only the tool's textual surface (name, description, schema field names, error messages, output shape, pagination hints), does a real model, across many families (Qwen, Llama, GPT, Claude, DeepSeek), pick this tool, call it correctly, interpret the result, and make good next moves — without giving up and falling back to Bash?

That is the spec. Everything else is implementation detail.

Why this matters — the failure modes that unit tests never catch

  1. Description-driven misuse. An ambiguous parameter name (path vs file_path, limit vs max_lines) causes the model to pass the wrong thing. The code is fine. The tool is broken.
  2. Unrecoverable errors. ENOENT with no context leaves the model stuck. A NOT_FOUND that lists sibling candidates lets it self-correct.
  3. Ignored hints. The output says next_offset: 2000 but the model re-reads from 0 and loops. The pagination design is the failure.
  4. Silent non-invocation. The model reads the description, decides the tool doesn't fit, and shells out to cat / grep / ls via Bash instead. You will not see this in any unit test. You will only see it when you log real sessions and notice your tool is never called.
  5. Hallucinated output. The tool returns JSON the model misparses, so the model confidently reports content that was never in the file.
  6. Tool-as-friction. A well-intentioned safety rail (sensitive-path deny, forced pagination, mandatory ledger confirmation) makes the tool annoying enough that the model routes around it. The user has shipped many tools and watched exactly this happen — "too many to count."

Read the full file on GitHub · 120 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. 3d ago First seen · 120 lines · 1,659 tokens per session scan A 19b81f90578d

Subscribe to this mod's changes

tools CLAUDE.md is an instructions file published in the GitHub repository avifenesh/tools (5 stars, last pushed 4d ago), licensed MIT. It adds 1,659 tokens to every session, about $0.0083 per session on Opus 5. A static security scan graded it A with 0 findings. It is 95% identical to tools AGENTS.md, differing in 10 lines, and is treated as a copy.