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.

Connect a tracker
Open Settings → Integrations and fill in the card for your tracker.
| Tracker | What you need | Optional |
|---|---|---|
| Linear | A personal API key | A team key such as ENG, to limit issues to one team |
| Jira Cloud | Your site URL (https://<site>.atlassian.net), your email and an API token | A JQL filter. The default is assignee = currentUser() AND statusCategory != Done |
| GitHub Issues | A 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
- Open the Tasks board for a project, or the global board.
- Click Import from and choose a tracker.
- Tick the issues you want. The list shows each issue’s identifier and state, and defaults to issues in states that aren’t done.
- 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.

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 examplestate: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(mode0600), astracker:linear,tracker:jiraandtracker:github. - Everything else, such as the site URL, team, JQL, repository, column map and last sync time, is in
~/.clawide/integrations.json(mode0600).
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.
| Endpoint | Method | Plan | Description |
|---|---|---|---|
/api/integrations | GET | All | Linear, Jira and GitHub with connected, account, non-secret settings and last_sync, plus whether you’re entitled |
/api/integrations/{kind} | PUT | Pro | Save token (optional when one is stored) and settings. Validates the site URL and repository format |
/api/integrations/{kind}/test | POST | Pro | Returns ok, account and message |
/api/integrations/{kind} | DELETE | All | Delete the token and settings. Returns 204 |
/api/integrations/{kind}/issues?state=… | GET | Pro | Issues in the given states; defaults to the non-done states of the column map |
/api/integrations/{kind}/import?project_id=… | POST | Pro | Body {"issue_ids": [...], "column": "Backlog"}. Returns imported and skipped. Omit project_id for the global board |
/api/tasks/{taskID}/external/push?project_id=… | POST | Pro | Body {"state"?: string, "comment"?: string}. Returns ok and the state that was set |