smarzban/agent-sdlc/linear-sync
Claude Code and agent skill by smarzban/agent-sdlc
- community
Checking that the SKILL.md file is still in the repository.
Optional layer that mirrors each Agent SDLC stage's output into Linear — initiative (product) -> project (feature) -> milestone (build phase) -> issue (task) — idempotently. Invoked by each pipeline stage at its hand-off when Linear sync is enabled in .agent-sdlc/config.json. Use when mirroring Agent SDLC specs to Linear, creating/updating a feature's Linear project, or performing a stage's Linear action. Skips silently when disabled or the Linear MCP is absent.
Install
npx vskill@latest install smarzban/agent-sdlc/linear-syncSKILL.md
Linear sync: mirror Agent SDLC into Linear
Optional engine that mirrors the Agent SDLC pipeline into Linear as you move through the stages. It is not a pipeline stage and not on the criterion -> component -> product -> task spine — each stage calls it at its hand-off. All the mechanics (config, the stage->entity mapping, ID persistence, idempotency, and the Linear API gotchas) live here, stated once, so the stage skills stay focused on the methodology.
Uses the plugin:linear MCP (tools namespaced mcp__plugin_linear_linear__*; load them with ToolSearch when deferred, e.g. select:mcp__plugin_linear_linear__save_project).
Guards — check BOTH first, every time
If either fails, skip all Linear work and say so in one line. Never fail or block the pipeline because Linear is unavailable.
- Enabled?
.agent-sdlc/config.jsonhaslinear.enabled: true. If absent or false, skip. - MCP available? The
mcp__plugin_linear_linear__*tools resolve (they will not in a
headless/cron run). If not, skip.
Config — .agent-sdlc/config.json
Enable/disable is just flipping linear.enabled. Nothing else in Agent SDLC changes.
Hierarchy (summary; full mapping in reference/mapping.md)
- Initiative = the product — one, resolved by name (or created) via
save_initiative. It
carries the project-tier artifacts directly: ## Overview as its description + summary, and ## Architecture / ## Tech Stack as documents attached to it (save_document with an initiative parent).
- Project = an Agent SDLC feature. Milestones and issues hang under it.
- Milestone = a build phase; Issue = a task (`T-N`).
- Version = a label
version:v1(point releasesversion:v1.2); labels aretype:*+area:*. Version is decoupled from structure — a project is a feature, never a version; the number is a release-time call: PATCH = fixes · MINOR = additive features · MAJOR = a breaking change or a deliberate flagship feature.
Idempotency — mandatory; re-running a stage must never duplicate
Before any create, in order:
- Read the IDs file (
linear.idsFile). If it already has the entity's id,save_*BY id (update). - Otherwise
list_*/get_*by name to find an existing entity; if found, update by id; else create. - Persist every new id back to the IDs file immediately.
- For initiative links, VERIFY with
get_project— asave_projectresponse alone can silently
fail to link (returns initiatives: []).
The linear-ids.json shape is in reference/mapping.md.
Gotchas — bake every one in
- Never HTML-escape. Send literal
&,<, quotes, and real newlines — not&or a
backslash-n. The MCP stores exactly what you send; escaped text shows up literally.
- Resolve the initiative, don't guess.
list_initiatives/get_initiativefind it by name,
and save_initiative creates or updates it (pass id to update) — the MCP fully supports initiatives. When LINKING a feature-project to it, pass the resolved id and VERIFY with get_project: a save_project link by name can silently no-op (returns initiatives: []).
- No delete tools exist. Never design a flow that needs to delete a project or milestone;
prefer list/get-then-update, and don't over-create.
- Idempotency is mandatory (procedure above).
- `save_issue`:
team+titlerequired on CREATE;stateis a status NAME
("Backlog"/"Todo"/"In Progress"/"In Review"/"Done"); milestone/project by id; labels by NAME (the label must already exist — create it first with create_issue_label); links:[{url,title}] attaches PRs. On UPDATE pass id, NOT team.
- `save_document`:
title+ exactly ONE parent (project). - Graceful absence: if disabled or the MCP is missing, skip with a notice; never fail the run.
- GitHub-synced issues sync on CONTENT, both ways. If a repo↔team GitHub Issues Sync exists,
editing a synced (e.g. Triage-imported) issue's title or description propagates back to the public GitHub issue — independent of the one-way/two-way creation setting. When promoting such an issue, change only project / labels / milestone / state — do NOT rewrite its title/description (keep SDLC notes in the feature docs or a comment); delete_attachment to unlink the GitHub link first if you must restructure it. (Incident on record: promoting a Triage issue silently overwrote the external reporter's public issue.)
Reverse mapping — Linear -> spec (ingestion)
The same stage->entity table read backwards is how a stage materializes a plan that already lives in Linear into the canonical spec (the input-resolution flow; build's ingest adapter). It is a read of Linear, not a write — the only write is to the spec file, stamped with a provenance marker.
- Issue (`T-N`) -> a task in the
## Plansection; carry itsAC-Nif the issue records one,
else mark the task AC: untraced (never fabricate a criterion).
- Milestone -> a build phase; Project -> the feature (
docs/specs/<feature>/<feature>.md);
Initiative -> the product (docs/specs/overview.md). Reverse-mapped writes land in the repo's actual spec tree (root specs/ where one already exists — the back-compat rule in getting-started).
- Faithful, not creative. Transcribe only what the Linear entities contain; do not invent tasks,
criteria, or components to fill the chain. Missing upstream links stay untraced and surface in the gate's coverage note.
- One source of truth. After ingestion the materialized spec is what build executes — not the
Linear issues directly (which can drift). The guards above still apply (skip cleanly if the MCP is absent). See input-resolution.
What each stage does
At its hand-off, each pipeline stage performs its Linear action AFTER writing its ## section — the document content IS that section. The full stage -> Linear action table (idea, acceptance-criteria, architecture-design, techstack, plan, gate, build, pr-review) is in reference/mapping.md. build and pr-review only transition the milestones and T-N issues that plan already created (Backlog → In Progress → In Review → Done, plus PR attachment) — they never create entities.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/linear-sync/SKILL.md
Popularity
- 7-day trend score
- 5
Refreshed 14 Oct 2026, 20 days ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/smarzban/agent-sdlc/linear-sync)