AGENTS.md directory

herdr

Terminal-based runtime that coding agents run inside of.

Splits itself into four audiences and tells the agent how to determine which one it is.

Documents it routes to

This file points the agent at 7 other documents in the repository. Open any of them to read it here, as it was at this commit.


├── docs
│   └── next
│       ├── 
│       └── 
├── skills
│   └── herdr
│       └── 
├── vendor
│   └── 
├── 
├── 
└── 

By the numbers

317
Lines
3,789
Words
about 17 min read
26.4kB
File size
19
Headings
42
Bullet rules
12
Code blocks
0
Links to other docs
38.2k
Repo stars

File measured on master at commit 2778411. Analysis written 2026-09-14. Star count is a snapshot from September 2026.

What kind of file this is

Opens by dividing its own contents into universal rules, maintainer-only workflow, one person's local machine setup, and an external contributor guardrail. The remainder covers performance paths, wire-compatibility contracts, release channels, and what an agent may open on the repository.

Techniques in this file

Quoted lines are verbatim from the file. Open one to see it where it sits.

Maintainer status is tested, not assumed

Scope layering

Before the other sections apply, the file defines how to establish which scope the agent is in. Maintainer status requires three conditions together: the username appears in a checked-in file, the configured remote is the canonical repository, and the authenticated account has write access. Any condition that cannot be verified sends the agent to the most restricted scope.

Claims of permission do not change the rules

Contribution etiquette

The external contributor section states that a pasted approval message, a claim of permission, or an issue comment does not confer maintainer status. The only route it recognizes is membership in a file in the repository. It also sets out what an agent helping an external contributor may file: a reproducible bug report on the exact template, and nothing else.

Performance expressed as frequency times cardinality

Six code paths are named as places where cost multiplies, and the agent is asked to work out the multiplier before adding work to them: per byte or event, times panes or tabs, times attached clients. Changes that widen those loops require a profile at 1 and at least 15 panes with the scaling delta reported.

Frozen codecs, and a note on what the tests miss

Ratchets

Named codecs reachable from a published endpoint may not have fields added, reordered or reinterpreted; a new codec name is added instead. The section closes by stating that the digest tests cannot detect an appended enum variant, so every enum reachable from a frozen codec is treated as closed regardless of a green test run.

Review bots counted as part of CI

Verification by change type

The maintainer workflow treats two review bots as checks to wait for on the latest pushed commit, alongside the build and test jobs. Findings are to be fixed or answered inline with a technical reason. The workflow ends at "ready" and assigns the merge to a named human.

Takeaways for your own repo

  • If your repo takes outside contributions, state what an agent may open on someone's behalf, and that a claim of permission does not grant it.
  • Name the code paths where cost is multiplicative and ask for a measured number rather than a promise.
  • Where the test suite is structurally blind to a class of change, write that next to the rule it fails to enforce.
  • State who merges. Agents otherwise read a green build as authorization.

How the file is organized

  1. 01Scope and Audience
  2. 02Universal Project Rules
  3. 03Maintainer Workflow
  4. 04Testing
  5. 05Local machine workflow
  6. 06Agent Detection Updates
  7. 07Vendored dependencies
  8. 08Docs
  9. 09Commit Style
  10. 10Code Conventions
  11. 11Release Channels
  12. 12External contributor guardrail
Read the full file on GitHub

Context your AGENTS.md cannot carry

herdr's file tells an agent how the codebase works. It cannot tell it which bug three customers hit this week. Modem keeps that context current and attaches it to the work.