بنقرة واحدة
linear
Symphony の `linear_graphql` client tool を使って、コメント編集や アップロードフローなどの生の Linear GraphQL 操作を行う。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Symphony の `linear_graphql` client tool を使って、コメント編集や アップロードフローなどの生の Linear GraphQL 操作を行う。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
現在の変更内容とセッション履歴をもとに、根拠のある整った `git commit`を作成する。コミット作成、コミットメッセージ準備、またはステージ済み作業の仕上げを頼まれたときに使う。
issue / session 識別子を手がかりに Symphony と Codex のログを追い、停滞した実行や失敗の原因を調べる。実行が止まる、何度もリトライする、あるいは予期せず失敗するときに使う。
PR の競合監視、解消、チェック待ち、グリーン後の squash merge までを行い、PR を着地させる。land、merge、あるいは PR を最後まで面倒見るよう頼まれたときに使う。
現在のローカルブランチへ最新の `origin/main` を取り込み、マージ競合を 解決する(いわゆる update-branch)。feature branch を origin と同期し、 rebase ではなく merge で更新し、競合解決のベストプラクティスに沿って 進める必要があるときに使う。
現在のブランチの変更を `origin` に push し、対応する pull request を作成 または更新する。push、公開、PR 作成を頼まれたときに使う。
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
| name | linear |
| description | Symphony の `linear_graphql` client tool を使って、コメント編集や アップロードフローなどの生の Linear GraphQL 操作を行う。 |
Symphony の app-server session 中に、生の Linear GraphQL 操作が必要なときはこの skill を使う。
Symphony の app-server session から公開される linear_graphql client tool を使う。
このツールは、その session に設定された Linear 認証をそのまま再利用する。
ツール入力:
{
"query": "query or mutation document",
"variables": {
"optional": "graphql variables object"
}
}
ツールの挙動:
errors 配列が返った場合、tool call 自体が完了していてもGraphQL operation は失敗として扱う。知らない mutation、input type、object field が必要になったら、linear_graphql で対象を絞った introspection を行う。
mutation 名の一覧を出す:
query ListMutations {
__type(name: "Mutation") {
fields {
name
}
}
}
特定の input object を調べる:
query CommentCreateInputShape {
__type(name: "CommentCreateInput") {
inputFields {
name
type {
kind
name
ofType {
kind
name
}
}
}
}
}
次の順で段階的に使う。
MT-686 のようなチケットキーがあるなら、まず issue(id: $key) を使う。issues(filter: ...) に切り替える。issue(id: $id) を優先する。issue key で引く:
query IssueByKey($key: String!) {
issue(id: $key) {
id
identifier
title
state {
id
name
type
}
project {
id
name
}
branchName
url
description
updatedAt
links {
nodes {
id
url
title
}
}
}
}
identifier filter で引く:
query IssueByIdentifier($identifier: String!) {
issues(filter: { identifier: { eq: $identifier } }, first: 1) {
nodes {
id
identifier
title
state {
id
name
type
}
project {
id
name
}
branchName
url
description
updatedAt
}
}
}
key から内部 id を解決する:
query IssueByIdOrKey($id: String!) {
issue(id: $id) {
id
identifier
title
}
}
内部 id がわかったあとの詳細取得:
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
}
}
}
}
issue の state を変更する前に、正確な stateId が必要ならこれを使う。
query IssueTeamStates($id: String!) {
issue(id: $id) {
id
team {
id
key
name
states {
nodes {
id
name
type
}
}
}
}
}
linear_graphql 経由で commentUpdate を使う。
mutation UpdateComment($id: String!, $body: String!) {
commentUpdate(id: $id, input: { body: $body }) {
success
comment {
id
body
}
}
}
linear_graphql 経由で commentCreate を使う。
mutation CreateComment($issueId: String!, $body: String!) {
commentCreate(input: { issueId: $issueId, body: $body }) {
success
comment {
id
url
}
}
}
移動先の stateId を指定して issueUpdate を使う。
mutation MoveIssueToState($id: String!, $stateId: String!) {
issueUpdate(id: $id, input: { stateId: $stateId }) {
success
issue {
id
identifier
state {
id
name
}
}
}
}
PR をリンクするときは GitHub 専用の attachment mutation を使う。
mutation AttachGitHubPR($issueId: String!, $url: String!, $title: String) {
attachmentLinkGitHubPR(
issueId: $issueId
url: $url
title: $title
linkKind: links
) {
success
attachment {
id
title
url
}
}
}
GitHub 固有のリンクメタデータが不要で、単なる URL 添付でよいならこちらを使う。
mutation AttachURL($issueId: String!, $url: String!, $title: String) {
attachmentLinkURL(issueId: $issueId, url: $url, title: $title) {
success
attachment {
id
title
url
}
}
}
field や mutation の正確な shape が不明なときは、以下を使う。
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
}
}
}
}
}
}
}
次の 3 手順で行う。
linear_graphql で fileUpload を呼び、uploadUrl、assetUrl、そして必要な upload header を受け取る。fileUpload が返した header をそのまま使い、curl -X PUT でローカルファイルのバイト列を uploadUrl へ送る。linear_graphql で commentCreate(または commentUpdate)を呼び、生成された assetUrl をコメント本文に含める。使う mutation:
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 を使う。stateId を使う。attachmentLinkGitHubPR を優先する。fileUpload が返す署名付き upload URLに対してだけ使う。必要な認可情報はその URL 自体に含まれている。