Skip to content
Merged
Show file tree
Hide file tree
Changes from 113 commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
50847ba
More workbench improvements
michaeljguarino Apr 4, 2026
d688fee
improve resilience
michaeljguarino Apr 5, 2026
c78d0f3
add workbench prompt table, queries
michaeljguarino Apr 5, 2026
eabfe5a
add built-in plural observability tools
michaeljguarino Apr 6, 2026
e285e8c
fix notes tool
michaeljguarino Apr 6, 2026
7f272fc
make panel longer when has conclusion
jsladerman Apr 6, 2026
aa7e4a3
add generated prs treatments
jsladerman Apr 6, 2026
3bf18d3
add treatment for activity prompts
jsladerman Apr 6, 2026
a005d32
fix error handling a bit more
michaeljguarino Apr 6, 2026
102b8ae
fix compile issue
michaeljguarino Apr 6, 2026
abf22df
add agent run activity treatment
jsladerman Apr 6, 2026
830cbc3
add polling to activities
jsladerman Apr 6, 2026
bb282da
add simple md table
jsladerman Apr 6, 2026
70f791d
add workbench job status updating
michaeljguarino Apr 6, 2026
fe12d86
update schema
michaeljguarino Apr 6, 2026
3e34a95
add cancellation mutation
michaeljguarino Apr 7, 2026
9a50b15
keep all activities open by default
jsladerman Apr 7, 2026
36e0c9a
implement plrl metrics search, the ai seems to like to call this appa…
michaeljguarino Apr 7, 2026
1329d1f
small design tweaks
michaeljguarino Apr 7, 2026
dc7e8d5
tune tone of voice for all agents
michaeljguarino Apr 7, 2026
3734d43
more tool guidance
michaeljguarino Apr 7, 2026
dd3f145
update triggers to two separate buttons
maciaszczykm Apr 7, 2026
ddf16a6
split triggers components
maciaszczykm Apr 7, 2026
8de0896
update trigger views styling
maciaszczykm Apr 7, 2026
5ee2519
fix header alignment
maciaszczykm Apr 7, 2026
4b64df9
add matches to form
maciaszczykm Apr 7, 2026
9f5ede9
add issue webhooks query
maciaszczykm Apr 7, 2026
0a312c2
show both observability and issue webhooks in select
maciaszczykm Apr 7, 2026
04085eb
style list items
maciaszczykm Apr 7, 2026
7da089e
enhance webhook trigger form with improved chip icons
maciaszczykm Apr 7, 2026
711e00a
add create new links
maciaszczykm Apr 7, 2026
916c633
tune continue prompt
michaeljguarino Apr 7, 2026
b0362d2
remove icon
maciaszczykm Apr 7, 2026
337b6de
add create issue webhook mutation
maciaszczykm Apr 7, 2026
39c1e05
fix azure webhook handling
michaeljguarino Apr 7, 2026
f195339
add create new webhook form
maciaszczykm Apr 7, 2026
cd41903
add create new webhook buttons and update state management
maciaszczykm Apr 7, 2026
cbeffed
add webhook trigger icons
maciaszczykm Apr 7, 2026
52f4f59
add button
maciaszczykm Apr 7, 2026
d072cfa
use two types of back button
maciaszczykm Apr 7, 2026
4c43bda
more prompting
michaeljguarino Apr 7, 2026
d350bc1
add workbench webhook gql query
michaeljguarino Apr 7, 2026
cb7d0f3
add conclusion activity type, tweak unfurling behavior to reduce spam…
michaeljguarino Apr 7, 2026
430f551
fix initial open state
jsladerman Apr 7, 2026
46a5a34
open new activities by default
jsladerman Apr 7, 2026
8dec0f0
some prompt tweaks
michaeljguarino Apr 7, 2026
2750828
terser labels
michaeljguarino Apr 7, 2026
dae1408
only show plain markdown for conclusion activities
michaeljguarino Apr 7, 2026
4c84150
multiple agent runs in a single coding subagent
michaeljguarino Apr 7, 2026
a50f038
prompt restructuring
michaeljguarino Apr 7, 2026
073b040
more prompt tweaks
michaeljguarino Apr 7, 2026
3ea13cb
adding more built-in plural tools
michaeljguarino Apr 7, 2026
c3b8e90
small tweaks to running status maintenance
michaeljguarino Apr 7, 2026
060fd4f
more prompt tweaks
michaeljguarino Apr 7, 2026
17e3fa5
start refactoring trigger views
maciaszczykm Apr 8, 2026
7ea1c72
refactor crons and webhooks
maciaszczykm Apr 8, 2026
8e0e213
update webhook forms
maciaszczykm Apr 8, 2026
4869f4e
refetch queries
maciaszczykm Apr 8, 2026
3fe7a03
export utils
maciaszczykm Apr 8, 2026
b3c2c2d
use loose rows
maciaszczykm Apr 8, 2026
7b4b715
show webhook icon and rename components
maciaszczykm Apr 8, 2026
68d565f
add setup guide button
maciaszczykm Apr 8, 2026
9f49803
add workbench cron query
michaeljguarino Apr 8, 2026
50f9eec
add webhook docs
maciaszczykm Apr 8, 2026
3d34171
add setup guide panel
maciaszczykm Apr 8, 2026
e527030
add resize grip
maciaszczykm Apr 8, 2026
6dd3cd3
tweak heartbeat logic
michaeljguarino Apr 8, 2026
f588652
reuse existing components
maciaszczykm Apr 8, 2026
1794d10
fix heartbeat func
michaeljguarino Apr 8, 2026
216064a
more prompts
michaeljguarino Apr 8, 2026
4c83d46
add cron mutation and update persisted queries
maciaszczykm Apr 8, 2026
2a77b28
use new query
maciaszczykm Apr 8, 2026
938de8e
fix loading skeletons
maciaszczykm Apr 8, 2026
65734a3
add todo
maciaszczykm Apr 8, 2026
c0e6f86
update summary query
maciaszczykm Apr 8, 2026
70f687d
add triggers summary
maciaszczykm Apr 8, 2026
f58c642
update triggers styling and placement
maciaszczykm Apr 8, 2026
a05d328
update triggers summary styling
maciaszczykm Apr 8, 2026
f21b51f
add multi-run associations with coding subagent
michaeljguarino Apr 8, 2026
d92659d
add workbench text streaming
michaeljguarino Apr 8, 2026
b930d5c
support switching between global side panels
jsladerman Apr 8, 2026
6787418
different open behavior
michaeljguarino Apr 8, 2026
c862bbb
fix open behavior
michaeljguarino Apr 8, 2026
55502b0
fix auto-close
michaeljguarino Apr 8, 2026
39e3c74
tune up subagent iterations
michaeljguarino Apr 8, 2026
0b4844d
tweak open behavior again
michaeljguarino Apr 8, 2026
0806b3f
working activity opening behavior
michaeljguarino Apr 8, 2026
2949879
cluster/list upgradeability info for workbenches
michaeljguarino Apr 8, 2026
b5f56b7
tweak finch pools
michaeljguarino Apr 8, 2026
e27e90c
add a bit more logging on possible errors
michaeljguarino Apr 9, 2026
311a04b
fix missing button
jsladerman Apr 9, 2026
d58736f
add fetchPolicy to webhooks queries for improved caching
maciaszczykm Apr 9, 2026
6a93537
add workbench issues and alerts views
maciaszczykm Apr 9, 2026
a477b56
add status field to WorkbenchJob in GraphQL fragments and queries
maciaszczykm Apr 9, 2026
730ce23
add job status icons to WorkbenchIssuesTable for improved status visi…
maciaszczykm Apr 9, 2026
441fd71
update alerts table
maciaszczykm Apr 9, 2026
29660e9
add user prompt input to workbench job
jsladerman Apr 9, 2026
5d2f1bf
fix message reprompting not transitioning job state
michaeljguarino Apr 9, 2026
6b039cd
add ability to filter jobs by alerts/issues present
michaeljguarino Apr 9, 2026
c7e0824
prompt eng
michaeljguarino Apr 9, 2026
37edb96
fix submit behavior on prompt input
michaeljguarino Apr 9, 2026
bbe6a60
fix lint
michaeljguarino Apr 9, 2026
395f7a9
don't show chat at all if job is complete
jsladerman Apr 9, 2026
1b41ce6
Revert "don't show chat at all if job is complete"
michaeljguarino Apr 9, 2026
07261d0
more pool tweaking
michaeljguarino Apr 9, 2026
ad7a98b
fix submit logic
michaeljguarino Apr 9, 2026
8eb27fe
don't show when running
michaeljguarino Apr 9, 2026
c165127
drop unused import
michaeljguarino Apr 9, 2026
ebb0572
fix finch config
michaeljguarino Apr 9, 2026
fb62cd9
tune job heartbeating, and crash detection, eliminate likely cause of…
michaeljguarino Apr 9, 2026
4e5680c
prompt display logic
michaeljguarino Apr 9, 2026
972c753
add basic job side panel
jsladerman Apr 10, 2026
895fb54
refetch workbench job after sending message
jsladerman Apr 10, 2026
6302c9c
fix user prompt spacing visual issus
michaeljguarino Apr 10, 2026
e53389b
fix md table squeezing and user prompt spacing
jsladerman Apr 10, 2026
8263f28
start adding side panel
maciaszczykm Apr 10, 2026
97d0a2a
add create buttons
maciaszczykm Apr 10, 2026
7605053
update add buttons
maciaszczykm Apr 10, 2026
21eaa9f
configure scrolling areas
maciaszczykm Apr 10, 2026
b66b0b6
add add icon
maciaszczykm Apr 10, 2026
3929746
add more icons
maciaszczykm Apr 10, 2026
438018f
update headers and action buttons
maciaszczykm Apr 10, 2026
036ba03
move action items
maciaszczykm Apr 10, 2026
cd622ee
export webhook icon util
maciaszczykm Apr 10, 2026
8c19eb8
display crons in side panel
maciaszczykm Apr 10, 2026
d952d2b
update side panel styling
maciaszczykm Apr 10, 2026
c460b55
style webhooks in side panel
maciaszczykm Apr 10, 2026
5b93656
add tools field to WorkbenchTriggersSummary query and update persiste…
maciaszczykm Apr 10, 2026
66a9e9f
show tools
maciaszczykm Apr 10, 2026
a6b6ab3
update buttons in side panel
maciaszczykm Apr 10, 2026
6f820d6
implement prompt saving
maciaszczykm Apr 10, 2026
fa48214
add WorkbenchPrompt queries and mutations to GraphQL schema
maciaszczykm Apr 10, 2026
ccecc2a
add saved prompts CRUD views
maciaszczykm Apr 10, 2026
e51cc13
fix spacings
maciaszczykm Apr 10, 2026
1bdd250
fix fe build
michaeljguarino Apr 10, 2026
7aa709a
small tweaks to support scalable kas
michaeljguarino Apr 10, 2026
7f89653
regen schema
michaeljguarino Apr 10, 2026
c7dd478
some prompt eng
michaeljguarino Apr 10, 2026
eb47482
add saved prompts overlay
maciaszczykm Apr 10, 2026
4b55a6e
more prompt eng
michaeljguarino Apr 10, 2026
ee1c208
refactor input
maciaszczykm Apr 10, 2026
c2a443b
Merge remote-tracking branch 'origin/more-workbench-improvements' int…
maciaszczykm Apr 10, 2026
c5e0d21
add functionality to run saved prompts with a new mutation
maciaszczykm Apr 10, 2026
d3b0631
add outside click handler to close saved prompts overlay
maciaszczykm Apr 10, 2026
b2bdffb
make user prompts right aligned in prod
jsladerman Apr 10, 2026
0963027
add thought metrics persistence
michaeljguarino Apr 10, 2026
12f2ccb
more scalable workbench job pruning
michaeljguarino Apr 10, 2026
16ffa68
more tool tweaks
michaeljguarino Apr 10, 2026
e0c6b61
fix some stuff
michaeljguarino Apr 10, 2026
c07332f
maybe fix job progress streaming
jsladerman Apr 10, 2026
c868d84
just log job progress
jsladerman Apr 10, 2026
6dfc629
fix create webhook form
michaeljguarino Apr 10, 2026
e58cf41
potentially fix progress
michaeljguarino Apr 10, 2026
67752dd
add workbench_job_thought_delta
michaeljguarino Apr 10, 2026
2afe078
graphql codegen
michaeljguarino Apr 10, 2026
cf706b1
fix a few setup guides
michaeljguarino Apr 10, 2026
039ffc7
add linear pr-linking hint
michaeljguarino Apr 10, 2026
02db129
add streaming ui
jsladerman Apr 10, 2026
ed7eaa6
teaks
michaeljguarino Apr 10, 2026
7737ce1
more tweaks
michaeljguarino Apr 10, 2026
3ade51b
add some logging
michaeljguarino Apr 10, 2026
305c586
another debounce
michaeljguarino Apr 10, 2026
5f1eedb
more logging
michaeljguarino Apr 11, 2026
ea2f50b
some more callbacks
michaeljguarino Apr 11, 2026
65db5e7
rm io inspects
michaeljguarino Apr 11, 2026
1ad6daa
more prompt
michaeljguarino Apr 11, 2026
df9d90e
fix cluster sideload
michaeljguarino Apr 11, 2026
62925e6
implement workbenchJobActivity query
michaeljguarino Apr 11, 2026
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
32 changes: 32 additions & 0 deletions assets/design-system/src/components/icons/PaperCheckIcon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import createIcon from './createIcon'

