beads-linear-sync
Sync beads and Linear so agent state and human tracker stay aligned.
Skill by thunter009
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/thunter009-beads-linear-sync
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/beads-linear-sync
What's inside
- Skill name
beads-linear-sync- Description
- Sync beads and Linear so agent state and human tracker stay aligned.
- License
- MIT
- Instructions
- 252 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (2)
- SKILL.md
- sync.sh · scripts/
SKILL.md (first lines)
# /beads-linear-sync
Bidirectional sync between `br` (beads_rust) and `linear` CLI. Beads is the agent workspace; Linear is the human UI.
## Architecture
```
Linear (human UI) <──pull──> beads (agent workspace)
<──push──>
```
- **Pull**: Import Linear issues into beads so agents can work locally
- **Push**: Update Linear to reflect beads state changes (status, priority, new issues)
- **Reconcile**: Detect drift, report conflicts, resolve with configurable policy
## Prerequisites
```bash
br --version # beads_rust CLI
linear --version # Linear CLI (schpet/linear-cli)
```
Both must be authenticated. Beads must be initialized (`br init` if no `.beads/` dir).
## Arguments
| Flag | Default | Description |
|------|---------|-------------|
| `--mode` | `pull` | `pull`, `push`, `reconcile`, or `dry-run` |
| `--project` | none | Linear project filter |
| `--team` | none | Linear team key filter |
| `--cycle` | none | Linear cycle filter (e.g., `active`) |
| `--conflict` | `newest` | Conflict policy: `newest`, `prefer-local`, `prefer-linear` |
| `--label` | none | Apply a Linear label to agent-created issues (e.g., `agent-managed`) |
## State Mapping
| Linear State | Beads Status | Direction | Notes |
|---|---|---|---|
| `triage` | `open` | pull only | push: `open` -> `unstarted` (lossy; triage/backlog collapse) |
| `backlog` | `open` | pull only | push: `open` -> `unstarted` (lossy; triage/backlog collapse) |
| `unstarted` | `open` | both | |
| `started` | `in_progress` | both | |
| `completed` | `closed` | both | |
| `canceled` | `closed` | pull only | push: `closed` -> `completed` (lossy; canceled state lost) |
**Lossy mappings**: Beads has 3 statuses vs Linear's 6 states. Pulling is lossless, but pushing `open` always becomes `unstarted` and `closed` always becomes `completed`. If the original Linear state was `triage`, `backlog`, or `canceled`, that nuance is lost on push. To preserve it, store the original Linear state in the `--external-ref` or description marker.
| Linear Priority | Beads Priority | Notes |
|---|---|---|
| 0 (No priority) | P4 | backlog |
| 1 (Urgent) | P0 | critical |
| 2 (High) | P1 | high |
| 3 (Medium) | P2 | medium |
| 4 (Low) | P3 | low |
## Workflow
### 1. Detect Context
```bash
# Verify tools available
br --version 2>/dev/null || { echo "br not found"; exit 1; }
linear --version 2>/dev/null || { echo "linear not found"; exit 1; }
# Check beads initialized
br info 2>/dev/null || { echo "No .beads/ dir; run br init first"; exit 1; }
# Get Linear team context
linear team list --no-pager 2>/dev/null | head -5
```
### 2. Pull (Linear -> Beads)
Import Linear issues into beads. Safe by default; never overwrites local beads changes without confirmation.
```bash
# 1. Fetch Linear issues (scoped). linear list has no --json; parse text output
# Or fetch each issue individually with --json for structured data
linear issue list --all-states --all-assignees --limit 100 --no-pager
# For structured data, iterate identifiers through:
linear issue view ENG-123 --json --no-pager
# 2. For each Linear issue, check if bead exists
# Match by: Linear URL in bead description, or title match
br search "ENG-123" 2>/dev/null
# 3. Create missing beads (use --external-ref for the Linear link)
br create --title "Issue title" --priority 2 --status open \
--external-ref "linear:ENG-123" \
--description "Linear: ENG-123 - https://linear.app/team/issue/ENG-123"
# 4. Update existing beads if Linear state is newer
br update <bead-id> --status in_progress --priority 1
```
**Matching strategy** (in priority order):
1. External ref match: `br list --json | jq '.[] | select(.external_ref == "linear:ENG-123")'`
2. Description contains Linear identifier: `br list --desc-contains "ENG-123"`
3. Title search: `br search "issue title keywords"`
Note: `br search` is free-text (title-oriented). `--external-ref` is not directly queryable; use `br list --json` + filter for structured matching.
### 3. Push (Beads -> Linear)
Update Linear to reflect beads state. Only pushes changes since last sync.
```bash
# 1. List beads with recent changes
br list --status open --json 2>/dev/null
br list --status closed --json 2>/dev/null
br list --status in_progress --json 2>/dev/null
# 2. For each bead with a Linear link, check if states match
linear issue view ENG-123 --json --no-pager
# 3. Update Linear if bead state is newer
linear issue update ENG-123 --state started
linear issue update ENG-123 --priority 2From thunter009/skills, MIT.
More from thunter009/skills
- 0.570score
decision-canvas
thunter009
Present batched user decisions as an interactive atrium canvas with inline grounding — code snippets with real line numbers, click-to-open file links, and…
SkillAFreshness: AClaude Code +9 - 0.529score
clean
thunter009
End-of-work cleanup sweep for a multi-agent repo — safely land genuine unpushed commits, squash open PRs, prune merged branches and worktrees, clean the…
SkillBFreshness: BClaude Code +9 - 0.526score
autoreview
thunter009
Run a structured code review (Codex default, Claude optional) as a closeout check on a local or PR branch before commit or ship.
SkillBFreshness: BClaude Code +9 - 0.520score
bug-hunt
thunter009
Run a multi-phase bug hunt with Codex, Gemini, or Claude.
SkillBFreshness: BClaude Code +9 - 0.518score
create-pull-request
thunter009
Open a GitHub pull request with repo-specific PR conventions.
SkillBFreshness: BClaude Code +9 - 0.514score
agents-md
thunter009
Create repo-specific AGENTS.md guardrails from the codebase.
SkillBFreshness: BClaude Code +9 - 0.479score
enrich-ticket-detail
thunter009
Flesh out thin or empty beads/Todoist items by mining git history, code-at-HEAD, closed tickets, and the session journal, then verify every drafted claim…
SkillCFreshness: CClaude Code +9 - 0.476score
codebase-knowledge-graph
thunter009
Build an interactive knowledge graph of any codebase via the Understand-Anything pipeline, with a batch-integrity guard the raw plugin lacks.
SkillCFreshness: CClaude Code +9 - 0.476score
docs-organize
thunter009
Reorganize loose files already in a folder into its subfolder taxonomy, with hash-based dedup, dry-run preview, and collision-safe moves.
SkillCFreshness: CClaude Code +9 - 0.474score
devbox-cleanup
thunter009
Clean up a project checkout on a remote dev box — tear down a stale agent swarm, verify unpushed work is superseded, reset the checkout to origin, and restart…
SkillCFreshness: CClaude Code +9 - 0.470score
domain-modeling
thunter009
Build and sharpen a project's ubiquitous language — a CONTEXT.md glossary plus sparse ADRs — challenging terms against the glossary and cross-referencing code…
SkillCFreshness: CClaude Code +9 - 0.469score
design
thunter009
Take a feature idea from fuzzy to build-ready — grill, prototype, then plan.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jul 14, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/thunter009/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from thunter009
- 0.570score
decision-canvas
thunter009
Present batched user decisions as an interactive atrium canvas with inline grounding — code snippets with real line numbers, click-to-open file links, and…
SkillAFreshness: AClaude Code +9 - 0.529score
clean
thunter009
End-of-work cleanup sweep for a multi-agent repo — safely land genuine unpushed commits, squash open PRs, prune merged branches and worktrees, clean the…
SkillBFreshness: BClaude Code +9 - 0.526score
autoreview
thunter009
Run a structured code review (Codex default, Claude optional) as a closeout check on a local or PR branch before commit or ship.
SkillBFreshness: BClaude Code +9 - 0.520score
bug-hunt
thunter009
Run a multi-phase bug hunt with Codex, Gemini, or Claude.
SkillBFreshness: BClaude Code +9 - 0.518score
create-pull-request
thunter009
Open a GitHub pull request with repo-specific PR conventions.
SkillBFreshness: BClaude Code +9 - 0.514score
agents-md
thunter009
Create repo-specific AGENTS.md guardrails from the codebase.
SkillBFreshness: BClaude Code +9
Cite this page
beads-linear-sync skill. Agent Mart. https://agentmart.dev/skills/thunter009-beads-linear-sync (last updated 2026-10-24)