/linear/.
For API key setup, see Linear Setup.
Config
Filesystem Layout
__ so that
resource-specific commands can reference the correct resource without
extra lookups.
Teams
Each team directory is named:team.jsonis the normalized team metadatamembers/contains one JSON file per memberissues/contains one directory per issueprojects/contains one JSON file per project, including lightweight related issue referencescycles/contains one JSON file per cycle
Issues
Each issue directory is named:issue.json— normalized issue metadata with command-aligned fields such asissue_id,issue_key,team_id,state_id, andassignee_idcomments.jsonl— normalized comment stream ordered bycreated_at
comments.jsonl is a Mirage representation chosen for shell-friendly
workflows. It is not a native Linear file format.
Members
Each member file is named:user_id and email
so the value can be reused directly in commands like linear-issue-assign.
Projects and Cycles
Project and cycle files are named:Cache
The Linear resource usesIndexCacheStore (same as Discord and other
resources). There is no separate content cache — file content caching
is handled by the workspace IOResult mechanism.
Example
Seeexamples/linear/linear.py for the full working example.
Finding IDs
IDs are embedded in directory and file names after__:
Shell Commands
Standard commands available on the mounted Linear tree:| Command | Notes |
|---|---|
ls | List teams, issues, members, projects |
cat | Read .json metadata or .jsonl comments |
head / tail | First/last N lines |
grep / rg | Pattern search (file or directory level) |
jq | Query JSON fields |
wc | Line/word/byte counts |
stat | File metadata (name, size, type) |
find | Recursive search with -name, -maxdepth |
tree | Directory tree view |
basename | Extract file name from path |
dirname | Extract directory from path |
realpath | Resolve path to absolute form |
Resource-Specific Commands
linear-issue-create
Create a new issue. Description can be passed via --description, --description_file, or stdin.
| Option | Required | Description |
|---|---|---|
--team_id | * | Linear team ID |
--team_key | * | Linear team key (e.g. ENG) |
--title | yes | Issue title |
--description | no | Inline description text |
--description_file | no | Path to file containing description |
--team_id or --team_key is required.
linear-issue-update
Update an existing issue. Description can be passed via --description, --description_file, or stdin.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--title | no | New title |
--description | no | Inline description text |
--description_file | no | Path to file containing description |
--issue_id or --issue_key is required.
linear-issue-assign
Assign an issue to a user.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--assignee_id | ** | Linear user ID |
--assignee_email | ** | User email address |
--issue_id or --issue_key is required.
** One of --assignee_id or --assignee_email is required.
linear-issue-transition
Transition an issue to a different workflow state.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--state_id | ** | Linear workflow state ID |
--state_name | ** | Workflow state name |
--issue_id or --issue_key is required.
** One of --state_id or --state_name is required.
linear-issue-set-priority
Set the priority of an issue.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--priority | yes | Priority level (0=none, 1=urgent, 2=high, 3=medium, 4=low) |
--issue_id or --issue_key is required.
linear-issue-set-project
Assign an issue to a project.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--project_id | yes | Linear project ID |
--issue_id or --issue_key is required.
linear-issue-add-label
Add a label to an issue.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--label_id | yes | Linear label ID |
--issue_id or --issue_key is required.
linear-issue-comment-add
Add a comment to an issue. Body can be passed via --body, --body_file, or stdin.
| Option | Required | Description |
|---|---|---|
--issue_id | * | Linear issue ID |
--issue_key | * | Linear issue key (e.g. ENG-123) |
--body | ** | Inline comment text |
--body_file | ** | Path to file containing body |
--issue_id or --issue_key is required.
** One of --body, --body_file, or stdin is required.
linear-issue-comment-update
Update an existing comment. Body can be passed via --body, --body_file, or stdin.
| Option | Required | Description |
|---|---|---|
--comment_id | yes | Linear comment ID |
--body | ** | Inline comment text |
--body_file | ** | Path to file containing body |
--body, --body_file, or stdin is required.
linear-search
Search issues across the workspace.
| Option | Required | Description |
|---|---|---|
--query | yes | Search query text |