Skip to main content
The Linear resource exposes Linear workspace data as a virtual filesystem mounted at some prefix such as /linear/. For API key setup, see Linear Setup.

Config

Filesystem Layout

Example:
Directory and file names embed the Linear ID after __ so that resource-specific commands can reference the correct resource without extra lookups.

Teams

Each team directory is named:
Inside the team directory:
  • team.json is the normalized team metadata
  • members/ contains one JSON file per member
  • issues/ contains one directory per issue
  • projects/ contains one JSON file per project, including lightweight related issue references
  • cycles/ contains one JSON file per cycle

Issues

Each issue directory is named:
Each issue directory contains:
  • issue.json — normalized issue metadata with command-aligned fields such as issue_id, issue_key, team_id, state_id, and assignee_id
  • comments.jsonl — normalized comment stream ordered by created_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:
Member JSON includes command-aligned identifiers such as 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:
Project JSON includes lightweight related issue references. Cycle JSON includes cycle metadata such as start and end dates.

Cache

The Linear resource uses IndexCacheStore (same as Discord and other resources). There is no separate content cache — file content caching is handled by the workspace IOResult mechanism.

Example

See examples/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:

Resource-Specific Commands

linear-issue-create

Create a new issue. Description can be passed via --description, --description_file, or stdin.
* One of --team_id or --team_key is required.

linear-issue-update

Update an existing issue. Description can be passed via --description, --description_file, or stdin.
* One of --issue_id or --issue_key is required.

linear-issue-assign

Assign an issue to a user.
* One of --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.
* One of --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.
* One of --issue_id or --issue_key is required.

linear-issue-set-project

Assign an issue to a project.
* One of --issue_id or --issue_key is required.

linear-issue-add-label

Add a label to an issue.
* One of --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.
* One of --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.
** One of --body, --body_file, or stdin is required. Search issues across the workspace.
Returns matching issues as a JSON array.