gsd-to-linear — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gsd-to-linear (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill reads a repo's .planning/ directory and creates corresponding Linear issues for any incomplete work. It's a one-time migration — run it once per repo, then use the linear-workflow skill going forward.
All linctl commands used by this skill are documented in plugins/linear/LINCTL_REFERENCE.md. Read it before running any linctl commands — it has exact flags and gotchas that prevent wasted calls.
linctl whoami.planning/ directory exists in the current repo.planning/STATE.md to understand where things standlinctl team list --json
linctl label list --team <TEAM_KEY> --jsonIf there's only one team, use it. If multiple, ask the user which one.
Migrates:
Stays behind (already done, or not task data):
The goal is to move remaining work into Linear, not to recreate the entire planning history.
cat .planning/PROJECT.md
cat .planning/ROADMAP.md
cat .planning/STATE.mdFrom ROADMAP.md, identify:
[x])From STATE.md, identify:
linctl project list --team <TEAM_KEY> --newer-than all_time --jsonIf the repo already has a Linear project, use it. If not, ask whether to create one. Use the folder-name-to-title-case convention from the linear-workflow skill.
Present the user with a summary before creating anything:
Migration plan for [repo name]:
>
Skipping (already done): - Phase 1: Foundation (4/4 plans complete) - Phase 2: Core Features (3/3 plans complete)
>
Will create issues for: - Phase 3: Polish & Deploy (0/2 plans started) - Plan 3-01: "Set up CI/CD pipeline" → Issue: "set up ci/cd pipeline" [Feature] - Plan 3-02: "Deploy to production" → Issue: "deploy to production" [Feature]
>
Will skip (no actionable plans): - Phase 2.1: Refactor (mentioned in roadmap but no plan files exist)
>
Create these issues?
Wait for confirmation before creating anything.
For each incomplete plan, create a Linear issue:
linctl issue create \
--title "descriptive title from plan objective" \
--team <TEAM_KEY> \
--project "Project Name" \
--labels "Feature" \
--description "Migrated from GSD phase N, plan N-MM. [objective from PLAN.md]"Title: Derive from the plan's <objective> block or the phase/plan name in ROADMAP.md. Rewrite to be lowercase, concise, action-oriented — don't just copy GSD's phase titles verbatim if they're stiff.
Labels: Map from the work type using whatever labels the team has available. Common mappings:
Description: Include:
<success_criteria> blockPriority: Don't set priority unless the ROADMAP makes it obvious. Let the user triage in Linear.
If a phase has multiple plans, you have two options — ask the user which they prefer:
linctl issue update <child> --parent <parent>. Better for phases with 4+ plans.After creating all issues, show the user what was created:
Migrated 4 issues to Linear: - TEAM-71: set up ci/cd pipeline [Feature] - TEAM-72: deploy to production [Feature] - TEAM-73: add error tracking [Improvement] - TEAM-74: write deployment docs [Content]
>
Your .planning/ directory is still here. Want me to archive it?
For archiving, suggest renaming to .planning-archived/ rather than deleting — the history has value even if it's not driving execution anymore.
Repo with no remaining work (all milestones complete):
"All phases in .planning/ are already complete. Nothing to migrate — you're starting fresh in Linear. Want me to archive .planning/?"
Repo with rich REQUIREMENTS.md: Don't try to map every requirement code to Linear labels. Instead, mention relevant requirement IDs in issue descriptions so the context isn't lost.
Phase exists in ROADMAP but has no plan files: Skip it and note it in the summary. The user can create fresh issues for this work using the linear-workflow skill.
Multiple milestones with incomplete work: Migrate the current milestone only. Ask about older milestones separately — they may be intentionally deferred.
Once issues are in Linear, the linear-workflow skill handles everything going forward. The GSD skills (/gsd:*) won't interfere — they only activate when explicitly invoked. But if the user wants a clean break, they can:
.planning/ → .planning-archived/.claude/settings.local.json~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.