Documentation

Deviera Docs

Everything you need to detect engineering friction, automate responses, and ship faster. Use the sidebar to jump to any section.

#Getting Started

#Overview

Deviera monitors your GitHub and GitLab repositories in real time and automatically creates Linear issues, Jira tickets, GitLab issues, sends Slack messages, and logs signals whenever friction events occur — CI failures, stale PRs, flaky tests, deployment failures, and more.

The core loop is: GitHub/GitLab event → Automation rule fires → Action executes → Signal recorded. Your Friction Score aggregates all signals into a single team health metric you can track over time.

#Quick start (5 min)

  1. 1Sign up at deviera.dev — free 14-day trial, no credit card required.
  2. 2Install the Deviera GitHub App on your organisation (or connect GitLab via OAuth).
  3. 3Select the repositories you want Deviera to monitor.
  4. 4Connect Linear, Jira, or both for automatic issue creation.
  5. 5Enable one of the 65 built-in automation presets (e.g. "CI Failure → Linear Issue").
  6. 6Trigger a CI failure or open a PR — your first signal will appear within seconds.

Most teams see their first signal within 30 minutes of completing setup. The onboarding wizard inside the app walks you through every step.

/screenshots/TODO-onboarding-wizard.webp

The onboarding wizard walks you through GitHub install, repo selection, and your first automation.

#Connect GitHub

Deviera uses a GitHub App (not a personal access token) for secure, granular permissions. The app requests read access to code, metadata, checks, pull requests, and issues — plus write access to issues and pull-request comments for write-back actions.

  1. 1Go to Dashboard → Integrations → GitHub.
  2. 2Click "Install GitHub App". You'll be redirected to GitHub.
  3. 3Choose the organisation or personal account, then select which repositories to grant access to.
  4. 4After installation, return to the dashboard — Deviera will begin listening for webhook events immediately.

#Your first automation

Navigate to Dashboard → Automations → New. Pick a preset (e.g. "CI Failure Alert") or build from scratch. Every automation has up to four parts:

Trigger

The event that starts evaluation

Conditions

Optional filters — branch, repo, streak count

Primary action

What Deviera does — create issue, notify, assign

Second action

Optional — fires after the primary action succeeds

#GitHub Integration

#GitHub App install

The Deviera GitHub App is installed at the organisation or user level. Once installed, GitHub delivers webhook events to Deviera for every repository you've granted access to. You can update repository access at any time from your GitHub App settings.

Deviera never stores your source code. Webhooks deliver metadata only (commit SHAs, branch names, check run results). Full content is never transmitted.

#Webhooks

Webhooks are delivered by GitHub to Deviera's endpoint and verified using HMAC-SHA256 signatures. Supported event types:

EventTriggers
workflow_run (completed)github_ci_failed, github_ci_passed, ci_flaky_detected
pull_request (opened/closed/merged)github_pr_opened, github_pr_merged, github_pr_closed
issues (opened/closed/labeled)github_issue_opened, github_issue_closed, github_issue_labeled
pushgithub_push, github_commit_todo
Vercel API polling (every 5 min)vercel_deployment_ready, vercel_deployment_failed, vercel_deployment_created

#Monitored repositories

After installing the GitHub App, go to Dashboard → Integrations → GitHub and open the "Monitored Repositories" section. Check or uncheck repos to control which ones Deviera actively processes. Unchecked repos receive webhooks but events are silently discarded.

/screenshots/TODO-monitored-repos.webp

Choose exactly which repos Deviera monitors — granular control per repository.

#GitHub write-back

All plans support GitHub write-back actions. Automations can:

  • Create a GitHub Issue when a CI failure exceeds a streak threshold
  • Close a GitHub Issue when CI passes again (auto-resolution)
  • Post a comment on a PR when it goes stale

#Automations

#How automations work

An automation is a trigger → condition → action (→ optional second action) pipeline stored in the database and evaluated every time a matching GitHub or GitLab event arrives. Automations run asynchronously via a BullMQ job queue — webhook responses always return in <50ms regardless of action complexity.

#Triggers

