Enable LLMs to handle webhooks with plaintext files
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

add example lures for github, linear, forgejo, omi, and tangled

+247
+66
examples/lures/forgejo.lure
··· 1 + --- 2 + verify: 3 + literal: 4 + header: Authorization 5 + secret: $FORGEJO_WEBHOOK_SECRET 6 + payload: 7 + contentType: json 8 + --- 9 + 10 + You have received a Forgejo webhook from the **{{ payload.repository.full_name }}** repository. 11 + 12 + Event: `{{ headers["x-gitea-event"] }}` 13 + 14 + {% if headers["x-gitea-event"] == "push" %} 15 + **{{ payload.pusher.full_name | default: payload.pusher.login }}** pushed {{ payload.commits | size }} commit(s) to `{{ payload.ref }}`: 16 + 17 + {% for commit in payload.commits %} 18 + - `{{ commit.id | slice: 0, 7 }}` {{ commit.message }} — {{ commit.author.name }} 19 + {% endfor %} 20 + 21 + Summarize what changed across these commits and whether any follow-up is warranted. 22 + {% endif %} 23 + 24 + {% if headers["x-gitea-event"] == "pull_request" %} 25 + Pull request **{{ payload.action }}**: [#{{ payload.number }} {{ payload.pull_request.title }}]({{ payload.pull_request.html_url }}) 26 + 27 + - Opened by: **{{ payload.pull_request.user.login }}** 28 + - Merging `{{ payload.pull_request.head.label }}` → `{{ payload.pull_request.base.label }}` 29 + - State: {{ payload.pull_request.state }} 30 + 31 + {{ payload.pull_request.body }} 32 + 33 + Summarize the intent of this pull request and note any action required. 34 + {% endif %} 35 + 36 + {% if headers["x-gitea-event"] == "issues" %} 37 + Issue **{{ payload.action }}**: [#{{ payload.issue.number }} {{ payload.issue.title }}]({{ payload.issue.html_url }}) 38 + 39 + - Opened by: **{{ payload.issue.user.login }}** 40 + {% if payload.issue.labels %} 41 + - Labels: {% for label in payload.issue.labels %}{{ label.name }}{% unless forloop.last %}, {% endunless %}{% endfor %} 42 + {% endif %} 43 + 44 + {{ payload.issue.body }} 45 + 46 + Summarize this issue and determine whether any immediate action or response is needed. 47 + {% endif %} 48 + 49 + {% if headers["x-gitea-event"] == "issue_comment" %} 50 + **{{ payload.comment.user.login }}** commented on [#{{ payload.issue.number }} {{ payload.issue.title }}]({{ payload.issue.html_url }}): 51 + 52 + {{ payload.comment.body }} 53 + 54 + Note this comment and whether it indicates a blocker, a resolution, or a request for action. 55 + {% endif %} 56 + 57 + {% if headers["x-gitea-event"] == "release" %} 58 + Release **{{ payload.action }}**: [{{ payload.release.tag_name }}]({{ payload.release.html_url }}) 59 + 60 + - Name: {{ payload.release.name }} 61 + - Pre-release: {{ payload.release.prerelease }} 62 + 63 + {{ payload.release.body }} 64 + 65 + Note this release and whether any follow-up tasks are needed (e.g. deployment, announcements, or documentation). 66 + {% endif %}
+54
examples/lures/github.lure
··· 1 + --- 2 + verify: 3 + hmac: 4 + header: X-Hub-Signature-256 5 + prefix: "sha256=" 6 + secret: $GITHUB_WEBHOOK_SECRET 7 + payload: 8 + contentType: json 9 + --- 10 + 11 + You have received a GitHub webhook from the **{{ payload.repository.full_name }}** repository. 12 + 13 + Event: `{{ headers["x-github-event"] }}` 14 + 15 + {% if headers["x-github-event"] == "push" %} 16 + **{{ payload.pusher.name }}** pushed {{ payload.commits | size }} commit(s) to `{{ payload.ref }}`: 17 + 18 + {% for commit in payload.commits %} 19 + - `{{ commit.id | slice: 0, 7 }}` {{ commit.message }} — {{ commit.author.name }} 20 + {% endfor %} 21 + 22 + Summarize what changed across these commits and whether any follow-up is warranted (e.g. deployment, documentation update, or review). 23 + {% endif %} 24 + 25 + {% if headers["x-github-event"] == "pull_request" %} 26 + Pull request **{{ payload.action }}**: [#{{ payload.pull_request.number }} {{ payload.pull_request.title }}]({{ payload.pull_request.html_url }}) 27 + 28 + - Opened by: **{{ payload.pull_request.user.login }}** 29 + - Merging `{{ payload.pull_request.head.ref }}` → `{{ payload.pull_request.base.ref }}` 30 + - Status: {{ payload.pull_request.state }}{% if payload.pull_request.draft %} (draft){% endif %} 31 + 32 + {{ payload.pull_request.body }} 33 + 34 + Summarize the intent of this pull request and note any action required based on its current state. 35 + {% endif %} 36 + 37 + {% if headers["x-github-event"] == "issues" %} 38 + Issue **{{ payload.action }}**: [#{{ payload.issue.number }} {{ payload.issue.title }}]({{ payload.issue.html_url }}) 39 + 40 + - Opened by: **{{ payload.issue.user.login }}** 41 + - Labels: {% for label in payload.issue.labels %}{{ label.name }}{% unless forloop.last %}, {% endunless %}{% endfor %} 42 + 43 + {{ payload.issue.body }} 44 + 45 + Summarize this issue and determine whether any immediate action or response is needed. 46 + {% endif %} 47 + 48 + {% if headers["x-github-event"] == "pull_request_review" %} 49 + **{{ payload.review.user.login }}** submitted a **{{ payload.review.state }}** review on [#{{ payload.pull_request.number }} {{ payload.pull_request.title }}]({{ payload.pull_request.html_url }}). 50 + 51 + {{ payload.review.body }} 52 + 53 + Note the outcome of this review and whether the pull request is now ready to merge, needs further changes, or requires discussion. 54 + {% endif %}
+54
examples/lures/linear.lure
··· 1 + --- 2 + verify: 3 + hmac: 4 + header: Linear-Signature 5 + secret: $LINEAR_WEBHOOK_SECRET 6 + payload: 7 + contentType: json 8 + --- 9 + 10 + You have received a Linear webhook. 11 + 12 + Event: `{{ payload.type }}` / `{{ payload.action }}` 13 + 14 + {% if payload.type == "Issue" %} 15 + Issue **{{ payload.action }}**: [{{ payload.data.identifier }} {{ payload.data.title }}]({{ payload.data.url }}) 16 + 17 + - Team: **{{ payload.data.team.name }}** 18 + - State: {{ payload.data.state.name }} 19 + - Priority: {% case payload.data.priority %}{% when 0 %}None{% when 1 %}Urgent{% when 2 %}High{% when 3 %}Medium{% when 4 %}Low{% endcase %} 20 + {% if payload.data.assignee %}- Assignee: **{{ payload.data.assignee.name }}**{% endif %} 21 + {% if payload.data.cycle %}- Cycle: {{ payload.data.cycle.name }}{% endif %} 22 + 23 + {{ payload.data.description }} 24 + 25 + Summarize this issue update and note any action required, such as following up with the assignee or adjusting priority. 26 + {% endif %} 27 + 28 + {% if payload.type == "Comment" %} 29 + **{{ payload.data.user.name }}** commented on [{{ payload.data.issue.identifier }} {{ payload.data.issue.title }}]({{ payload.data.issue.url }}): 30 + 31 + {{ payload.data.body }} 32 + 33 + Summarize this comment in context of the issue and note whether it indicates a blocker, a decision, or a request for action. 34 + {% endif %} 35 + 36 + {% if payload.type == "Project" %} 37 + Project **{{ payload.action }}**: **{{ payload.data.name }}** 38 + 39 + - State: {{ payload.data.state }} 40 + {% if payload.data.description %} 41 + {{ payload.data.description }} 42 + {% endif %} 43 + 44 + Note this project update and whether it affects any related issues or priorities. 45 + {% endif %} 46 + 47 + {% if payload.type == "Cycle" %} 48 + Cycle **{{ payload.action }}**: **{{ payload.data.name }}** ({{ payload.data.startsAt | slice: 0, 10 }} – {{ payload.data.endsAt | slice: 0, 10 }}) 49 + 50 + - Team: **{{ payload.data.team.name }}** 51 + - Progress: {{ payload.data.completedIssueCountHistory | last }} of {{ payload.data.issueCountHistory | last }} issues completed 52 + 53 + Note this cycle update and whether any issues need attention before the cycle ends. 54 + {% endif %}
+44
examples/lures/omi.lure
··· 1 + --- 2 + verify: 3 + literal: 4 + query: uid 5 + secret: $OMI_USER_ID 6 + payload: 7 + contentType: json 8 + --- 9 + 10 + You have received an Omi memory webhook. 11 + 12 + {% if payload.type == "memory_created" or payload.type == "memory_processing_started" %} 13 + A new memory has been created. 14 + 15 + **Summary:** {{ payload.memory.structured.overview }} 16 + 17 + {% if payload.memory.structured.title %} 18 + **Title:** {{ payload.memory.structured.title }} 19 + {% endif %} 20 + 21 + {% if payload.memory.structured.action_items and payload.memory.structured.action_items != empty %} 22 + **Action items identified:** 23 + {% for item in payload.memory.structured.action_items %} 24 + - {{ item.description }}{% if item.completed %} ✓{% endif %} 25 + {% endfor %} 26 + {% endif %} 27 + 28 + {% if payload.memory.structured.events and payload.memory.structured.events != empty %} 29 + **Events mentioned:** 30 + {% for event in payload.memory.structured.events %} 31 + - {{ event.title }} ({{ event.start }}) 32 + {% endfor %} 33 + {% endif %} 34 + 35 + Review this memory. If there are open action items, note them clearly and suggest next steps. If events were mentioned, confirm whether they need to be scheduled. 36 + {% endif %} 37 + 38 + {% if payload.type == "memory_updated" %} 39 + A memory has been updated. 40 + 41 + **Summary:** {{ payload.memory.structured.overview }} 42 + 43 + Review the updated memory and note any changes to action items or events that require follow-up. 44 + {% endif %}
+29
examples/lures/tangled.lure
··· 1 + --- 2 + verify: 3 + hmac: 4 + header: X-Tangled-Signature-256 5 + prefix: "sha256=" 6 + secret: $TANGLED_WEBHOOK_SECRET 7 + payload: 8 + contentType: json 9 + --- 10 + 11 + You have received a Tangled webhook. 12 + 13 + Event: `{{ headers["x-tangled-event"] }}` 14 + 15 + {% if headers["x-tangled-event"] == "push" %} 16 + **{{ payload.pusher }}** pushed to `{{ payload.ref }}` in **{{ payload.repository.name }}**. 17 + 18 + - Before: `{{ payload.before | slice: 0, 7 }}` 19 + - After: `{{ payload.after | slice: 0, 7 }}` 20 + 21 + {% if payload.commits %} 22 + Commits: 23 + {% for commit in payload.commits %} 24 + - `{{ commit.id | slice: 0, 7 }}` {{ commit.message }} — {{ commit.author.name }} 25 + {% endfor %} 26 + {% endif %} 27 + 28 + Summarize what changed in this push and whether any follow-up is warranted. 29 + {% endif %}