plugins/linear-orchestrator/skills/harness-bridge/SKILL.md
This skill should be used when implementing or debugging two-way sync between Linear issues and Harness Code (branches, PRs, deploys, Git Experience, custom approvals, triggers). Activates on "harness sync", "harness bridge", "linear-harness", "harness code linear".
npx skillsauth add markus41/claude Harness Code ↔ Linear BridgeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
References:
┌──────────────┐ webhook ┌──────────────┐ webhook ┌────────────┐
│ Linear │───────────▶ │ Bridge HTTP │ ◀──────────│ Harness │
│ API │ ◀───────────│ handler │───────────▶│ Code │
└──────────────┘ GraphQL └──────┬───────┘ REST API └────────────┘
│
SQLite state
(lib/state.ts)
The bridge holds:
branch: label → POST /v1/repos/{repo}/branches with name = linear/{key}-{slug}PATCH /v1/repos/{repo}/pulls/{n}linear:ready-to-merge via POST /v1/repos/{repo}/pulls/{n}/labelsENG-123 in title → look up issue, link via attachmentLinkCreate, set state to "In Review" if currently "In Progress"deployed:<env> or reopen on failureEvery Harness webhook event has eventId. The bridge:
eventId firstevents_processed tableLinear webhooks key off delivery.id similarly.
Every 6h the bridge runs reconcile():
updatedAt filter)Pattern: Harness pipeline has a Custom Approval step that calls back to the bridge:
- step:
type: CustomApproval
name: Linear Approval
spec:
url: https://your-bridge.example.com/harness/approval
method: POST
requestBody: |
{ "issue": "ENG-123", "executionId": "<+execution.id>" }
The bridge:
ENG-123 with [Approve via Harness] [Reject] rendered as Linear smart-buttonsreactionCreate event) or the assignee's status change{ "approved": true } or { "rejected": true, "reason": "..." }Linear labels → Harness tags (1:1, lowercase, hyphenated). On sync the bridge:
linear:bug for issues with bug labellinear:p1 for priority 1On /linear:setup --mode bridges, the bridge:
linear_api_key)POST /ng/api/connectors<+connectors.linear>| Failure | Behaviour |
|---------|-----------|
| Harness 401 | Refresh token; if still 401 alert and pause bridge |
| Harness 5xx | Backoff up to 3 retries → DLQ |
| Linear rate-limited | Wait for budget reset, retry |
| Webhook signature mismatch | Reject + log + alert (potential attack) |
| State store corruption | Halt bridge, require manual /linear:harness-sync reconcile --apply |
development
Enhanced plan-authoring skill with Pre-Writing context gathering, task metadata, non-TDD templates, Red Flags, telemetry, and an automated plan linter. Use when you have a spec or requirements for a multi-step task, before touching code.
tools
Documentation intelligence engine with graph-based API docs, algorithm library, and drift detection
tools
Ultraplan cloud planning — kick off a plan in the cloud from your terminal, review and revise in the browser, then execute remotely or send back to CLI
tools
--- name: mcp description: Configure MCP servers for Claude Code — stdio vs HTTP, authentication, Tools/Resources/Prompts distinction, channels (CI webhook, mobile relay, Discord bridge, fakechat), and cost of always-loaded tools. Use this skill whenever adding an MCP server, debugging connection issues, choosing between MCP Tools vs Prompts vs Resources, installing channel servers, or managing .mcp.json. Triggers on: "MCP server", "mcp config", "add Obsidian MCP", "install context7", "channels"