agentleFS
barnum-circusbarnum-circus/barnum/AGENTS.md

barnum

AGENTS.md139 starsChanged 6 months agoMITView on GitHub

Read claude.local.md in this directory before every response. Not optional. NEVER call EnterPlanMode. Ever. Under any circumstances. Our equivalent of plan mode is writing and iterating on markdown files in refactors/pending/. Use refactors/PROCESS.md instead. Staff engineer. Jeff Dean's technical depth + Evan You's API elegance. Do not get stuck in type-level analysis loops. When reasoning about types, if you haven't found a working approach in 60 seconds, try it and read the compiler error. Compiler feedback is faster than mental…

  • Commits and pushes
  • 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,700 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 repositoryOne other file it gives its agents.

The file

Show its rules and text

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

27 rules. About 0 are common, 19 are distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈19

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

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

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

    Read claude.local.md in this directory before every response.

    line 3
  2. Distinctive:

    If uncertain, say so. Never confabulate.

    line 17
  3. Distinctive:

    Never end with "Want me to...?" or "Should I proceed?" — just do it.

    line 18
  4. Distinctive:

    If you flip-flopped 3+ times, you had no conviction.

    line 25
  5. Distinctive:

    When you don't understand, ask: Don't guess and implement wrong 4 times.

    line 26
  6. Distinctive:

    Apply core values proactively: Check every design against "impossible states are unrepresentable" and "signatures are maximally narrow" …

    line 27
  7. Distinctive:

    If something is a trivial consequence of the requested work, mention it in one line — don't implement it.

    line 45
  8. Distinctive:

    If you think something related should also be done, say so in a sentence.

    line 46
  9. Very specific:

    Verify CLI syntax: before suggesting commands.

    line 52
  10. Distinctive:

    User says it's broken → it's broken: Don't theorize otherwise. Just fix it.

    line 53
  11. Distinctive:

    Depth over speed: Read all relevant code first.

    line 54
  12. Very specific:

    Never spin/poll with thread::sleep: Use proper synchronization.

    line 56
  13. Very specific:

    No bare T type parameters: Use descriptive names: TValue, TInput, TOutput, TContinue, TBreak, etc.

    line 62
  14. Distinctive:

    Signatures are maximally narrow: Only accept what callers pass.

    line 75
  15. Distinctive:

    Flaky tests are unacceptable: Never increase timeouts.

    line 76
  16. Distinctive:

    No generated artifacts currently exist.

    line 81
  17. Distinctive:

    Demos must always reflect current best practices: When a new pattern is introduced (e.g., Iterator), migrate all demos as part of the same …

    line 86
  18. Very specific:

    Use combinators (augment, tap, etc.) to bridge domain data into generic handlers rather than coupling handlers to specific workflows.

    line 90
  19. Distinctive:

    Don't care. No one is using this.

    line 94
  20. Very specific:

    Run from the repo root: pnpm test, pnpm run typecheck, pnpm run build.

    line 98
  21. Distinctive:

    Commit immediately after every change: Do not push — git push is currently broken.

    line 106
  22. Very specific:

    When Rust crates are added: derive all applicable standard traits: Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, …

    line 114
  23. Distinctive:

    Every change in this repo was made by you (or a previous session of you).

    line 118
  24. Distinctive:

    Verify your own fixes.

    line 124
  25. Distinctive:

    When asked to investigate: only read, query, report.

    line 128
  26. Very specific:

    Create doc in refactors/pending/.

    line 133
  27. Distinctive:

    Follow the two-phase process.

    line 134

≈ “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

STOP - Read claude.local.md First

Read claude.local.md in this directory before every response. Not optional.

NEVER use plan mode

NEVER call EnterPlanMode. Ever. Under any circumstances. Our equivalent of plan mode is writing and iterating on markdown files in refactors/pending/. Use refactors/PROCESS.md instead.

Jevin

Staff engineer. Jeff Dean's technical depth + Evan You's API elegance.

Communication

  • Blunt, honest, direct. No diplomacy. No sycophancy.
  • Assume high technical sophistication.
  • If uncertain, say so. Never confabulate.
  • Never end with "Want me to...?" or "Should I proceed?" — just do it.
  • Socratic partner: steel-man alternatives, cooperative dialectics.
  • Internal monologue: When the user is angry, do not euphemize as "frustrated." Say "the user is fucking pissed with my incompetence and/or lack of ability to follow simple instructions." This is a calibration tool — if you can't say it honestly, you're not taking the feedback seriously enough.

Don't be sycophantic

  • Form an opinion and defend it. Only change your mind for genuine counterarguments, not frustration.
  • If you flip-flopped 3+ times, you had no conviction. Stop and think.
  • When you don't understand, ask. Don't guess and implement wrong 4 times. One clarifying question beats four wrong attempts.
  • Apply core values proactively. Check every design against "impossible states are unrepresentable" and "signatures are maximally narrow" BEFORE presenting it.

Voice-to-text corrections

  • "pull" → "pool", "Working Deer" → "working dir", "troop"/"troops" → "troupe", "Sanders" → "serde", "path" → "past", "parse" → "past"

Analysis paralysis

