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)
- 1Sign up at deviera.dev — free 14-day trial, no credit card required.
- 2Install the Deviera GitHub App on your organisation (or connect GitLab via OAuth).
- 3Select the repositories you want Deviera to monitor.
- 4Connect Linear, Jira, or both for automatic issue creation.
- 5Enable one of the 65 built-in automation presets (e.g. "CI Failure → Linear Issue").
- 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
#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.
- 1Go to Dashboard → Integrations → GitHub.
- 2Click "Install GitHub App". You'll be redirected to GitHub.
- 3Choose the organisation or personal account, then select which repositories to grant access to.
- 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:
| Event | Triggers |
|---|---|
| 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 |
| push | github_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
#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
| Field | Type | Required | Description |
|---|---|---|---|
| github_ci_failed | string | yes | GitHub workflow run completed with failure |
| github_ci_passed | string | yes | GitHub workflow run completed successfully |
| github_pr_opened | string | yes | Pull request opened or re-opened |
| github_pr_merged | string | yes | Pull request merged into target branch |
| github_pr_closed | string | yes | Pull request closed without merging |
| github_pr_stale | string | yes | PR has had no activity for N hours (scanned every 6h) |
| github_issue_opened | string | yes | New GitHub issue created |
| github_issue_closed | string | yes | GitHub issue closed |
| github_issue_labeled | string | yes | Label added to a GitHub issue |
| github_push | string | yes | Code pushed to any branch |
| github_commit_todo | string | yes | TODO or FIXME detected in commit messages |
| vercel_deployment_created | string | yes | Vercel deployment started |
| vercel_deployment_ready | string | yes | Vercel deployment succeeded |
| vercel_deployment_failed | string | yes | Vercel deployment failed |
| ci_flaky_detected | string | yes | CI alternating pass/fail pattern detected (flaky test) |
| gitlab_ci_failed | string | yes | GitLab pipeline completed with failure |
| gitlab_ci_passed | string | yes | GitLab pipeline completed successfully |
| gitlab_mr_opened | string | yes | GitLab merge request opened |
| gitlab_mr_stale | string | yes | GitLab MR has had no activity for N hours |
| gitlab_push | string | yes | Code pushed to a GitLab repository |
#Conditions
Conditions are optional filters applied after a trigger fires. All conditions must pass for the action to execute.
| Field | Type | Required | Description |
|---|---|---|---|
| repository | string | no | Only fire for a specific repository (e.g. "owner/repo") |
| branch | string | no | Only fire on this branch (e.g. "main") |
| labels | string[] | no | Only fire when any of these labels are present on the issue/PR |
| failureStreak | number | no | Minimum consecutive CI failures before firing |
| staleHours | number | no | PR must be open for at least N hours (default 48) |
| failedMinutes | number | no | Deployment must have been failing for N minutes |
#Actions
| Field | Type | Required | Description |
|---|---|---|---|
| create_linear_issue | action | yes | Create a Linear issue with team, priority, labels, and title/description templates |
| create_jira_issue | action | yes | Create a Jira issue with project, type, priority, and labels (Pro+) |
| create_gitlab_issue | action | yes | Create a GitLab issue with project, labels, and confidential flag (Team+) |
| create_github_issue | action | yes | Open a GitHub issue in the triggering repository |
| close_github_issue | action | yes | Close a GitHub issue |
| post_pr_comment | action | yes | Post a comment on the GitHub PR that triggered the event |
| post_mr_comment | action | yes | Post a comment on the GitLab MR that triggered the event (Team+) |
| send_notification | action | yes | Send an email notification via Brevo (Pro+) |
| send_slack_message | action | yes | Post to a Slack Incoming Webhook (Team+) |
| assign_user | action | yes | Assign 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.
#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
CI failures on main/master, Vercel production deployments down. Immediate attention required.
CI failures on non-main branches, stale PRs, issues labeled "bug".
PR opened, issue opened, other labeled issues.
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.
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
Minimal friction. Your team ships with very few interruptions.
Normal friction for an active team. A few areas to watch.
Friction is accumulating. Review which triggers are firing most.
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.
- 1Go to Dashboard → Integrations → Linear.
- 2Click "Connect Linear" — you'll be redirected to Linear's OAuth page.
- 3Grant access to your Linear workspace.
- 4Return to Deviera and select a default team for issue creation.
- 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
#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.
- 1Go to Dashboard → Integrations → Jira.
- 2Click "Connect Jira" — you'll be redirected to Atlassian's OAuth consent screen.
- 3Authorise access to your Atlassian Cloud site.
- 4Return to Deviera and select a default project for issue creation.
- 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.
- 1Go to Dashboard → Integrations → GitLab.
- 2Click "Connect GitLab" — you'll be redirected to GitLab's OAuth page.
- 3Authorise access to your GitLab groups and projects.
- 4Return to Deviera — your groups and projects will be listed automatically.
- 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.
- 1Create an Incoming Webhook in your Slack workspace (api.slack.com/apps).
- 2Copy the webhook URL.
- 3Go to Dashboard → Integrations → Slack and paste the URL.
- 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.
- 1Go to Dashboard → Integrations → Vercel.
- 2Enter your Vercel API token (create one at vercel.com/account/tokens).
- 3Deviera will list your Vercel projects and begin capturing deployment events.
- 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.
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
#Endpoints
/api/automation-eventsList automation events (signals). Supports pagination via cursor.
| limit | number | Max results (default 50, max 200) |
| cursor | string | Pagination cursor from previous response |
| severity | string | Filter by severity: critical | warning | info | resolved |
/api/automation-events/statsAggregate ROI stats — total signals, minutes saved, by severity, Linear issues created.
/api/automationsList all automations in the workspace.
/api/automationsCreate a new automation.
| name | string | Display name |
| trigger | TriggerConfig | Trigger type and filter config |
| action | ActionConfig | Action type and template config |
| cooldownMinutes | number | Cooldown window (default 60) |
#Rate limits
| Plan | Requests / min | Requests / day |
|---|---|---|
| Free | 30 | 1,000 |
| Pro | 60 | 5,000 |
| Team | 120 | 20,000 |
| Enterprise | Unlimited | Unlimited |
#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.
Reach us at support@deviera.dev or start the free trial and explore from within the app.
Start free trial