smarzban/agent-sdlc/linear-sync

Claude Code and agent skill by smarzban/agent-sdlc

Trust tier 2
  • community
LLM review pending
Source check pending

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-sync

SKILL.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.

  1. Enabled? .agent-sdlc/config.json has linear.enabled: true. If absent or false, skip.
  2. 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

json
{
"linear": {
"enabled": false,
"initiative": "<exact initiative name or UUID>",
"team": "<team name or id>",
"idsFile": ".agent-sdlc/linear-ids.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 releases version:v1.2); labels are type:* + 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:

  1. Read the IDs file (linear.idsFile). If it already has the entity's id, save_* BY id (update).
  2. Otherwise list_* / get_* by name to find an existing entity; if found, update by id; else create.
  3. Persist every new id back to the IDs file immediately.
  4. For initiative links, VERIFY with get_project — a save_project response alone can silently

fail to link (returns initiatives: []).

The linear-ids.json shape is in reference/mapping.md.

Gotchas — bake every one in

  1. Never HTML-escape. Send literal &, <, quotes, and real newlines — not &amp; or a

backslash-n. The MCP stores exactly what you send; escaped text shows up literally.

  1. Resolve the initiative, don't guess. list_initiatives / get_initiative find 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: []).

  1. 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.

  1. Idempotency is mandatory (procedure above).
  2. `save_issue`: team + title required on CREATE; state is 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.

  1. `save_document`: title + exactly ONE parent (project).
  2. Graceful absence: if disabled or the MCP is missing, skip with a notice; never fail the run.
  3. 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 ## Plan section; carry its AC-N if 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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/smarzban/agent-sdlc/linear-sync/badge)](https://verified-skill.com/skills/smarzban/agent-sdlc/linear-sync)

Something wrong with this skill or its page? Tell us.