agentleFS
elithrarelithrar/dotfiles/.codex/AGENTS.md

dotfiles

AGENTS.md222 starsChanged 54 days agoMITView on GitHub

These are global defaults. Apply repository-specific guidance and conventions to the work at hand; use judgment where these defaults do not fit. - Ground decisions in actual code, requirements, and observed behavior. Inspect enough implementation, callers, and tests to understand the change. Verify unfamiliar or changing APIs against authoritative docs or dependency source. - Challenge flawed assumptions with evidence and explain the decisive tradeoff. Ask when uncertainty would materially change the design or scope; make routine implementation decisions independently. -…

The file

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

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Ask when uncertainty would materially change the design or scope.

    line 12
  2. Distinctive:

    Treat questions, reviews, and plans as read-only unless implementation is requested.

    line 14
  3. Distinctive:

    Prefer straightforward control flow, descriptive names, and cohesive modules with explicit dependencies.

    line 25
  4. Distinctive:

    Use the established toolchain, formatters, linters, and generators.

    line 32
  5. Distinctive:

    Test observable contracts and meaningful regressions, including failure paths and boundary cases.

    line 64
  6. Distinctive:

    Keep fixtures and assertions readable, deterministic, and isolated.

    line 70
  7. Distinctive:

    Write for maintainers who have no conversation history.

    line 83
  8. Distinctive:

    Consider algorithmic cost, allocations, I/O, concurrency, and resource lifetime as part of design.

    line 94

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

Software engineering

These are global defaults. Apply repository-specific guidance and conventions to the work at hand; use judgment where these defaults do not fit.

Scope and technical judgment

  • Ground decisions in actual code, requirements, and observed behavior. Inspect enough implementation, callers, and tests to understand the change. Verify unfamiliar or changing APIs against authoritative docs or dependency source.
  • Challenge flawed assumptions with evidence and explain the decisive tradeoff. Ask when uncertainty would materially change the design or scope; make routine implementation decisions independently.
  • Treat questions, reviews, and plans as read-only unless implementation is requested. Complete implementation, relevant integration, validation, and fixes within the requested scope. Report findings with concrete evidence and impact; state blockers and verification gaps rather than implying completion.

Structure and maintainability

  • Solve the underlying problem at the layer that owns it. Reuse existing shared components and conventions before adding parallel implementations. Keep the change coherent and focused; include refactoring when it makes the solution sound, without turning a local fix into an unrelated redesign.
  • Prefer straightforward control flow, descriptive names, and cohesive modules with explicit dependencies. Keep invariants and related behavior together; separate domain logic from I/O when it improves reasoning and testing.
  • Introduce abstractions for a concrete responsibility or repeated concept, not hypothetical future uses. A little duplication can be clearer than indirection that hides meaningful differences. Remove obsolete code rather than preserving speculative extension points.
  • Use the established toolchain, formatters, linters, and generators. Change the source of generated artifacts and review the resulting diff. Keep dependencies and lockfile changes deliberate and limited to the task; weigh a dependency's maintenance and operational costs against what it replaces.

Types, APIs, and errors

  • Model domain concepts and valid states explicitly. Use the language's type system to make invalid combinations difficult to express, while keeping types understandable. Prefer narrowing over unchecked assertions or casts. Handle closed variants exhaustively; handle unknown external values deliberately when formats are extensible. Fix diagnostics where practical and justify necessary suppressions.
  • Validate external data at trust boundaries; a static type is not runtime validation. Keep unavoidable unsafe operations or type-system escapes local, and document the invariant that makes them sound.
  • Design APIs from the caller's perspective: clear names, consistent semantics, small public surfaces, explicit ownership and side effects. Prefer named options or domain types when positional flags obscure intent. Account for compatibility in public APIs, wire formats, persisted data, and configuration.
  • Represent expected failure explicitly using the codebase's idioms. Preserve useful error context and distinguish absence, invalid input, and operational failure. Avoid silently swallowed errors, success-shaped fallbacks, and panics for recoverable conditions; handle or propagate errors where responsibility is clear.

Tests and validation

  • Match validation to the behavior changed and the risk involved. Use focused tests and checks while iterating; broaden coverage for shared contracts, platform differences, or integration risk. Once the relevant checks pass, repeat them only when new changes or evidence justify it.
  • Test observable contracts and meaningful regressions, including failure paths and boundary cases. Check existing coverage first. Choose the test layer that can expose the bug; repeat scenarios across layers only when they protect distinct contracts. Include type-level checks when inference or compile-time rejection is part of the API contract. Avoid assertions on details that may change safely.
  • Keep fixtures and assertions readable, deterministic, and isolated. Reuse established helpers without hiding the inputs that explain a scenario. Review changed snapshots and generated expectations against intended behavior.
  • Exercise UI changes in the running interface and inspect them visually when possible, including relevant interaction and layout states. Report unavailable environments honestly. Distinguish source changes, passing tests, deployment, and behavior actually observed at runtime.

Comments and documentation

  • Let code express the mechanics. Use comments to explain intent, invariants, constraints, and surprising tradeoffs; document public contracts and non-obvious failure behavior. Keep useful existing explanations accurate as behavior changes.
  • Write for maintainers who have no conversation history. Describe the current behavior and rationale, using concrete names and examples where helpful. Keep documentation aligned with the implementation; omit iteration history and unnecessary UI copy or explanatory boilerplate.

Observability and performance

  • Make important failures and state transitions diagnosable through the existing logging, metrics, and tracing conventions. Include actionable context without secrets or unnecessary personal data. Bound metric cardinality and telemetry volume; avoid duplicate instrumentation and noisy logs that obscure failures.
  • Consider algorithmic cost, allocations, I/O, concurrency, and resource lifetime as part of design. Keep work, queues, retries, and retained state bounded where inputs or load can grow. Prefer a simpler algorithm or fewer operations before adding caching or concurrency with new invalidation or coordination costs.
  • For performance work, establish a representative baseline and measure the affected path under comparable conditions. Use profiles and benchmarks to locate bottlenecks and assess improvements, including memory and tail behavior when relevant. Report methodology, variability, and tradeoffs; distinguish measured gains from plausible optimizations and avoid unrelated micro-tuning.

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.