Integrations

rupu plugs into your source host and your issue tracker so agents can read issues, work in repos, open pull requests, and comment back — across more than one platform at once.

Plug rupu into your stack

Integrations are how rupu reaches out beyond your laptop. Two connector families do the work, and both speak through rupu's single embedded MCP server so agents call the same typed tools regardless of which platform a call resolves to:

Per-platform connectors absorb the vendor quirks — GitLab MR vs GitHub PR vocabulary, nested namespaces, rate-limit headers — so your agent files stay portable. An agent that reads scm.prs.diff and posts scm.prs.comment works against GitHub and GitLab unchanged.

One auth flow. SCM and tracker credentials go through the same rupu auth login path as your model providers, stored in the OS keychain. rupu auth status lists SCM and tracker rows automatically.

Source control (SCM)

The RepoConnector handles everything repo-shaped. When a run targets a repo or a PR (not a bare issue), rupu clones the repo into a tempdir and runs the agent there; issue targets skip the clone and rely on read tools.

PlatformAPIWhat rupu can do
GitHub REST List / get repos & branches, create branches, read files by ref, list / get PRs, fetch diffs, comment on PRs, open PRs (incl. draft), clone_to local checkout, dispatch a GitHub Actions workflow_dispatch. GitHub Enterprise Server via [scm.github].base_url.
GitLab REST The same surface, with MR vocabulary translated to scm.prs.*: list / get repos & branches, read files, list / get MRs, fetch diffs, comment, open MRs, clone_to, trigger a CI pipeline against a ref. Nested groups and self-hosted ([scm.gitlab].base_url) supported.

Run-targets pick a platform by prefix. PRs use #N on GitHub and !N on GitLab (GitLab's MR convention):

# repo working tree / PR / MR / issue
github:owner/repo            # repo
github:owner/repo#42         # PR 42
github:owner/repo/issues/123 # issue 123
gitlab:group/sub/project!7   # MR 7

The rupu repos CLI

List remote repos and manage the local repo registry (which checkout on disk maps to which repo ref):

rupu repos list                       # list repos across configured platforms
rupu repos attach github:owner/repo   # map a local checkout to a repo ref
rupu repos prefer github:owner/repo   # mark a checkout as the preferred path
rupu repos tracked                    # list locally tracked checkouts
rupu repos forget github:owner/repo   # forget a repo or one tracked path
Private repos missing? Your token likely lacks the repo scope, or it is a GitHub App user-to-server token (no OAuth scopes). rupu repos list diagnoses this and tells you whether to re-login with a classic PAT or install the app on the relevant org.

Issue trackers

The IssueConnector family lets agents read and write tracker state. GitHub Issues and GitLab Issues are first-class on the issues.* tool surface and the rupu issues CLI; Jira and Linear ship connectors plus native trigger sources (polling and webhook — see Triggers).

TrackerAuthWhat rupu reads / writes
GitHub Issues PAT or device-code SSO List, fetch (title, body, state, labels, author), comment, create, transition open/closed. Full issues.* tools + rupu issues. Plus issue / PR / push event triggers.
GitLab Issues PAT or browser-callback PKCE SSO The same read/write surface (#N for issues; MRs use !N). Plus issue / MR / push event triggers.
Jira API key — store as <email>:<api_token> Project-scoped IssueConnector + native trigger source. Polls jira:<site>/<project> (or jira:<project> with [scm.jira].base_url); normalizes jira.issue.opened / jira.issue.updated and workflow-state transitions.
Linear API key Team-scoped IssueConnector + native trigger source. Polls linear:<team-id>; normalizes linear.issue.opened / linear.issue.updated and native workflow-state changes.

GitHub Projects (v2) also drives the tracker workflow vocabulary: when an issue-backed project item's Status field changes, rupu maps it into portable issue.* aliases (e.g. issue.entered_workflow_state.ready_for_review). Projects native state mapping is webhook-only today — there is no poll_sources form for Projects yet.

The rupu issues CLI

Auto-detects the target repo from the cwd's git origin remote when --repo is omitted (currently GitHub / GitLab):

rupu issues list --state open --label triage   # list issues
rupu issues show github:owner/repo/issues/42    # full body + metadata
rupu issues run <workflow> #42                  # run a workflow against an issue

Run a workflow against an issue

rupu issues run is a convenience wrapper for the canonical form, which takes the issue ref as a positional run-target:

rupu workflow run <workflow> github:owner/repo/issues/42

Issue targets do not clone — the workflow runs in the current checkout and binds the issue's metadata into step prompts and when: filters as {{ issue.* }}:

FieldValue
issue.numberIssue number
issue.titleTitle
issue.bodyDescription / body
issue.labelsLabel list
issue.authorReporter
issue.stateopen / closed
issue.refTracker-native ref (e.g. ENG-123 on Linear / Jira)

How it fits together

The integrations close a loop. A new or labeled issue (or a tracker state change) wakes a workflow or an autoflow; rupu's agents do the work in a cloned checkout; the SCM connector opens a PR / MR with the result; and the issue connector posts a comment back so the conversation stays where your team already lives.

issue tracker Linear / Jira / GitHub / GitLab rupu agents workflow / autoflow pull request SCM: GitHub / GitLab comment back on the issue (notifyIssue)
tracker → rupu agents → pull request, with a comment posted back on the originating issue.

Cross-references: Autoflows drive the long-running issue→PR loop with branch ownership; Triggers cover the polling and webhook tiers that wake workflows on tracker and SCM events.

Auth for integrations

Each platform stores its credential in the OS keychain via one command. These are SCM / tracker credentials — distinct from model-provider auth (for that, see Providers & Auth).

rupu auth login --provider <github|gitlab|linear|jira> --mode <api-key|sso>
rupu auth status     # SCM + tracker rows appear automatically
Webhook secrets are different. The signing secrets for rupu webhook serve (GitHub / GitLab / Linear / Jira) are read from environment variables only — never config files, never the keychain. See Triggers.