Back to home@LJH-snow

dsh-tool-linear

No description

Stars
0
Language
TypeScript
Created
Aug 27, 2026
Updated
Aug 27, 2026

Introduction

dsh-tool-linear

English | 中文

A Cordis tool plugin that gives DeepSeek Harness (dsh) Linear issue management capabilities. Agents can search and list issues, read issue details, create and update tickets, add and list comments, and inspect teams, projects, and cycles.

It follows the official "everything is a plugin" architecture with ctx.tools.register(defineTool(...)) and the adding-a-tool contract.

Install

Install directly from GitHub:

npm install github:LJH-snow/dsh-tool-linear

Or from a local checkout:

git clone https://github.com/LJH-snow/dsh-tool-linear
cd dsh-tool-linear
npm install && npm run build
npm install /path/to/dsh-tool-linear

Requires @deepseek-ai/cordis (^4.0.1) and @deepseek-ai/dsh-tools (^0.1.0-rc.6) as peer dependencies, provided by the host dsh runtime.

Configuration

Load the plugin in a dsh composition config (cordis.yml):

- name: 'github:LJH-snow/dsh-tool-linear'
  config:
    apiKey: 'lin_api_xxx'              # required: Linear personal API key
    baseUrl: 'https://api.linear.app/graphql'  # optional
    timeoutMs: 15000                    # optional, default 15000

Full example: examples/cordis.yml.

Security: the first version requires an API key for every tool because Linear workspaces are access-controlled and several tools modify tickets. Create a personal API key under Linear Settings > Security & access, grant it the minimum permissions needed, and never commit it.

Tools

ToolDescriptionCredentials
linear_search_issuesSearch issues by title, identifier, description, or comment textyes
linear_list_issuesList issues filtered by team, project, cycle, or workflow stateyes
linear_get_issueGet issue details by UUID or identifier such as ABC-123yes
linear_create_issueCreate an issue with title, description, priority, project, cycle, assignee, labels, state, and due dateyes
linear_update_issueUpdate title, description, priority, project, cycle, assignee, labels, state, or due dateyes
linear_add_issue_commentAdd a comment to an issueyes
linear_list_issue_commentsList comments on an issueyes
linear_list_cyclesList cycles for a teamyes
linear_get_cycleGet cycle detailsyes
linear_list_projectsList projects, optionally scoped to a teamyes
linear_get_projectGet project details, dates, progress, health, and teamsyes
linear_list_teamsList teams visible to the API keyyes
linear_get_teamGet team detailsyes

Behavior Contract

  • Missing credentials return canonical business values: read tools return { authenticated: false, ... }, write tools return { created: false, reason } or { ok: false, reason }.
  • Missing issue, cycle, project, or team maps to { found: false }.
  • GraphQL validation and user errors on writes map to { created: false, reason } or { ok: false, reason }.
  • Infrastructure errors such as invalid credentials (401), forbidden access (403), rate limiting (429), or server failures (5xx) throw LinearError.
  • Every request forwards exec.signal and uses a configurable timeout (default 15 seconds).

Development

npm install
npm run typecheck
npm test
npm run build

See DEVELOPMENT.md for the architecture and test coverage.

License

MIT