Agent Skill
2/7/2026project-sync
Sync tasks between Dev Flow and project management tools (Linear, GitHub Issues). Pull tasks, create issues, update status, link commits. Triggers on "sync linear", "sync github", "pull tasks", "create issue", "link commit", "update issue", "/sync", "what's assigned to me".
D
dorrianguy
0GitHub Stars
2Views
npx skills add dorrianguy/devflow
SKILL.md
| Name | project-sync |
| Description | Sync tasks between Dev Flow and project management tools (Linear, GitHub Issues). Pull tasks, create issues, update status, link commits. Triggers on "sync linear", "sync github", "pull tasks", "create issue", "link commit", "update issue", "/sync", "what's assigned to me". |
name: project-sync description: Sync tasks between Dev Flow and project management tools (Linear, GitHub Issues). Pull tasks, create issues, update status, link commits. Triggers on "sync linear", "sync github", "pull tasks", "create issue", "link commit", "update issue", "/sync", "what's assigned to me".
Project Sync
Bidirectional sync between Dev Flow conversations and project management tools. Supports Linear and GitHub Issues.
When to Use
- Pull tasks from Linear/GitHub into conversation
- Create issues from conversation context
- Update issue status when work is shipped
- Link commits to issues automatically
- View assigned tasks
- Triage and prioritize work
Supported Platforms
| Platform | API | Features |
|---|---|---|
| Linear | GraphQL | Full CRUD, labels, cycles, projects |
| GitHub Issues | REST/GraphQL | Issues, PRs, labels, milestones |
| GitHub Projects | GraphQL | Project boards, custom fields |
Input Handling
For Pull:
platform: linear, github, or auto-detectfilter: assigned, mentioned, team, projectstatus: todo, in_progress, done, all
For Create:
title: Issue title (auto-generated if not provided)description: Issue body (from conversation context)labels: Array of labels to applyassignee: Who to assign (defaults to current user)
For Update:
issue_id: Issue identifierstatus: New statuscomment: Optional comment to add
Instructions
Configuration
Store credentials in ~/.claude/integrations/:
// ~/.claude/integrations/linear.json
{
"api_key": "lin_api_xxx",
"team_id": "TEAM_ID",
"default_project": "PROJECT_ID"
}
// ~/.claude/integrations/github.json
{
"token": "ghp_xxx",
"owner": "username",
"repo": "repo-name",
"default_labels": ["dev-flow"]
}
Pull Tasks
From Linear
query AssignedIssues($userId: String!) {
issues(filter: { assignee: { id: { eq: $userId } }, state: { type: { in: ["triage", "backlog", "unstarted", "started"] } } }) {
nodes {
id
identifier
title
description
state { name }
priority
labels { nodes { name } }
project { name }
cycle { name number }
}
}
}
From GitHub
gh issue list --assignee @me --state open --json number,title,body,labels,milestone
Output Format (Pull)
## Your Tasks
### Linear (5 tasks)
| ID | Title | Status | Priority | Project |
|----|-------|--------|----------|---------|
| ENG-123 | Add dark mode toggle | In Progress | High | Capsule |
| ENG-124 | Fix checkout bug | Todo | Urgent | Capsule |
| ENG-125 | Update API docs | Backlog | Medium | Platform |
### GitHub (3 issues)
| # | Title | Labels | Milestone |
|---|-------|--------|-----------|
| #45 | Improve error messages | enhancement | v2.0 |
| #42 | Add retry logic | bug | v1.5 |
| #38 | Document webhooks | docs | - |
### Quick Actions
- `/sync start ENG-123` - Start working on task
- `/sync done ENG-123` - Mark as complete
- `/sync create` - Create issue from conversation
Create Issue
Auto-Generate from Conversation
When user says "create issue" or "track this":
-
Extract context:
- Current thread goal
- Key decisions made
- Acceptance criteria discussed
- Any code files mentioned
-
Generate issue:
## Title
[Extracted from thread goal]
## Description
**Context:** [Summary of conversation]
**Acceptance Criteria:**
- [ ] [Criterion 1]
- [ ] [Criterion 2]
**Technical Notes:**
- [Any technical details discussed]
**Related Files:**
- `path/to/file.ts`
---
*Created via Dev Flow*
*Thread: [thread_id]*
- Create via API:
Linear:
mutation CreateIssue($input: IssueCreateInput!) {
issueCreate(input: $input) {
issue {
id
identifier
url
}
}
}
GitHub:
gh issue create --title "Title" --body "Body" --label "dev-flow"
Update Status
On Thread Completion
When a thread ships successfully:
- Check if linked to an issue
- Update status to "Done" / "Closed"
- Add completion comment with summary
Linear:
mutation UpdateIssue($id: String!, $stateId: String!) {
issueUpdate(id: $id, input: { stateId: $stateId }) {
issue { id state { name } }
}
}
GitHub:
gh issue close 45 --comment "Shipped via Dev Flow. Thread: abc123"
Link Commits
Auto-Link on Commit
When committing with issue reference:
- Parse commit message for issue IDs (ENG-123, #45)
- Add comment to issue with commit link
- Update issue status if keywords present (fixes, closes)
Commit Message Format:
feat: Add dark mode toggle
Implements ENG-123
- Added ThemeProvider
- Created toggle component
- Updated all color variables
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Auto-Comment on Issue:
🔗 Linked commit: abc1234
**Changes:**
- Added ThemeProvider
- Created toggle component
- Updated all color variables
*Committed via Dev Flow*
Required Output Sections
Task List
## Your Tasks
**Platform:** {{platform}}
**Filter:** {{filter}}
**Last Synced:** {{sync_time}}
### Active ({{active_count}})
{{#each active_tasks}}
#### {{identifier}} - {{title}}
- **Status:** {{status}}
- **Priority:** {{priority}}
- **Labels:** {{labels}}
- **Updated:** {{updated_at}}
{{/each}}
### Quick Actions
- Type `start {{first_task_id}}` to begin working
- Type `create issue` to track current work
Issue Created
## Issue Created
**Platform:** {{platform}}
**ID:** {{identifier}}
**URL:** {{url}}
### Details
- **Title:** {{title}}
- **Status:** {{status}}
- **Labels:** {{labels}}
- **Assignee:** {{assignee}}
The issue has been linked to this conversation.
When you ship, the issue will be automatically updated.
Status Updated
## Issue Updated
**{{identifier}}** → **{{new_status}}**
{{#if comment}}
**Comment Added:**
> {{comment}}
{{/if}}
{{#if linked_commit}}
**Linked Commit:** {{commit_sha}}
{{/if}}
Guardrails
- Never store API keys in conversation
- Verify issue exists before updating
- Don't auto-close issues without user confirmation
- Respect rate limits (Linear: 1500/hr, GitHub: 5000/hr)
- Handle API errors gracefully
Commands
/sync
/sync # Pull all assigned tasks
/sync linear # Pull from Linear only
/sync github # Pull from GitHub only
/sync start ENG-123 # Start working on task
/sync done ENG-123 # Mark task complete
/sync create # Create issue from context
/sync link ENG-123 # Link current thread to issue
/sync status # Show sync status
/issue
/issue create "Title" # Quick create
/issue close 45 # Close issue
/issue comment 45 "msg" # Add comment
Trigger Patterns
if (/(sync linear|sync github|pull tasks|create issue|link commit|update issue|what's assigned|\\/sync|my tasks|assigned to me)/i.test(objective)) {
// Run project-sync
}
Integration
Dependencies:
- Linear API key (optional)
- GitHub CLI authenticated (optional)
Triggers:
- Auto-runs on thread completion (if issue linked)
- Auto-runs on commit (for linking)
Pairs With:
launch-planner- Create issues from planschangelog-generator- Reference issues in changelog
Setup Guide
Linear Setup
- Generate API key at linear.app/settings/api
- Save to
~/.claude/integrations/linear.json - Run
/sync linearto test
GitHub Setup
- Run
gh auth login - Save config to
~/.claude/integrations/github.json - Run
/sync githubto test
Version History
- v1.0.0: Initial release with Linear and GitHub support
Skills Info
Original Name:project-syncAuthor:dorrianguy
Download