← All ivy-agents
IVYXSTUDIO · IVY AGENT
B

Bug Report to Issue

ivy.agent.bug-report-to-issue · v1.0.0

ivyx

Takes an in-app bug report, has a model write a GitHub issue from it, opens the issue and records the issue's address back on the report through your API.

Steps

In the order the agent's file lists them, each with where its inputs come from and the values the file fixes. A branch or a loop is a step too.

  1. 01
    Write the issue

    Write a GitHub issue from this bug report: a short title, and a Markdown body with what happened, how to reproduce it as far as the report says, and the app version. Do not invent details.

    takes
    context from the agent's input, payload
    returns
    issue_title
    Model turn
  2. 02
    Open the issue
    ivy.node.http-request

    Sends one HTTP request to a URL and returns the status, headers and body, parsed as JSON when the response is JSON.

    takes
    url from the agent's input, issues_url
    json.title from step 1, output.title
    json.body from step 1, output.body
    set
    method POST
    secret
    token the stored secret github-token
    returns
    issue_number, issue_url
    Ivy Node
  3. 03
    Record the link on the report
    ivy.node.http-request

    Sends one HTTP request to a URL and returns the status, headers and body, parsed as JSON when the response is JSON.

    takes
    url from the agent's input, reports_url
    json.report_id from the agent's input, payload.report_id
    json.issue_url from step 2, json.html_url
    set
    method PATCH
    secret
    token the stored secret saas-api-key
    returns
    saas_status
    Ivy Node

Nodes it brings

Adding this agent in IVYX Studio adds these nodes with it. A node your workspace already has is kept as it is, even at another version.

What it touches

Collected from what each of its nodes declares, plus the model call when a step is a model turn. A declaration is the author's statement, and it is what policy rules select on.

Calls a modelNetwork

What it needs

  • A stored secret named github-token. The agent's file carries the name, never the value.
  • A stored secret named saas-api-key. The agent's file carries the name, never the value.

Inputs

FieldTypeDescription
payloadrequiredobjectThe event your service posted: report_id, title, description, app_version and the user who reported it.
issues_urlrequiredstringThe repository's issues endpoint, such as https://api.github.com/repos/<owner>/<repo>/issues. The stand-in's address is used in the cases.
reports_urlrequiredstringYour API's endpoint for bug reports; a PATCH with report_id and issue_url records the link. The stand-in's address is used in the cases.

Outputs

FieldTypeDescription
issue_numberintegerThe number GitHub gave the issue.
issue_urlstringThe issue's page.
issue_titlestringThe title the model wrote.
saas_statusintegerYour API's HTTP status for the record.

Tests

2 of 2 test cases passed on Oct 7, 2026, in the publisher's own environment, before this version was published. The registry keeps that record; it does not run the cases again.

Requires: python:3.9, a model core, a GitHub token stored as the secret github-token, your own API's key stored as the secret saas-api-key, for the cases, the stand-in API on 127.0.0.1:18910 (api-standin.py), which the secrets crm-1, gh-1, saas-1 and the stand-in's /slack/hook address satisfy

  • crash-on-export

    A crash report becomes an issue whose address is written back to the report.

    given
    payload {"report_id":"R-1042","title":"App crashes on export","description":"Export to CSV crashes the app after the progress...
    issues_url http://127.0.0.1:18910/repos/acme/app/issues
    reports_url http://127.0.0.1:18910/accounts
    expects
    issue_number is greater than 0
    issue_url matches github\.com/acme/app/issues/\d+
    issue_title matches \w{3}
    saas_status equals 200
  • wrong-total

    A second report is a second issue, not a remembered one.

    given
    payload {"report_id":"R-1043","title":"Invoice total off by tax","description":"The invoice PDF shows the total before VAT wh...
    issues_url http://127.0.0.1:18910/repos/acme/app/issues
    reports_url http://127.0.0.1:18910/accounts
    expects
    issue_number is greater than 0
    issue_title matches [Ii]nvoice|[Tt]otal|VAT|vat|[Tt]ax
    saas_status equals 200