export default createIcon(({ size, color }) => (
<svg
width={size}
height={size}
viewBox="0 0 12 12"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M8.25 10.1924L7.27875 9.22115L6.75 9.74994L8.25 11.2499L11.25 8.24994L10.7212 7.72119L8.25 10.1924Z"
fill={color}
/>
<path
d="M6 6.375H3.375V7.125H6V6.375Z"
fill={color}
/>
<path
d="M7.875 4.5H3.375V5.25H7.875V4.5Z"
fill={color}
/>
<path
d="M7.875 2.625H3.375V3.375H7.875V2.625Z"
fill={color}
/>
<path
d="M6 11.25H2.25C1.83637 11.25 1.5 10.9136 1.5 10.5V1.5C1.5 1.08645 1.83637 0.75 2.25 0.75H9C9.41363 0.75 9.75 1.08645 9.75 1.5V7.125H9V1.5H2.25V10.5H6V11.25Z"
fill={color}
/>
</svg>
))
1 change: 1 addition & 0 deletions assets/design-system/src/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ export { default as PackageIcon } from './components/icons/PackageIcon'
export { default as PadlockIcon } from './components/icons/PadlockIcon'
export { default as PadlockLockedIcon } from './components/icons/PadlockLockedIcon'
export { default as PagerdutyLogoIcon } from './components/icons/PagerdutyLogoIcon'
export { default as PaperCheckIcon } from './components/icons/PaperCheckIcon'
export { default as PaperclipIcon } from './components/icons/PaperclipIcon'
export { default as PauseIcon } from './components/icons/PauseIcon'
export { default as PencilIcon } from './components/icons/PencilIcon'
Expand Down
12 changes: 8 additions & 4 deletions assets/design-system/src/utils/urls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,19 @@ export function isValidRepoUrl(url: string): boolean {
return false
}

