skills/linear/SKILL.md
Linear issue tracker — use for orgs whose `orgs.<org>.issues` is "linear" in chezmoi data
npx skillsauth add athal7/dotfiles linearInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Endpoint: https://api.linear.app/graphql
Check git remote get-url origin, parse the GitHub org, then confirm it uses Linear:
chezmoi data --format json | jq '.orgs["<org>"].issues'
If the result is "linear", this org tracks issues in Linear. The org config lives in ~/.local/share/chezmoi/.chezmoidata/local.yaml under orgs.<org>.issues.
The project body is the content field (markdown) on projectCreate / projectUpdate mutations — not the legacy description field (short summary). documentCreate with projectId creates an attached document (Documents tab) — not the inline body.
Templates apply automatically in the web UI but not via the API. Query { templates { id name templateData } } and follow the template manually.
issueSearch is deprecated (returns 400). Use searchIssues instead:
{ searchIssues(term: "query", first: 10) { nodes { identifier title state { name } url } } }
Create milestones on a project with projectMilestoneCreate. Assign issues to milestones via projectMilestoneId in issueCreate.
mutation($input: ProjectMilestoneCreateInput!) {
projectMilestoneCreate(input: $input) { success projectMilestone { id name } }
}
# input: { name, projectId, sortOrder }
projectUpdateCreate creates a formal status update (Activity tab). commentCreate with projectId creates a discussion comment. These are different things — users will correct you if you use the wrong one.
commentCreate accepts multiple parent fields (issueId, projectId, projectUpdateId, documentContentId, postId) but only include the one you're using. Passing null for unused parent fields causes "missing parent entity" even if another valid parent is set.
Query project status with status { name }, not state { name }. The state field is a plain String! — using a selection set on it returns a 400 validation error.
development
Zoom meeting captions — file locations and format
tools
macOS dictation custom vocabulary — sync knowledge base names and terms to the system spelling dictionary
testing
Look up people, projects, products, and decisions locally first: contact info (email, Slack ID, GitHub handle), titles and teams, project/product status, who works on what, and past decisions. Check before searching Slack, email, calendar, or GitHub — this is the first stop for any contact detail, project context, or decision-history question.
testing
Communication style, audience awareness, and AI-authorship markers for human-facing prose — load when composing chat messages, review comments, merge request descriptions, emails, doc bodies, or ticket descriptions