FieldTypeRequiredDescription
github_ci_failedstringyesGitHub workflow run completed with failure
github_ci_passedstringyesGitHub workflow run completed successfully
github_pr_openedstringyesPull request opened or re-opened
github_pr_mergedstringyesPull request merged into target branch
github_pr_closedstringyesPull request closed without merging
github_pr_stalestringyesPR has had no activity for N hours (scanned every 6h)
github_issue_openedstringyesNew GitHub issue created
github_issue_closedstringyesGitHub issue closed
github_issue_labeledstringyesLabel added to a GitHub issue
github_pushstringyesCode pushed to any branch
github_commit_todostringyesTODO or FIXME detected in commit messages
vercel_deployment_createdstringyesVercel deployment started
vercel_deployment_readystringyesVercel deployment succeeded
vercel_deployment_failedstringyesVercel deployment failed
ci_flaky_detectedstringyesCI alternating pass/fail pattern detected (flaky test)
gitlab_ci_failedstringyesGitLab pipeline completed with failure
gitlab_ci_passedstringyesGitLab pipeline completed successfully
gitlab_mr_openedstringyesGitLab merge request opened
gitlab_mr_stalestringyesGitLab MR has had no activity for N hours
gitlab_pushstringyesCode pushed to a GitLab repository

#Conditions

Conditions are optional filters applied after a trigger fires. All conditions must pass for the action to execute.

FieldTypeRequiredDescription
repositorystringnoOnly fire for a specific repository (e.g. "owner/repo")
branchstringnoOnly fire on this branch (e.g. "main")
labelsstring[]noOnly fire when any of these labels are present on the issue/PR
failureStreaknumbernoMinimum consecutive CI failures before firing
staleHoursnumbernoPR must be open for at least N hours (default 48)
failedMinutesnumbernoDeployment must have been failing for N minutes

#Actions

FieldTypeRequiredDescription
create_linear_issueactionyesCreate a Linear issue with team, priority, labels, and title/description templates
create_jira_issueactionyesCreate a Jira issue with project, type, priority, and labels (Pro+)
create_gitlab_issueactionyesCreate a GitLab issue with project, labels, and confidential flag (Team+)
create_github_issueactionyesOpen a GitHub issue in the triggering repository
close_github_issueactionyesClose a GitHub issue
post_pr_commentactionyesPost a comment on the GitHub PR that triggered the event
post_mr_commentactionyesPost a comment on the GitLab MR that triggered the event (Team+)
send_notificationactionyesSend an email notification via Brevo (Pro+)
send_slack_messageactionyesPost to a Slack Incoming Webhook (Team+)
assign_useractionyesAssign a workspace member in the database

Every automation supports a second action. If the primary action succeeds, the second action fires automatically in the same job. Use this to, for example, create a Linear issue and post a Slack message in one rule — no extra automation needed. The second action is optional and can be set to any of the 10 action types above.

All issue-creation actions (create_linear_issue, create_jira_issue, create_gitlab_issue, create_github_issue) support template variables: {repo.name}, {repo.branch}, {workflow.name}, {commit.sha}, {pr.title}, {deployment.url}, and more. Use these in the title and description fields.

#Presets & templates

Deviera ships 65 built-in automation presets covering the most common friction patterns across GitHub, GitLab, Linear, Jira, and Slack. Access them at Dashboard → Automations → Templates. Presets can be used as-is or cloned and customised. The "For You" tab surfaces presets relevant to your connected integrations.

Bug Tracker
PR Review Queue
CI Failure Alert
Deployment Verification
Deployment Failure Alert
Code TODO Tracker
Sprint Task Sync
PR Merge Changelog
Main Branch Push
Flaky Test Alert
Issue Resolution Log
Issue Inbox
Deploy Started
Merge Confirmation
Stale PR Tracker
Stale PR Alert (Proactive)
CI Recovery Notice
PR Closed Without Merge
Vercel Deploy Started → Linear
Jira Bug Tracker
Jira CI Failure Task
Jira Issue Inbox
Jira PR Review Queue
Jira PR Merge Log
Jira PR Closed Without Merge
Jira Stale PR Alert
Jira Push Audit
Jira TODO Tracker
Jira Flaky Test Task
Jira Deployment Failure
Jira Deployment Verification
Jira GitLab Stale MR
GitLab Push → Jira Audit
GitLab MR Review → Jira
GitLab CI Failure → Jira
GitLab Issue on Pipeline Fail
GitLab MR Review Issue
GitLab Stale MR Issue
GitLab Push Audit Issue
GitLab CI Flaky Test Issue
GitLab Bug Tracker
GitLab CI Failure (GitHub)
GitLab Stale PR Issue
Slack Alert on CI Failure
Deployment Failure → Slack
Deployment Ready → Slack
GitLab Pipeline Failure → Slack
Bug Label → Slack Alert
GitHub Push → Slack
GitLab Push → Slack
GitHub CI Passed → Slack
GitLab CI Passed → Slack
GitLab MR Opened → Slack
Mirror Issue to GitHub
Flaky Test → Linear Issue
PR Merged → Close GitHub Issue
Bug Label → Mirror to GitHub
Vercel Deploy Failure → GitHub Issue
Welcome New MR
Stale MR Reminder
GitLab CI Recovery Notice
GitLab Main Branch Push