export function prettifyRepoUrl(repoUrl: string) {
const [owner, name] = repoUrl
export function prettifyRepoUrl(
repoUrl: string,
showFullPath: boolean = false
) {
const fullPath = repoUrl
.trim()
.replace(/^git@[^:]+:/, '')
.replace(/^ssh:\/\/[^/]+\/?/, '')
.replace(/^https?:\/\/[^/]+\/?/, '')
.replace(/^\/+/, '')
.replace(/\.git$/, '')
.split('/')

return owner && name ? `${owner}/${name}` : repoUrl
const [owner, name] = fullPath.split('/')

return showFullPath ? fullPath : owner && name ? `${owner}/${name}` : repoUrl
}
54 changes: 54 additions & 0 deletions assets/public/setup-guides/webhooks/asana.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Asana Webhook Setup for Plural

Generate markdown documentation for creating a webhook in Asana against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts, new tickets, and workflow updates.

## 1. Create the webhook in Plural

In Plural, go to the webhook creation flow and choose:

- Type: Ticketing
- Provider: ASANA

Fill in:

- Name: a clear name like Asana Production Tickets
- URL: the callback URL Plural gives you
- Secret: a strong shared secret

Save the webhook in Plural.

## 2. Register URL and secret in Asana

In Asana, open your app or integration settings and create a webhook subscription:

- Target URL: paste the Plural webhook URL
- Secret/token field: paste the same secret from Plural

If Asana requires signing secrets per endpoint, ensure the secret is bound to this exact URL.

## 3. Configure triggers to send events to Plural

Enable triggers that map to operational ticketing activity:

- New task/ticket created
- Task moved to incident/alerts project
- Critical priority changes
- Status transitions for incident-related work

Prefer project-level or workspace-level filters so only relevant events are sent.

## 4. Validate delivery

Trigger a test event in Asana (for example create a test ticket) and verify in Plural:

- request is received
- signature/secret validation succeeds
- event appears in webhook activity

## 5. Troubleshooting

If events fail:

- confirm URL exactly matches the Plural endpoint
- rotate and re-enter the secret on both sides
- ensure the selected project/workspace scope includes the event source
42 changes: 42 additions & 0 deletions assets/public/setup-guides/webhooks/datadog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Datadog Webhook Setup for Plural

Generate markdown documentation for creating a webhook in Datadog against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts and monitor state changes.

## 1. Create the webhook in Plural

In Plural configure:

- Type: Observability
- Provider: DATADOG
- Name: for example Datadog Production Alerts
- Secret: shared secret used for verification

Plural stores the secret and gives you the target URL (if required by your flow).

## 2. Register URL and secret in Datadog

In Datadog integrations/webhooks:

- Target URL: set to the Plural webhook URL
- Secret/signing token: set to the same secret from Plural

If custom headers are required, keep them aligned with your Plural validation policy.

## 3. Configure alert triggers

Enable triggers for relevant alert lifecycle events:

- monitor alert triggered
- monitor recovered
- incident state changes
- high-priority signal transitions

Scope notifications to production monitors or incident-critical tags.

## 4. Validate delivery

Trigger a test monitor alert in Datadog and verify in Plural:

- event received and authenticated
- payload parsed
- trigger evaluation sees alert state correctly
47 changes: 47 additions & 0 deletions assets/public/setup-guides/webhooks/github.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# GitHub Webhook Setup for Plural

Generate markdown documentation for creating a webhook in GitHub against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts, new tickets, and issue lifecycle updates.

## 1. Create the webhook in Plural

Create a new webhook in Plural with:

- Type: Ticketing
- Provider: GITHUB
- URL: Plural callback URL
- Secret: shared secret used for signature verification

## 2. Register URL and secret in GitHub

In GitHub repository or organization settings:

- go to Webhooks
- click Add webhook
- Payload URL: paste the Plural URL
- Secret: paste the same secret configured in Plural
- Content type: application/json

## 3. Configure GitHub events

Select events relevant to ticketing and alerts, for example:

- Issues (opened, edited, closed, reopened)
- Issue comments
- Label changes
- Projects if your team routes alert tickets through boards

Use either individual events or Send me everything only in non-production environments.

## 4. Test and verify

Use GitHub's ping/test delivery and also create a test issue. In Plural, verify:

- delivery succeeded (2xx)
- event parsed successfully
- issue/ticket event appears in webhook history

## 5. Security recommendations

- use a unique secret per webhook
- rotate periodically
- restrict admin rights for webhook management
46 changes: 46 additions & 0 deletions assets/public/setup-guides/webhooks/gitlab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# GitLab Webhook Setup for Plural

Generate markdown documentation for creating a webhook in GitLab against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts, new tickets, and incident issue updates.

## 1. Create the webhook in Plural

In Plural create:

- Type: Ticketing
- Provider: GITLAB
- URL: incoming webhook URL from Plural
- Secret: shared secret

## 2. Register URL and secret in GitLab

In GitLab project/group settings under Webhooks:

- URL: paste the Plural URL
- Secret token: paste the same secret from Plural
- SSL verification: keep enabled unless your environment requires otherwise

## 3. Configure GitLab triggers

Enable events that correspond to ticket lifecycle:

- Issues events
- Notes/comments events (optional)
- Labels changes (if used for severity)
- Confidential issue updates where applicable

For alert-driven workflows, scope to projects where alert tickets are created.

## 4. Test the integration

Use GitLab Test webhook for Issues events and then open a real test issue.

Check Plural for:

- successful request validation
- processed event payload
- activity logs with expected event type

## 5. Operational tips

- keep separate webhooks for staging and production projects
- apply narrow event filters to reduce noise
41 changes: 41 additions & 0 deletions assets/public/setup-guides/webhooks/grafana.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Grafana Webhook Setup for Plural

Generate markdown documentation for creating a webhook in Grafana against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts and alert rule state transitions.

## 1. Create the webhook in Plural

Create a webhook in Plural with:

- Type: Observability
- Provider: GRAFANA
- Secret: shared webhook secret

Use the URL provided by Plural for incoming events.

## 2. Register URL and secret in Grafana

In Grafana Alerting contact points:

- Contact point type: Webhook
- URL: paste the Plural webhook URL
- Secret/signature key: paste the Plural secret

Set optional fields (headers, auth) only if your policy requires them.

## 3. Configure Grafana triggers

Bind the contact point to notification policies and routes for:

- firing alerts
- resolved alerts
- selected folders/labels for incident-relevant rules

Route only high-signal alerts to avoid noisy webhook traffic.

## 4. Validate integration

Use Grafana test notification and a real alert simulation. In Plural verify:

- request accepted
- signature check passed
- firing and resolved events are visible
45 changes: 45 additions & 0 deletions assets/public/setup-guides/webhooks/jira.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Jira Webhook Setup for Plural

Generate markdown documentation for creating a webhook in Jira against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts, new tickets, and issue transitions.

## 1. Create the webhook in Plural

Configure a webhook in Plural with:

- Type: Ticketing
- Provider: JIRA
- URL: Plural callback endpoint
- Secret: shared signing secret

## 2. Register URL and secret in Jira

In Jira admin settings for webhooks:

- Endpoint URL: paste Plural URL
- Secret or authentication field: paste the Plural secret (if available in your Jira deployment)
- Authentication: configure additional auth headers only if your policy requires it

## 3. Configure Jira trigger events

Enable events commonly used for alert workflows:

- Issue created
- Issue updated
- Issue transitioned
- Issue reopened/resolved

If supported, apply JQL filter to include only incident/alert projects and severities.

## 4. Validate end-to-end

Create and transition a test issue in Jira. In Plural confirm:

- webhook accepted
- signature/secret check passed
- trigger appears with expected metadata

## 5. Best practices

- keep dedicated Jira webhook per environment
- document JQL filters with your on-call process
- rotate secret after team ownership changes
45 changes: 45 additions & 0 deletions assets/public/setup-guides/webhooks/linear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Linear Webhook Setup for Plural

Generate markdown documentation for creating a webhook in Linear against plural. Plural allows a webhook to have a url and secret, you need to explain to the user how to register those, and how to configure the appropriate triggers so plural can receive events from alerts, new tickets, and issue status updates.

## 1. Create the webhook in Plural

In Plural, create webhook:

- Type: Ticketing
- Provider: LINEAR
- URL: Plural endpoint URL
- Secret: shared secret for request verification

## 2. Register URL and secret in Linear

In Linear workspace settings under API/Webhooks:

- Webhook URL: paste Plural URL
- Secret/signing key: paste same secret from Plural

If Linear signs payloads, make sure Plural validates against this exact secret.

## 3. Configure event subscriptions

Enable the events that should drive Plural automation:

- Issue created (new tickets)
- Issue updated
- Priority changed
- State changed (triaged/in progress/done)

Use team-based filters if only certain teams should send webhook data.

## 4. Verify integration

Create a test issue and transition its state. In Plural verify:

- request accepted
- event recorded
- downstream automation or trigger evaluation runs correctly

## 5. Maintenance

- keep webhook ownership documented in your runbook
- rotate secrets on schedule
Loading
Loading