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 |
tools
Build Teams-native agents with the Teams SDK (formerly Teams AI Library v2) — App class, activity routing, adaptive cards, streaming, AI-generated labels, feedback, message extensions, Teams-as-MCP-server, and the bring-your-own-AI pattern with Agent Framework.
tools
Run agents on Microsoft Foundry (formerly Azure AI Foundry) Agent Service — prompt agents vs hosted agents, threads/runs and the Responses API, built-in tools (Bing grounding, code interpreter, file search, MCP, OpenAPI, A2A), connected agents, Entra agent identity, SDKs, and observability/evaluations.
tools
Build and host custom engine agents with the Microsoft 365 Agents SDK — AgentApplication, the Activity protocol, channel reach via Azure Bot Service, hosting Agent Framework or Semantic Kernel engines, and the Agents Toolkit/Playground workflow. Successor to the Bot Framework SDK.
tools
Design, govern, and extend Microsoft Copilot Studio agents — topics, generative orchestration, knowledge, tools and MCP, agent flows, autonomous triggers, publishing channels, Copilot Credits pricing, and solution-based ALM on Power Platform.