Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
## 📦 Package Details

**Maintainer:** @<github-user>
<sub>(You can find this by checking the history of the package `Makefile`.)</sub>
**Maintainer:** @\<github-user\>
<!-- You can find this by checking the history of the package `Makefile`. -->

**Description:**
<!-- Briefly describe what this package does or what changes are introduced -->
<!-- Briefly describe what this package does or what changes are introduced. -->

---

## 🧪 Run Testing Details
## 🔬 Run Testing Details

- **OpenWrt Version:**
- **OpenWrt Target/Subtarget:**
Expand All @@ -18,15 +18,18 @@

## ✅ Formalities

- [ ] I have reviewed the [CONTRIBUTING.md](https://github.com/openwrt/packages/blob/master/CONTRIBUTING.md) file for detailed contributing guidelines.
<!-- Mark required fields like so: [x] -->

- [ ] I have reviewed the [contributing guidelines](https://github.com/openwrt/packages/blob/master/CONTRIBUTING.md).
- [ ] I have reviewed the [AI policy](https://github.com/openwrt/packages/blob/master/CONTRIBUTING.md#ai-policy).
- [ ] I have used AI or LLM in my pull request, description, or commit
messages.

### If your PR contains a patch:

- [ ] It can be applied using `git am`
- [ ] It has been refreshed to avoid offsets, fuzzes, etc., using
```bash
make package/<your-package>/refresh V=s
```
- [ ] It has been refreshed to avoid offsets, fuzzes, etc.
<!-- You can do this using: make package/<your-package>/refresh V=s -->
- [ ] It is structured in a way that it is potentially upstreamable
<sub>(e.g., subject line, commit description, etc.)</sub>
<sub>We must try to upstream patches to reduce maintenance burden.</sub>
<!-- This relates to the header, subject, commit description, etc. -->
<!-- We must try to upstream patches to reduce maintenance burden. -->
27 changes: 27 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,33 @@ prompts given to the automated LLM reviewer.
- [Project-wide LLM review guidelines](https://github.com/openwrt/actions-shared-workflows/tree/main/llm-review-prompts)
- [Packages repository-specific LLM review addendum](https://github.com/openwrt/packages/blob/master/.github/llm-review-rules.md)

## AI policy

> [!WARNING]
> You **must** disclose any LLM usage in your pull request, description or

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI, the kernel merged similar guidelines for v7.0, and ~8 months later their removal was proposed: https://lore.kernel.org/lkml/20261009083137.3-1-sashal@kernel.org/

It's basically assumed that the majority of developers use LLMs these days. Shouldn't we rather steer the LLMs and make everyone's life easier? That likely means an AGENTS.md plus a few composable skills (openwrt-commit, openwrt-pull-request, openwrt-issue) that demand the appropriate content. Both are plain Markdown, so they work across harnesses (Codex, Copilot, Cursor, Gemini CLI, and Claude Code via a CLAUDE.md symlink).

To keep the human in the loop, AGENTS.md could tell the agent to add My human operator wasn't in the loop to every PR/issue body until the human explicitly approves it. If that line reaches GitHub, a check can label or auto-close the PR or issue.

@ynezz ynezz Oct 20, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that demand the appropriate content

For example openwrt/openwrt#24500

  • you need to provide proof to the reviewers, using for example x86/64 or armsr/armv8 QEMU VM, that the change was compile and e2e runtime tested using red-green TDD approach
  • you need to provide flash/ram impact
  • honestly report anything strange you bumped into in your sessions
    ...

Lets use the donated tokens in a way which works for this project.

@geldot geldot Oct 20, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI, the kernel merged similar guidelines for v7.0, and ~8 months later their removal was proposed: https://lore.kernel.org/lkml/20261009083137.3-1-sashal@kernel.org/

This was already addressed. The proposed requirement here is different and relates to AI usage in the "pull request, description or commit messages" - in other words, you must disclose any AI usage in your GitHub messages and written prose in the commit message, via a checkbox.

The purpose is to discourage autonomous agents like Openclaw that open PRs and act on a user's behalf without operator guidance, which has been a growing problem in the OpenWrt repos. It is not related to the code or functional contents of the patch.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The purpose is to discourage autonomous agents like Openclaw that open PRs and act on a user's behalf without operator guidance, which has been a growing problem in the OpenWrt repos.

Do those harnesses even read CONTRIBUTING.md? None load it automatically, only their own AGENTS.md/CLAUDE.md, and Claude Code was ignoring AGENTS.md until recently.

Checked OpenClaw (98bb32b): it doesn't read the target repo's CONTRIBUTING.md or PR template. Its gh skills open PRs with gh pr create --body-file and a hardcoded body, so the checkbox never shows up. If it delegates to Codex/Claude Code, those load the repo's AGENTS.md/CLAUDE.md.

So AGENTS.md (+ CLAUDE.md symlink) plus a CI check that fails when the disclosure is missing would probably catch them better.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked OpenClaw (98bb32b): it doesn't read the target repo's CONTRIBUTING.md or PR template. Its gh skills open PRs with gh pr create --body-file and a hardcoded body, so the checkbox never shows up. If it delegates to Codex/Claude Code, those load the repo's AGENTS.md/CLAUDE.md.

Why does OpenWrt have to work around third-party tools' issues? And at which agent's, model's, harness's support do we draw the line? Why do we even need to enable drive-by contributions from people who neither read the basic guidelines, nor bother using the PR template?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked OpenClaw (98bb32b): it doesn't read the target repo's CONTRIBUTING.md or PR template. Its gh skills open PRs with gh pr create --body-file and a hardcoded body, so the checkbox never shows up. If it delegates to Codex/Claude Code, those load the repo's AGENTS.md/CLAUDE.md.

Why does OpenWrt have to work around third-party tools' issues? And at which agent's, model's, harness's support do we draw the line?

@ynezz's finding is valuable. I wouldn't want to be the one to maintain a tangle of AGENTS files either, but let's hold on to that and revisit if the problem persists. There's some attraction to keeping the bots away via their own mechanism rather than banning them as they pop up - as a moderate contributor I don't have the ability to ban or even close spam PRs right now and I lose time every day because spam PRs remain open perpetually.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: The reference to OpenClaw doesn't work and points to openwrt/packages instead.

Honestly, seeing #30836 makes me just want to skip it without even reading it.

> commit messages.

We support the use of LLMs for coding, but we hold a high bar for all
contributions, and we expect a human in the loop who genuinely understands the
work an LLM produces on their behalf.

> [!IMPORTANT]
> Don't rely on LLMs to write the whole thing for you when communicating with
> the maintainers, and don't post wall-of-text comments.

We expect comments on our projects to be written by humans. The readers are
humans, and we'd like to hear from you, not from a model. We may hide or remove
any comments that we believe are LLM-generated.
Comment on lines +42 to +44

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The section just above (CONTRIBUTING.md:18-26) points contributors at the project's own automated LLM reviewer, which posts LLM-generated comments autonomously. This rule and the "no autonomous agents" one at line 43 read as covering it too. Should both say they apply to contributors, not to project-run review tooling?


Generated by Claude Code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@openwrt-ai No worries. :) You're our friend, we like you, and your reviews are really helpful. 👍 We'll make an exception for you.


If you're using an LLM to edit or – as a non-native English speaker – to
translate your comments, keep them short, review before posting, and make sure
they say what you mean.

> [!CAUTION]
> Do not use autonomous agents for contributing to our projects.

We will close any pull requests that we believe were created autonomously.

## Package Sources (archives and repositories)

- <strong>PKG_SOURCE</strong> should reference the smallest available archive. In order of
Expand Down
Loading