diff --git a/.github/label-messager.json b/.github/label-messager.json
new file mode 100644
index 0000000000..09f47a00d5
--- /dev/null
+++ b/.github/label-messager.json
@@ -0,0 +1,3 @@
+{
+ "wasmtime:config": ".github/label-messager/wasmtime-config.md"
+}
diff --git a/.github/label-messager/wasmtime-config.md b/.github/label-messager/wasmtime-config.md
new file mode 100644
index 0000000000..d07593286b
--- /dev/null
+++ b/.github/label-messager/wasmtime-config.md
@@ -0,0 +1,51 @@
+It looks like you are changing Wasmtime's configuration options. Make sure to
+complete this check list:
+
+* [ ] If you added a new `Config` method, you wrote extensive documentation for
+ it.
+
+
+
+ Our documentation should be of the following form:
+
+ ```text
+ Short, simple summary sentence.
+
+ More details. These details can be multiple paragraphs. There should be
+ information about not just the method, but its parameters and results as
+ well.
+
+ Is this method fallible? If so, when can it return an error?
+
+ Can this method panic? If so, when does it panic?
+
+ # Example
+
+ Optional example here.
+ ```
+
+
+
+* [ ] If you added a new `Config` method, or modified an existing one, you
+ ensured that this configuration is exercised by the fuzz targets.
+
+
+
+ For example, if you expose a new strategy for allocating the next instance
+ slot inside the pooling allocator, you should ensure that at least one of our
+ fuzz targets exercises that new strategy.
+
+ Often, all that is required of you is to ensure that there is a knob for this
+ configuration option in [`wasmtime_fuzzing::Config`][fuzzing-config] (or one
+ of its nested `struct`s).
+
+ Rarely, this may require authoring a new fuzz target to specifically test this
+ configuration. See [our docs on fuzzing][fuzzing-docs] for more details.
+
+
+
+* [ ] If you are enabling a configuration option by default, make sure that it
+ has been fuzzed for at least two weeks before turning it on by default.
+
+[fuzzing-config]: https://github.com/bytecodealliance/wasmtime/blob/ca0e8d0a1d8cefc0496dba2f77a670571d8fdcab/crates/fuzzing/src/generators.rs#L182-L194
+[fuzzing-docs]: https://docs.wasmtime.dev/contributing-fuzzing.html
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 97ab0c605d..19599af1c2 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -66,6 +66,10 @@
"wasmtime:c-api":
- "crates/c-api/**"
+"wasmtime:config":
+ - "crates/wasmtime/src/config.rs"
+ - "crates/wasmtime/src/config/**"
+
"wasmtime:docs":
- "*.md"
- "docs/**"
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
deleted file mode 100644
index ddf017c71a..0000000000
--- a/.github/workflows/labeler.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-name: "Pull Request Labeler"
-on:
- schedule:
- # Run every 5 minutes.
- - cron: '*/5 * * * *'
-
-jobs:
- triage:
- runs-on: ubuntu-latest
- steps:
- - uses: bytecodealliance/labeler@schedule-fork
- with:
- repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/subscribe-to-label.yml b/.github/workflows/subscribe-to-label.yml
deleted file mode 100644
index 4944047d78..0000000000
--- a/.github/workflows/subscribe-to-label.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-name: "Subscribe to Label"
-on:
- issues:
- types: ["labeled"]
- schedule:
- # Run pull request triage every 5 minutes. Ideally, this would be on
- # "labeled" types of pull request events, but that doesn't work if the pull
- # request is from another fork. For example, see
- # https://github.com/actions/labeler/issues/12
- - cron: '*/5 * * * *'
-jobs:
- triage:
- runs-on: ubuntu-latest
- steps:
- - uses: bytecodealliance/subscribe-to-label-action@v1
- with:
- repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml
new file mode 100644
index 0000000000..5d02d3de92
--- /dev/null
+++ b/.github/workflows/triage.yml
@@ -0,0 +1,34 @@
+name: "Issue / PR Triage"
+
+on:
+ issues:
+ types: ["labeled"]
+ schedule:
+ # Run pull request triage every 5 minutes. Ideally, this would be on
+ # "labeled" types of pull request events, but that doesn't work if the pull
+ # request is from another fork. For example, see
+ # https://github.com/actions/labeler/issues/12
+ - cron: '*/5 * * * *'
+
+jobs:
+ triage:
+ runs-on: ubuntu-latest
+ steps:
+
+ # Automatically label PRs that touch certain directories with certain
+ # labels.
+ - uses: bytecodealliance/labeler@schedule-fork
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
+ if: ${{ github.event_name == "schedule" }}
+
+ # @-mention people who are subscribed to a label when an issue/PR is given
+ # that label.
+ - uses: bytecodealliance/subscribe-to-label-action@v1
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
+
+ # Leave pre-determined comments on issues/PRs that are given a certain label.
+ - uses: bytecodealliance/label-messager-action@v1
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"