#Cooldowns & deduplication

To prevent alert storms, every automation has a configurable cooldown (default: 60 minutes). If the same automation fires within the cooldown window, the action is skipped and the event is logged as deduplicated.

Cross-provider title deduplication prevents two different automations from creating duplicate issues (across Linear, Jira, and GitLab) for the same root cause within a 7-day window. The dedup block is automatically lifted when the issue is closed or resolved in the external tracker — so if a problem recurs after being fixed, a fresh ticket is created immediately. When webhooks are not configured for a provider, the 7-day window acts as a fallback so long-standing open issues don't block re-firing indefinitely.

#Signal Feed

#What is a signal?

A signal is an AutomationEvent record created whenever an automation fires. It captures the trigger, the outcome (Linear issue URL, minutes saved), severity, and a dedup key for correlation. Signals are the source of truth for your Friction Score and the Value Dashboard.

#Severity levels

critical

CI failures on main/master, Vercel production deployments down. Immediate attention required.

high

CI failures on non-main branches, stale PRs, issues labeled "bug".

medium

PR opened, issue opened, other labeled issues.

low

Code pushed, TODO commits, deployment created or ready.

#Public Signal Wall

The Signal Wall is a public, read-only view of your workspace's signal activity. Enable it in Dashboard → Workspace Settings and share the URL with stakeholders or embed it in your team wiki — no login required for viewers.

The public Signal Wall is a Team+ feature. Enable it in Dashboard → Workspace Settings, set a unique slug, and share the URL — no login required for viewers. The page includes OpenGraph meta tags for link previews.

#Friction Score

#How it's computed

The Friction Score is a 0–100 composite metric calculated from signal activity in the last 30 days. Lower is better.

formula
FrictionScore = (
  (critical_signals × 4)
  + (high_signals × 2)
  + (medium_signals × 1)
) / maxExpected × 100

Signals are weighted by severity (critical×4, high×2, medium×1). Low-severity signals are excluded from the score. The score is capped at 100 and normalised against maxExpected — a baseline derived from the number of signals in the window.

#Interpreting your score

0 – 20Excellent

Minimal friction. Your team ships with very few interruptions.

21 – 45Good

Normal friction for an active team. A few areas to watch.

46 – 70Elevated

Friction is accumulating. Review which triggers are firing most.

71 – 100Critical

High friction impacting shipping velocity. Immediate action recommended.

#Integrations

#Linear

Deviera uses Linear's OAuth flow to connect your workspace. Once connected, automations can create issues in any team you have access to, with custom titles, descriptions, priority levels, and labels.

  1. 1Go to Dashboard → Integrations → Linear.
  2. 2Click "Connect Linear" — you'll be redirected to Linear's OAuth page.
  3. 3Grant access to your Linear workspace.
  4. 4Return to Deviera and select a default team for issue creation.
  5. 5Labels and priorities are automatically fetched from your Linear workspace.

No setup required for end users. Deviera connects to Linear via OAuth — users click "Connect Linear" and authorise their own Linear workspace. The LINEAR_CLIENT_ID, LINEAR_CLIENT_SECRET, and LINEAR_REDIRECT_URI env vars are configured once by the Deviera operator on Vercel and are not needed by users.

/screenshots/TODO-linear-integration.webp

Linear integration — connect via OAuth, select your team, and labels are fetched automatically.

#Jira

Deviera connects to Jira via Atlassian's OAuth 2.0 flow. Once connected, automations can create structured Jira issues with project mapping, issue type, priority, labels, and description templates. Token refresh is handled automatically.

  1. 1Go to Dashboard → Integrations → Jira.
  2. 2Click "Connect Jira" — you'll be redirected to Atlassian's OAuth consent screen.
  3. 3Authorise access to your Atlassian Cloud site.
  4. 4Return to Deviera and select a default project for issue creation.
  5. 5Issue types and priorities are fetched automatically from your Jira instance.

Jira integration is a Pro plan feature. Automations on the Free plan with the create_jira_issue action will be skipped with a 402 error logged.

