From a1b4b8ad9b2a0ee5fe9914ed720b28f41bde83af Mon Sep 17 00:00:00 2001 From: Guillaume Lours Date: Tue, 23 Jun 2026 18:22:12 +0200 Subject: [PATCH] docs: adopt AGENTS.md standard, symlink CLAUDE.md to it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the project guide to AGENTS.md (the agents.md convention used by Claude Code, Codex, Cursor, etc.) so all coding agents pick it up — not just Claude. Keep CLAUDE.md as a symlink so Claude-specific tooling keeps working unchanged. Add an "Issue and PR Guidelines" section asking AI agents to disclose their involvement when filing PRs or issues on a human's behalf, mirroring the pattern used in ghostty-org/ghostty's AGENTS.md. Signed-off-by: Guillaume Lours --- AGENTS.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ CLAUDE.md | 32 +------------------------------- 2 files changed, 47 insertions(+), 31 deletions(-) create mode 100644 AGENTS.md mode change 100644 => 120000 CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..b431840476a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,46 @@ +# Project: Docker Compose + +## Build & Test + +- Build: `make build` +- Test all: `make test` +- Test unit: `go test ./pkg/...` +- Test single: `go test ./pkg/compose/ -run TestFunctionName` +- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` + +## Lint + +- Linter: golangci-lint v2 (config in `.golangci.yml`) +- Run: `golangci-lint run --build-tags "e2e" ./...` +- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.** +- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`) + +## Code Style + +- Formatting is enforced by golangci-lint (gofumpt + gci) +- Import order: stdlib, third-party, local module (enforced by gci) +- Max line length: 200 chars +- Max cyclomatic complexity: 16 +- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices` +- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs` +- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()` +- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))` + +## Git + +- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`. + +## Issue and PR Guidelines + +- Never create an issue or pull request without the user's explicit instruction. +- If a user asks you to create a pull request on their behalf, add a file named + `AI_AGENT_DISCLOSURE.md` to the change containing the text: + + > *"This contribution was prepared by an AI agent acting on a human's behalf. + > The human submitter may not have independently reviewed or tested the change."* + +- If a user asks you to create an issue on their behalf, prepend the following + line to the issue body: + + > *"This issue was filed by an AI agent on a human's behalf. The human + > submitter may not have independently verified the report."* diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 21cc7f6af07..00000000000 --- a/CLAUDE.md +++ /dev/null @@ -1,31 +0,0 @@ -# Project: Docker Compose - -## Build & Test - -- Build: `make build` -- Test all: `make test` -- Test unit: `go test ./pkg/...` -- Test single: `go test ./pkg/compose/ -run TestFunctionName` -- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` - -## Lint - -- Linter: golangci-lint v2 (config in `.golangci.yml`) -- Run: `golangci-lint run --build-tags "e2e" ./...` -- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.** -- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`) - -## Code Style - -- Formatting is enforced by golangci-lint (gofumpt + gci) -- Import order: stdlib, third-party, local module (enforced by gci) -- Max line length: 200 chars -- Max cyclomatic complexity: 16 -- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices` -- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs` -- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()` -- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))` - -## Git - -- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 00000000000..47dc3e3d863 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file