Browse the docs

Tracker Integrations

Connect Linear, Jira Cloud or GitHub Issues to import issues into your markdown task board, work on them with your agents, and push status and comments back to the tracker. Integrations are a Pro feature and are included in the 14-day trial.

Everything runs on your machine. ClawIDE talks to each tracker’s API with a personal token you provide; there’s no hosted service or webhook in between.

Settings → Integrations: Linear, Jira and GitHub cards with connection forms, a Test button, the connected account and the column-to-state map.

Connect a tracker

Open Settings → Integrations and fill in the card for your tracker.

TrackerWhat you needOptional
LinearA personal API keyA team key such as ENG, to limit issues to one team
Jira CloudYour site URL (https://<site>.atlassian.net), your email and an API tokenA JQL filter. The default is assignee = currentUser() AND statusCategory != Done
GitHub IssuesA token and the repository as owner/name

Click Test to check the token. The card shows the account it connected as.

Then map your board’s columns to tracker states, for example Backlog → Backlog, In Progress → In Progress, Done → Done. ClawIDE uses this map for importing and pushing.

To disconnect, click Disconnect. That deletes the token and settings, and it works on the free plan too, so you can always remove a token after your trial or subscription ends.

Import issues

  1. Open the Tasks board for a project, or the global board.
  2. Click Import from and choose a tracker.
  3. Tick the issues you want. The list shows each issue’s identifier and state, and defaults to issues in states that aren’t done.
  4. Choose a column and click Import.

Each imported task gets the issue’s title, its description and a link to the issue. Issues already on the board are skipped, so importing again is safe.

The Import from Linear modal on the Tasks board, listing issues with checkboxes, identifiers and states, and a column picker.

How imports are stored

Tasks stay in .clawide/tasks.md. An imported task carries an external reference after its id:

### Fix flaky login test <!-- id: 7c1e9a42 --> <!-- ext: linear:9f3b2d|ENG-123|https://linear.app/acme/issue/ENG-123 -->

The reference is <tracker>:<issue id>|<identifier>|<url>. Boards without imported tasks are saved exactly as before, and linked-branch markers keep working.

Push status back

Cards with an external reference show a tracker badge that links to the issue, and a Push status action. Pushing sets the issue to the state mapped from the card’s current column, and can add a comment.

How each tracker applies the state:

  • Linear finds the workflow state by name, ignoring case, and updates the issue.
  • Jira looks for a transition whose name or target status matches. Jira workflows differ between projects, so if no transition matches, ClawIDE shows an error that lists the transitions that are available. Comments are sent in Jira’s document format.
  • GitHub Issues closes or reopens the issue. Open issues map to Todo and closed issues to Done. For any other state, ClawIDE sets a state:<name> label, for example state:in-review. Pull requests are skipped.

Syncing

Syncing is on demand: you import when you want new issues and push when you’ve moved a card. There are no webhooks, because ClawIDE has no public callback URL, so the board can drift from the tracker between imports. Each integration shows its last sync time.

If Jira rate-limits a request, ClawIDE waits for the Retry-After period and retries once.

Where settings are stored

  • Tokens are kept in the local secrets store, ~/.clawide/secrets.json (mode 0600), as tracker:linear, tracker:jira and tracker:github.
  • Everything else, such as the site URL, team, JQL, repository, column map and last sync time, is in ~/.clawide/integrations.json (mode 0600).

Tokens are never sent to agent processes. The Symphony orchestrator uses the same connections to fetch issues.

API

Listing integrations and disconnecting work on every plan. The other endpoints need Pro or a trial, and return 402 {"error":"upgrade_required"} otherwise.

EndpointMethodPlanDescription
/api/integrationsGETAllLinear, Jira and GitHub with connected, account, non-secret settings and last_sync, plus whether you’re entitled
/api/integrations/{kind}PUTProSave token (optional when one is stored) and settings. Validates the site URL and repository format
/api/integrations/{kind}/testPOSTProReturns ok, account and message
/api/integrations/{kind}DELETEAllDelete the token and settings. Returns 204
/api/integrations/{kind}/issues?state=…GETProIssues in the given states; defaults to the non-done states of the column map
/api/integrations/{kind}/import?project_id=…POSTProBody {"issue_ids": [...], "column": "Backlog"}. Returns imported and skipped. Omit project_id for the global board
/api/tasks/{taskID}/external/push?project_id=…POSTProBody {"state"?: string, "comment"?: string}. Returns ok and the state that was set