When creating automations with the create_jira_issue action, you can configure:

  • Jira project and board mapping per automation rule
  • Issue type selection (Bug, Task, Story, etc.)
  • Priority level (Highest, High, Medium, Low, Lowest)
  • Labels — select from existing project labels
  • Title and description templates with variable interpolation
  • Cross-provider dedup — prevents duplicate issues across Linear and Jira

#GitLab

Deviera integrates with GitLab via OAuth 2.0, supporting both GitLab.com and self-hosted instances (configure via GITLAB_BASE_URL). Once connected, Deviera receives webhook events for pipelines, merge requests, and push events — the same signal detection engine as GitHub.

  1. 1Go to Dashboard → Integrations → GitLab.
  2. 2Click "Connect GitLab" — you'll be redirected to GitLab's OAuth page.
  3. 3Authorise access to your GitLab groups and projects.
  4. 4Return to Deviera — your groups and projects will be listed automatically.
  5. 5Deviera registers webhooks on connected projects to receive events.

GitLab integration is a Team plan feature. Automations on lower plans with GitLab triggers or the create_gitlab_issue action will be skipped.

GitLab supports the following trigger types:

  • gitlab_ci_failed / gitlab_ci_passed — pipeline completion events
  • gitlab_mr_opened — new merge request created
  • gitlab_mr_stale — MR with no activity (proactive scan)
  • gitlab_push — code pushed to any branch

GitLab signals appear in the same Signal Feed as GitHub events, with unified repo health scoring and friction score computation across both providers.

#Slack

Slack integration uses an Incoming Webhook URL — no OAuth required. The webhook is validated before saving by sending a test ping.

  1. 1Create an Incoming Webhook in your Slack workspace (api.slack.com/apps).
  2. 2Copy the webhook URL.
  3. 3Go to Dashboard → Integrations → Slack and paste the URL.
  4. 4Click "Save" — Deviera will test the connection immediately.

Slack notifications are a Team plan feature. Automations on lower plans with the send_slack_message action will be skipped with a 402 error logged.

#Vercel

The Vercel integration captures deployment events (created, ready, failed) via Vercel's API token. Connect once and Deviera polls or receives webhook events for all your projects.

  1. 1Go to Dashboard → Integrations → Vercel.
  2. 2Enter your Vercel API token (create one at vercel.com/account/tokens).
  3. 3Deviera will list your Vercel projects and begin capturing deployment events.
  4. 4Webhook events trigger automations for deployment_created, deployment_ready, and deployment_failed.

#API Reference

#Authentication

All API requests must include an API key in the Authorization header. Generate keys at Dashboard → Settings → API Keys.

bash
curl https://deviera.dev/api/automation-events \
  -H "Authorization: Bearer dvr_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

API keys are shown once at creation. Store them securely — Deviera only stores a SHA-256 hash and cannot recover a lost key. Revoke and regenerate from the dashboard if needed.

/screenshots/TODO-api-keys.webp

API Keys — create scoped keys for automations, events, repos, and workspace access.

#Endpoints

GET/api/automation-events

List automation events (signals). Supports pagination via cursor.

limitnumberMax results (default 50, max 200)
cursorstringPagination cursor from previous response
severitystringFilter by severity: critical | warning | info | resolved
GET/api/automation-events/stats

Aggregate ROI stats — total signals, minutes saved, by severity, Linear issues created.

GET/api/automations

List all automations in the workspace.

POST/api/automations

Create a new automation.

namestringDisplay name
triggerTriggerConfigTrigger type and filter config
actionActionConfigAction type and template config
cooldownMinutesnumberCooldown window (default 60)

#Rate limits

PlanRequests / minRequests / day
Free301,000
Pro605,000
Team12020,000
EnterpriseUnlimitedUnlimited

#Billing & Plans

#Plans overview

Free

$0

3 automations, 1 repo

Pro

$29/mo

20 automations, 5 repos

Team

$25/seat/mo

Unlimited automations & repos

Enterprise

Custom

SSO, SLA, dedicated support

See the full feature comparison on the pricing page.

#Trial & upgrade

All new workspaces start on a 14-day free Pro trial — no credit card required. At the end of the trial, the workspace downgrades to Free unless a paid plan is activated. Upgrade at any time from Dashboard → Billing.

Upgrading mid-trial activates immediately — you're billed from the upgrade date, not the trial start date.

#Cancel subscription

Cancel at any time from Dashboard → Billing → Cancel Subscription. Your workspace retains paid-plan features until the end of the current billing period, then downgrades to Free. Data is retained indefinitely — nothing is deleted on downgrade.

Still have questions?

Reach us at support@deviera.dev or start the free trial and explore from within the app.

Start free trial