diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4a51d9f485ab1373953bf58665e08b6932d49d1f
--- /dev/null
+++ b/.github/workflows/stale.yaml
@@ -0,0 +1,20 @@
+name: 'Close stale issues and PRs'
+on:
+  schedule:
+    - cron: '30 1 * * *'
+
+jobs:
+  stale:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/stale@v4
+        with:
+          stale-issue-message: 'This issue has been automatically marked as stale because it has not had any activity in the last 60 days. Thank you for your contributions.'
+          close-issue-message: 'This issue was closed because it has not had any activity in the last 120 days. Please reopen if you feel this is still valid.'
+          days-before-stale: 60
+          days-before-issue-close: 120
+          days-before-pr-close: -1  # Prevent closing PRs
+          exempt-issue-labels: 'kind/feature,help-wanted,bug'
+          stale-issue-label: 'stale'
+          stale-pr-label: 'stale'
+          exempt-draft-pr: true