SKILL.md
Linear Task Planner
Plan iOS implementation from Linear tasks with repeatable data collection and a consistent Markdown plan output.
Quick start
- Capture Linear context and save it for reuse.
- Load the Linear API token from a local env file.
- Run the skill with the issue key.
- Fetch the issue data needed for planning.
- Write a Markdown plan using the template.
Example invocation:
$linear-task-planner SKI-1
In this mode, use the API token flow by default and map the issue key to --identifier. --identifier expects the Linear key format TEAM-123 and is resolved via the team key + issue number filter.
Capture and persist Linear context
Collect these once per workspace/board and save them for future use:
- Workspace slug or name
- Team key and/or team id
- Project id (if the board maps to a project)
- Board URL
- Default env file path
- Auth mode (
tokenormcp) - Auth scheme (
rawfor personal API key orbearerfor OAuth) - MCP server name (if using MCP)
Save to a local config file (repo root): .linear-task-planner.json. Add it to .gitignore to avoid committing workspace details.
Use the helper script to initialize or update it:
python3 skills/linear-task-planner/scripts/linear_fetch.py init \
--workspace "your-workspace" \
--team-key "ENG" \
--team-id "team-id" \
--project-id "project-id" \
--board-url "https://linear.app/your-workspace/team/ENG" \
--env ".env.local" \
--auth-mode token \
--auth-scheme raw
When starting a plan, ask the developer which auth mode they prefer:
- API token (default): use the script and
LINEARAPITOKENfrom the env file. - MCP: if they already have a local MCP server for Linear, prefer it and store
authMode=mcp+mcpServer.
If authMode=mcp, do not use linear_fetch.py. Instead, call the MCP server for Linear and request the same fields as the GraphQL queries in references/issue.graphql, references/project.graphql, and references/team.graphql.
Load the API token
Expect LINEARAPITOKEN in a local env file (e.g., .env.local, .env). Use .env.local.example as a template.
- Keep the token out of git.
- Use
--envon commands when the env file is not.env.localor.env. - You can pass
--envbefore or after the subcommand.
Fetch task data
Use the helper script to pull issue or project data into JSON.
Issue data (include comments and attachments):
python3 skills/linear-task-planner/scripts/linear_fetch.py issue \
--identifier "ENG-123" \
--env .env.local \
--details \
--out plans/ENG-123.json
If you are using OAuth tokens, set the auth scheme:
python3 skills/linear-task-planner/scripts/linear_fetch.py issue \
--identifier "ENG-123" \
--details \
--auth-scheme bearer \
--out plans/ENG-123.json
Project data (list issues, then pick the target issue):
python3 skills/linear-task-planner/scripts/linear_fetch.py project \
--id "project-id" \
--first 50 \
--out plans/project.json
Team data (board view / backlog):
python3 skills/linear-task-planner/scripts/linear_fetch.py team \
--id "team-id" \
--first 50 \
--out plans/team.json
If a query fails due to schema changes, use the custom query path and adjust fields via the GraphQL explorer:
python3 skills/linear-task-planner/scripts/linear_fetch.py custom \
--query skills/linear-task-planner/references/issue.graphql \
--variables '{"issueId": "..."}'
Build the Markdown plan
Use the template in references/plan-template.md. Populate it with:
- Title, description, and acceptance criteria
- Attachments and design links (Figma, FigJam, Zeplin, etc.)
- Recent comments for updated scope or constraints
- Dependencies, risks, and open questions
- Implementation steps and testing notes
- Best-practice checks from the SwiftUI and concurrency skills
Save the plan in plans/{issue-identifier}.md (create plans/ if missing).
Required data checklist
Always attempt to collect these fields before planning:
- Issue title, description, and URL
- Labels, priority, state, due date
- Assignee and team/project context
- Attachments (screenshots, files) and design links
- Recent comments (scope changes, edge cases, UX details)
Apply best-practice skills while planning
When you write the plan, explicitly map decisions to the existing skills:
swiftui-guidelinesfor state management, async patterns, and view organizationswift-concurrency-expertfor actor isolation, Sendable, and data-race safetyswiftui-performance-auditfor avoiding heavy work inbodyand identity stabilityswiftui-ui-patternsfor NavigationStack, lists/grids, sheets, and app wiringswiftui-view-refactorfor consistent view structure and MV-first patternsswiftui-liquid-glassif iOS 26+ glass UI is in scope (include fallbacks)
If any of these introduce constraints or tradeoffs, capture them in the plan under “Risks & Dependencies” or “Open Questions.”
Read the source skills as needed for detailed guidance:
skills/swift-concurrency-expert/SKILL.mdskills/swiftui-guidelines/SKILL.mdskills/swiftui-liquid-glass/SKILL.mdskills/swiftui-performance-audit/SKILL.mdskills/swiftui-ui-patterns/SKILL.mdskills/swiftui-view-refactor/SKILL.md
References
references/linear-queries.mdfor query templates and field suggestionsreferences/auth.mdfor API token guidance and auth-mode notesreferences/issue.graphql,references/project.graphql,references/team.graphqlfor runnable queriesreferences/plan-template.mdfor the Markdown plan skeletonskills/swift-concurrency-expert/SKILL.mdfor concurrency best practicesskills/swiftui-guidelines/SKILL.mdfor SwiftUI state/data flow and async patternsskills/swiftui-liquid-glass/SKILL.mdfor iOS 26+ glass UI guidanceskills/swiftui-performance-audit/SKILL.mdfor performance checklistsskills/swiftui-ui-patterns/SKILL.mdfor UI scaffolding patternsskills/swiftui-view-refactor/SKILL.mdfor view structure conventions