

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# AGENTS.md23Instructions for AI coding agents (Claude Code, Copilot, Cursor, etc.) working in this repository.45## Critical rules671. **Always sign off commits.** The human user must sign off commits via `git commit -s` — never8 manually write a `Signed-off-by` trailer. The sign-off attests that the committer (the user)9 has the right to submit the code under the project's license.102. **Always run format and lint checks before committing.** Use `tools/local_fix_format.sh` for11 a quick local check, or run `./ci/do_ci.sh format` inside Docker for the full CI check suite.12 Format failures are the most common CI rejection. If running checks is impractical, warn the13 user that formatting has not been verified.143. **Never amend commits or force-push after a PR has received human review.** Always create new15 commits to preserve review history.164. **Never rebase a PR that is under review.** Use `git merge main` instead to pull in recent17 changes. The project squash-merges, so commit count does not matter.185. **Disclose AI usage.** When submitting PRs, include a note about AI assistance in the PR19 description. The submitter must fully understand all code being submitted.206. **Never commit to `main`.** Always create a new branch before committing. If switching21 contexts or unsure which branch to use, ask the user.227. **Always push to a personal fork.** Do not create branches in the main repo.2324## Developer workflow2526### 1. Before starting work2728Read `CONTRIBUTING.md` for the full contribution process. Key points:29- **Major features (>100 LOC or user-facing):** Open a GitHub issue first to discuss design.30 For new extensions, read `EXTENSION_POLICY.md`.31- **Small patches and bug fixes:** No prior communication needed.32- Install git hooks: `./support/bootstrap`3334### 2. Writing code3536Read `STYLE.md` for the C++ coding style. After writing C++ code, run `clang-format` to fix37formatting automatically rather than trying to hand-format:3839```bash40clang-format -i <file>41```4243Tests must:44- Live in `test/` mirroring the `source/` structure45- Achieve 100% coverage for new code46- Use `StrictMock` by default, `SimulatedTimeSystem` for time, port 0 for network47- Unit tests must be hermetic and deterministic — no real time, no randomness48- Integration tests (in `test/integration/`) use real network on localhost4950### 3. Building and testing5152See `bazel/README.md` for full build documentation. Common commands:5354```bash55# Docker-based (recommended — matches CI environment)56./ci/run_envoy_docker.sh bash # interactive shell57./ci/do_ci.sh debug //test/common/http/... # build + test58./ci/do_ci.sh debug.server_only # build binary only5960# Local (requires local dependencies)61bazel test -c dbg //test/common/http/... # run tests62bazel build --config=clang -c opt //source/exe:envoy-static # optimized binary63```6465Sanitizers, coverage, GDB debugging, and profiling are resource-intensive. Do **not** run66them unless the user explicitly asks. See `bazel/README.md` and `bazel/PPROF.md`.6768### 4. Format and lint checks (required before every commit)6970Format failures are the most common CI rejection. Agents should produce content that conforms71to the repo's style conventions for all file types (C++, BUILD, YAML, Markdown, shell, etc.).7273**Quick local check (recommended):**7475```bash76tools/local_fix_format.sh # uncommitted changes (default)77tools/local_fix_format.sh -main # changes since main78tools/local_fix_format.sh -all # entire repo79```8081**Individual checks:**8283```bash84bazel run //tools/code_format:check_format -- fix # C++, BUILD, .bzl, .proto85bazel run //tools/spelling:check_spelling_pedantic -- fix # spelling86./ci/do_ci.sh format # full CI check (inside Docker)87```8889**Linter config files — read these to produce compliant output without running the tools:**9091| Config file | What it configures |92|-------------|--------------------|93| `.clang-format` | C++/Proto formatting (100-col, include order, pointer alignment) |94| `.yamllint` | YAML rules (140-col max, consistent indentation) |95| `.flake8` | Python lint rules |96| `rustfmt.toml` | Rust formatting (100-col, 2-space indent) |97| `tools/spelling/spelling_dictionary.txt` | Custom word list (1700+ project terms) |9899### 5. Creating the commit100101Before your first commit in a session:1021031. Check if the local `main` is up to date with `origin/main`:104```bash105 git fetch origin106 git log main..origin/main --oneline107```1082. If `main` is behind, sync it:109```bash110 git checkout main && git pull && git checkout -111```1123. Create a new branch off the updated `main`:113```bash114 git checkout -b <descriptive-branch-name>115```1164. If you had uncommitted changes that conflict with the updated `main`, ask the user whether117 to proceed on the outdated base or resolve conflicts against the new `main`.118119If you're switching contexts or unsure which branch to commit to, ask the user before committing.120121```bash122git add <files>123git commit -s # -s adds Signed-off-by automatically; NEVER write it manually124```125126### 6. Pushing and creating a PR127128**PR title format** — lower-case subsystem prefix followed by a colon:129`docs: fix grammar error`, `router: add x-envoy-overloaded header`130131**PR description template** — every PR must fill in:132133```134Commit Message: <what this PR does — used as the final squash-merge message>135Additional Description: <context useful to reviewers>136Risk Level: Low | Medium | High137Testing: <what testing was done>138Docs Changes: <description or N/A>139Release Notes: <description or N/A>140```141142See `PULL_REQUESTS.md` for full field descriptions and optional fields (runtime guard,143deprecation, platform-specific features).144145**Release notes:** User-facing changes **must** add a release note fragment under146`changelogs/current/`. Name the file `<area>__<short-description>.rst`.147148### 7. Waiting for CI and review149150- Do **not** create draft PRs if you want prompt reviews — draft PRs are not triaged.151- To re-run failed CI tasks, add a `/retest` comment on the PR.152- PRs with no activity for 14+ days may be closed.153154### 8. Addressing review comments155156- **Never amend or force-push** after a reviewer has looked at the PR. Create new commits.157- **Never rebase.** If you need to incorporate upstream changes:158```bash159 git fetch origin main && git merge origin/main160```161- If the reviewer asked for a runtime guard, add one (see `CONTRIBUTING.md`).162163### 9. After merge164165The project squash-merges PRs. The "Commit Message" field in your PR description becomes the166final commit message. Make sure it's up to date before merge.167168## Understanding CI169170Envoy uses a checks-based CI system. Results appear as **GitHub Check Runs** on PRs, not as171simple workflow pass/fail statuses.172173**CI pipeline:**1741751. **`Envoy/Prechecks`** — fast checks: format/lint/spelling, dependency validation, docs build1762. **`Envoy/Checks`** — heavier checks: compilation, tests, coverage, sanitizers177178**Checking CI status:**179180```bash181gh pr checks <PR-number>182gh run view <run-id> --log-failed183```184185When CI fails, check the failed check run name to determine which `do_ci.sh` target to186reproduce locally. Format failures come from `Envoy/Prechecks`; build/test failures come187from `Envoy/Checks`.188189## Inclusive language190191The following terms are **not allowed**:192- ~~whitelist~~ -> allowlist193- ~~blacklist~~ -> denylist / blocklist194- ~~master~~ -> primary / main195- ~~slave~~ -> secondary / replica196197## BUILD file conventions198199See `bazel/DEVELOPER.md` for full BUILD file rules. Key points:200- Use `envoy_cc_library`, `envoy_cc_test`, `envoy_cc_mock` (not raw `cc_library`)201- Target suffixes: `_lib`, `_test`, `_mocks`, `_interface`202- Every `#include` must have a corresponding `deps` entry203204## Updating dependencies205206See `bazel/EXTERNAL_DEPS.md` and `DEPENDENCY_POLICY.md`. When updating a version:2071. Update version, sha256, and urls in `bazel/repository_locations.bzl`2082. Update `release_date` in `bazel/deps.yaml` to the UTC date of the new release2093. Prefer maintainer-provided tarballs over GitHub auto-generated ones210211## CI and GitHub Actions (for workflow file authors)212213- In `if:` conditions, do **not** wrap expressions in `${{ }}` — the `if` field evaluates214 expressions implicitly. Use `${{ }}` only in string contexts (`run:`, `with:`, `env:`).215- Workflow files in `.github/workflows/` are shared across all branches (main and stable release216 branches). Do not remove variables or inputs still referenced by stable branches.217218## Key files219220| File | Purpose |221|------|---------|222| `STYLE.md` | C++ coding style and error handling |223| `CONTRIBUTING.md` | Contribution guidelines, deprecation, breaking changes |224| `PULL_REQUESTS.md` | PR field descriptions |225| `EXTENSION_POLICY.md` | Extension lifecycle and requirements |226| `DEPENDENCY_POLICY.md` | External dependency rules |227| `RELEASES.md` | Release schedule and backport process |228| `SECURITY.md` | Security reporting and disclosure |229| `REPO_LAYOUT.md` | Repository structure |230| `bazel/README.md` | Building, testing, sanitizers, coverage |231| `bazel/DEVELOPER.md` | BUILD file conventions |232| `bazel/EXTERNAL_DEPS.md` | Managing external dependencies |233| `bazel/PPROF.md` | Performance profiling |234| `source/extensions/extensions_metadata.yaml` | Extension status and security posture |235| `source/common/runtime/runtime_features.cc` | Runtime feature flag defaults |236
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| envoyproxy/envoycompat/openssl/AGENTS.md · 29k | AGENTS.md | buildagent-behaviour | 58/100 | 13 days ago | |
| envoyproxy/envoy.github/copilot-instructions.md · 29k | Copilot instructions | setupbuildtestlint-format+7 | 77/100 | 13 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| SkeneTechnologies/skene-cookbookAGENTS.md · 52 | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 13 days ago | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| deepseek-ai/deepseek-harnessnative/landlock-run/AGENTS.md · 104k | AGENTS.md | setupteststylearch+3 | 100/100 | today | |
| vllm-project/vllmAGENTS.md · 89k | AGENTS.md | setuptestlint-formatstyle+5 | 100/100 | 14 days ago | |
| unoplat/unoplat-code-confluenceunoplat-code-confluence-frontend/AGENTS.md · 95 | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 13 days ago | |
| aaif-goose/gooseAGENTS.md · 53k | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 8 days ago | |
| netdata/netdatasrc/go/plugin/ibm.d/AGENTS.md · 80k | AGENTS.md | buildtestlint-formatarch+3 | 99/100 | today | |
| react/react-nativepackages/react-native-compatibility-check/AGENTS.md · 126k | AGENTS.md | testlint-formatstylearch+4 | 99/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/envoyproxy-envoy-agents)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.