원클릭으로
lorenz-linear
Use Lorenz's `linear_graphql` client tool for raw Linear GraphQL operations such as comment editing and upload flows.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use Lorenz's `linear_graphql` client tool for raw Linear GraphQL operations such as comment editing and upload flows.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use Lorenz's Jira tracker tools for raw Jira REST API operations such as issue queries, transitions, comments, and JQL searches.
Land a PR by monitoring conflicts, resolving them, waiting for checks, and squash-merging when green; use when asked to land, merge, or shepherd a PR to completion.
Create a well-formed git commit from current changes using session history for rationale and summary; use when asked to commit, prepare a commit message, or finalize staged work.
Investigate stuck runs and execution failures by tracing Lorenz and Codex logs with issue/session identifiers; use when runs stall, retry repeatedly, or fail unexpectedly.
Pull latest origin/main into the current local branch and resolve merge conflicts (aka update-branch). Use when Codex needs to sync a feature branch with origin, perform a merge-based update (not rebase), and guide conflict resolution best practices.
Push current branch changes to origin and create or update the corresponding pull request; use when asked to push, publish updates, or create pull request.
| name | lorenz-linear |
| description | Use Lorenz's `linear_graphql` client tool for raw Linear GraphQL operations such as comment editing and upload flows. |
Use this skill for raw Linear GraphQL work during Lorenz app-server sessions.
Use the linear_graphql client tool exposed by Lorenz's app-server session.
It reuses Lorenz's configured Linear auth for the session.
Tool input:
{
"query": "query or mutation document",
"variables": {
"optional": "graphql variables object"
}
}
Tool behavior:
errors array as a failed GraphQL operation even if the
tool call itself completed.When you need an unfamiliar mutation, input type, or object field, use targeted
introspection through linear_graphql.
List mutation names:
query ListMutations {
__type(name: "Mutation") {
fields {
name
}
}
}
Inspect a specific input object:
query CommentCreateInputShape {
__type(name: "CommentCreateInput") {
inputFields {
name
type {
kind
name
ofType {
kind
name
}
}
}
}
}
Use these progressively:
issue(id: $key) when you have a ticket key such as MT-686.searchIssues(term: ...) when you need search semantics.issue(id: $id) for narrower reads.Issue.links; Linear exposes URL and PR links through
attachments.issues(filter: { identifier: ... }); IssueFilter does not
support an identifier field.Lookup by issue key:
query IssueByKey($key: String!) {
issue(id: $key) {
id
identifier
title
state {
id
name
type
}
project {
id
name
}
branchName
url
description
updatedAt
attachments {
nodes {
id
title
url
sourceType
}
}
}
}
Search fallback:
query SearchIssue($term: String!) {
searchIssues(term: $term, first: 1) {
nodes {
id
identifier
title
state {
id
name
type
}
project {
id
name
}
branchName
url
description
updatedAt
}
}
}
Resolve a key to an internal id:
query IssueByIdOrKey($id: String!) {
issue(id: $id) {
id
identifier
title
}
}
Read the issue once the internal id is known:
query IssueDetails($id: String!) {
issue(id: $id) {
id
identifier
title
url
description
state {
id
name
type
}
project {
id
name
}
attachments {
nodes {
id
title
url
sourceType
}
}
}
}
Use this before changing issue state when you need the exact stateId:
query IssueTeamStates($id: String!) {
issue(id: $id) {
id
team {
id
key
name
states {
nodes {
id
name
type
}
}
}
}
}
Comment records expose resolvedAt and archivedAt. Do not query
resolved or archived.
Use commentUpdate through linear_graphql:
mutation UpdateComment($id: String!, $body: String!) {
commentUpdate(id: $id, input: { body: $body }) {
success
comment {
id
body
}
}
}
Use commentCreate through linear_graphql:
mutation CreateComment($issueId: String!, $body: String!) {
commentCreate(input: { issueId: $issueId, body: $body }) {
success
comment {
id
url
}
}
}
Resolve the project's team and a workflow state first, then call issueCreate. Look up the
project by slug to get its id, its team id, and the team's workflow states:
query ProjectForCreate($slug: String!) {
projects(filter: { slugId: { eq: $slug } }, first: 1) {
nodes {
id
teams(first: 1) {
nodes {
id
states(first: 100) {
nodes {
id
name
type
}
}
}
}
}
}
}
Pick the destination stateId by status name when one is requested, otherwise the first
unstarted state, otherwise the first state. Then create the issue:
mutation CreateIssue($input: IssueCreateInput!) {
issueCreate(input: $input) {
success
issue {
id
identifier
url
}
}
}
Pass { teamId, projectId, stateId, title, description, assigneeId } in input; include
assigneeId only when assigning the issue to a specific user.
Use issueUpdate with the destination stateId:
mutation MoveIssueToState($id: String!, $stateId: String!) {
issueUpdate(id: $id, input: { stateId: $stateId }) {
success
issue {
id
identifier
state {
id
name
}
}
}
}
Use the GitHub-specific attachment mutation when linking a PR:
mutation AttachGitHubPR($issueId: String!, $url: String!, $title: String) {
attachmentLinkGitHubPR(issueId: $issueId, url: $url, title: $title, linkKind: links) {
success
attachment {
id
title
url
}
}
}
If Linear returns Duplicate attachment for duplicate url, treat the PR as
already linked and continue. Do not retry with a different attachment mutation
for the same URL.
If you only need a plain URL attachment and do not care about GitHub-specific link metadata, use:
mutation AttachURL($issueId: String!, $url: String!, $title: String) {
attachmentLinkURL(issueId: $issueId, url: $url, title: $title) {
success
attachment {
id
title
url
}
}
}
Use these when the exact field or mutation shape is unclear:
Do not run full __schema introspection. Linear rejects overly broad schema
queries as too complex. Use targeted __type(name: "...") queries instead.
query QueryFields {
__type(name: "Query") {
fields {
name
}
}
}
query IssueFieldArgs {
__type(name: "Query") {
fields {
name
args {
name
type {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
Do this in three steps:
linear_graphql with fileUpload to get uploadUrl, assetUrl, and
any required upload headers.uploadUrl with curl -X PUT and the exact
headers returned by fileUpload.linear_graphql again with commentCreate (or commentUpdate) and
include the resulting assetUrl in the comment body.Useful mutations:
mutation FileUpload($filename: String!, $contentType: String!, $size: Int!, $makePublic: Boolean) {
fileUpload(filename: $filename, contentType: $contentType, size: $size, makePublic: $makePublic) {
success
uploadFile {
uploadUrl
assetUrl
headers {
key
value
}
}
}
}
linear_graphql for comment edits, uploads, and ad-hoc Linear API
queries..md, .txt, or other text documents as attachments unless
the user explicitly asks or the content is too large to reasonably inline;
prefer fenced code blocks in comments instead.stateId
instead of hardcoding names inside mutations.attachmentLinkGitHubPR over a generic URL attachment when linking a
GitHub PR to a Linear issue.fileUpload; those URLs already carry the needed authorization.