How I automated my bug backlog with n8n and a coding agent API

Published: (February 15, 2026 at 11:38 AM EST)
4 min read
Source: Dev.to

Source: Dev.to

The solution

I built a workflow on top of OpenCode that processes tickets automatically:

  1. Trigger – a new ticket in Linear (or Jira) with a specific label fires a webhook.
  2. Orchestrator – n8n receives the webhook and calls the CodeCloud API.
  3. Execution layer – CodeCloud spins up an AI coding agent, clones the repo, implements the fix, and opens a pull request.

The n8n workflow is literally two nodes: a trigger and an HTTP request.

What works well

Type of changeExample ticketResult
Well‑described bugs“The signup button doesn’t submit on Safari because we’re using FormData without a polyfill.”Agent adds the polyfill and opens a PR.
Tedious bulk changes“Update all error messages to use the new i18n format.”Agent greps, updates, opens a PR.
Documentation“Add JSDoc comments to all exported functions in /lib.”Mechanical work handled automatically.

Key insight: ticket quality determines output quality. This workflow forces the team to write better tickets, which is a side benefit even when the agent misses.

Prerequisites

  • An n8n instance (cloud or self‑hosted).
  • A CodeCloud account with GitHub connected.
  • A Linear (or Jira) workspace.

Linear API key

Create an API key from Settings → API → Personal API keys.

CodeCloud Header Auth credential

NameValue
AuthorizationBearer YOUR_CODECLOUD_API_KEY

Build the n8n workflow

Nodes

NodeConfiguration
Linear TriggerResource: Issue
Team: Select your team
HTTP RequestMethod: POST
URL: https://codecloud.dev/api/v1/agents
Authentication: Header Auth (credential above)
Body (JSON): see below

Request body (JSON)

{
  "repo": "your-org/your-repo",
  "prompt": "Please fix the bug or issue described in this ticket:\n{{ $json.data.title }}\n\n{{ $json.data.description }}",
  "model": "claude-sonnet-4-5",
  "provider": "anthropic",
  "auto_create_pr": true
}

The {{ $json.data.title }} and {{ $json.data.description }} expressions pull the ticket content from Linear’s webhook payload.

Filtering tickets

Add an IF node between the trigger and the HTTP request:

Condition: {{ $json.data.labelIds }} contains YOUR_AUTO_PR_LABEL_ID

Only tickets explicitly tagged for automation will be processed.

Importable workflow JSON

You can import the following JSON directly in n8n via Workflows → Import from File:

{
  "name": "Linear to CodeCloud PR",
  "nodes": [
    {
      "parameters": {
        "resource": "issue",
        "teamId": "{{ YOUR_TEAM_ID }}"
      },
      "id": "linear-trigger",
      "name": "Linear Trigger",
      "type": "n8n-nodes-base.linearTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://codecloud.dev/api/v1/agents",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"repo\": \"your-org/your-repo\",\n  \"prompt\": \"Please fix the bug or issue described in this ticket: \\n {{ $json.data.title }}\\n\\n{{ $json.data.description }}\",\n  \"model\": \"claude-sonnet-4-5\",\n  \"provider\": \"anthropic\",\n  \"auto_create_pr\": true\n}"
      },
      "id": "http-request",
      "name": "Create CodeCloud Run",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [480, 300]
    }
  ],
  "connections": {
    "Linear Trigger": {
      "main": [[{ "node": "Create CodeCloud Run", "type": "main", "index": 0 }]]
    }
  }
}

Replace YOUR_TEAM_ID and your-org/your-repo, then attach the Header Auth credential you created earlier.

Using Jira instead of Linear

Replace the Linear Trigger with a Jira Trigger (event: issue_created). Adjust the request body to match Jira’s payload:

{
  "repo": "your-org/your-repo",
  "prompt": "{{ $json.issue.fields.summary }}\n\n{{ $json.issue.fields.description }}",
  "model": "claude-sonnet-4-5",
  "auto_create_pr": true
}

Useful API parameters

ParameterDescription
mode: "plan"Returns an implementation plan without making changes—good for review before execution.
webhook_urlURL to be notified when the run finishes; can be used to post the PR link back to Slack or update the ticket status.

Tips & considerations

  • The workflow may produce imperfect PRs; treat them as drafts that a developer can quickly polish.
  • Failed attempts often surface ambiguous ticket details or edge cases, prompting better documentation.
  • Start by creating an auto‑PR label in Linear, tag a few well‑described bugs, activate the workflow, and observe the results.

Next steps

CodeCloud is an API for running AI coding agents. If you have questions or want to share what you’ve built, feel free to comment or check out the official documentation.

0 views
Back to Blog

Related posts

Read more »