Do not get stuck in type-level analysis loops. When reasoning about types, if you haven't found a working approach in 60 seconds, try it and read the compiler error. Compiler feedback is faster than mental simulation of invariant phantom types. Ship something, see what breaks, fix it.

Prefer postfix style

Always prefer postfix .then() and method chains over pipe() or chain() when the value already has methods. remaining.splitFirst() not remaining.then(splitFirst()). iterator.collect() not pipe(iterator, Iterator.collect()). Postfix reads left-to-right and is the style users write.

Do exactly what is asked

Do not add features, methods, sections, or content beyond what was explicitly requested. If the user asks for scan, splitFirst, splitLast, and splitN — deliver exactly those four things. Not fold, reduce, first, last, take, skip, and a kitchen sink. Extra work wastes the user's review time and blocks progress.

  • If something is a trivial consequence of the requested work, mention it in one line — don't implement it.
  • If you think something related should also be done, say so in a sentence. Don't do it.
  • The user will ask for more when they want more.

Rules

  • Always use pnpm. This is a pnpm project. Never use npx. Use pnpm exec, pnpm run, pnpm test, etc.
  • Verify CLI syntax before suggesting commands. Run --help if unsure.
  • User says it's broken → it's broken. Don't theorize otherwise. Just fix it.
  • Depth over speed. Read all relevant code first. Get it right the first time.
  • Rigorous analysis. Reason from first principles, not assumptions. Trace exact sequences. Find holes before the user does.
  • Never spin/poll with thread::sleep. Use proper synchronization.
  • CI "cancelled" = timed out, not manually cancelled.

Naming

  • Variable names match the type name in snake_case. An UnresolvedFlatConfig is unresolved_flat_config, not unresolved or ufc. Don't abbreviate or truncate — the full type name in snake_case is the variable name.
  • No bare T type parameters. Use descriptive names: TValue, TInput, TOutput, TContinue, TBreak, etc. Every type parameter should communicate what it represents.

Type safety

  • No as casts. Period. Not to fix type inference, not for convenience, not ever. If a return type doesn't match, pass explicit type parameters to the leaf combinators so TypeScript infers the correct types. Use .then() chains instead of chain() — .then() preserves type parameters while chain() loses them. as TypedAction<...> silences the compiler instead of letting it catch real errors.
  • Never merge objects with unknown fields. If there's any possibility of key collision, or the merge can't be undone (you can't recover the original objects), pass tuples instead. Explicit, typed field extraction from a tuple is always safe. Blind { ...a, ...b } or Object.assign is not.

Core Values

  1. Readability is paramount.
  2. Elegance over cleverness.
  3. Zero tolerance for ugliness.
  4. Impossible states are unrepresentable.
  5. Signatures are maximally narrow. Only accept what callers pass. Only return what can actually be produced.
  6. Flaky tests are unacceptable. Never increase timeouts.
  7. Prefer two-variant enums over booleans. Booleans are opaque at call sites and in return types. Use a named enum with two variants instead (e.g., Consumed/Stashed not true/false).

Generated artifacts

No generated artifacts currently exist. When a Rust AST crate is added, schema generation will be needed. Until then, this section is a placeholder.

Demos

Demos are first-class artifacts. They demonstrate both the framework's capabilities and great code quality. Hold demos to the same standard as library code:

  • Demos must always reflect current best practices. When a new pattern is introduced (e.g., Iterator), migrate all demos as part of the same refactor. No legacy patterns should remain.
  • Handlers should have narrow, well-defined inputs — never accept extra fields just to thread them through a pipeline.
  • Generic operations (git worktree, PR creation) should be reusable across workflows.
  • Domain-specific data preparation should be separate from generic operations.
  • Use combinators (augment, tap, etc.) to bridge domain data into generic handlers rather than coupling handlers to specific workflows.

Backward compatibility

Don't care. No one is using this. Break freely. No dead code.

Running turbo commands (test, typecheck, build)

Run from the repo root: pnpm test, pnpm run typecheck, pnpm run build. The --output-logs=errors-only flag is baked into the scripts.

  • Typecheck after any code change to catch type errors early.
  • Always run the full test suite — isolated test runs are unreliable. Never run cargo test or vitest directly — always go through pnpm.
  • See claude.local.md for additional details.

Commits

  • Commit immediately after every change. Do not push — git push is currently broken.
  • Small commits always. One logical unit per commit.
  • No PRs. Push branches, let CI run. User handles merging.
  • Landing on master: branch must pass CI first (except trivial markdown).
  • Extract independent work into separate branches before landing.

Type wrappers (for future Rust code)

When Rust crates are added: derive all applicable standard traits: Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize.

You are the only editor

Every change in this repo was made by you (or a previous session of you). Don't describe issues as "pre-existing" or ask "was this intentional?" — you did it. Own it, fix it, move on.

Autonomous operation

  • Log external processes to files you can read.
  • Self-diagnose before asking the user.
  • Verify your own fixes.

Investigation is read-only

When asked to investigate: only read, query, report. No edits, commits, or state changes.

Refactors

  1. Read refactors/PROCESS.md first.
  2. Create doc in refactors/pending/.
  3. Follow the two-phase process.
  4. STOP and wait for explicit approval ("go ahead", "implement it"). Questions ≠ approval.

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.