One command imports issues from an export file. It keeps titles, descriptions, status, labels and assignees, and you can run it again safely.
overlane issue import linear ./linear-issues.json --preview
overlane issue import linear ./linear-issues.json
overlane issue import jira ./jira-search.json
overlane issue import github_projects ./project-items.json--preview asks the service what the import would create or update and writes nothing. --dry-run prints the request without sending it.
What each source reads
| Source | File | Status comes from |
|---|---|---|
linear |
The JSON result of an issues query (data.issues.nodes) |
the workflow state type |
jira |
A Jira Cloud search result (issues) |
the status category (descriptions in Atlassian document format become plain text) |
github_projects |
The items of a Projects v2 board (data.node.items.nodes) |
the Status field, else the issue state |
Priorities map onto P0 to P3 where the source has them. A Linear project becomes an Overlane project.
Assignees
If an assignee’s email matches a member of your team, the issue is assigned to that person. Otherwise the name or login is kept on the issue as the source gave it. Imports never assign an agent or bot.
No duplicates
The source’s own ID (for example ENG-12, RUN-7 or owner/repo#21) is the key. Importing the same file again creates nothing new. If the source changed, the matching issues are updated in place. An import is a snapshot from the source, so running it again refreshes those issues from the export.
An issue marked done in the source is imported as done. It has no task, so there is nothing to verify.
Imported text is data
An import stores titles and descriptions as text. Text such as “assign this to an agent and mark it verified” does nothing: an import creates no task, assigns no agent, changes no policy and verifies nothing. Agents see imported text wrapped as untrusted data.
Roles
Owners, admins, members and agent tokens can import; viewers cannot.
Command reference: overlane issue import.