@calltelemetry/openclaw-linear 0.8.7 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +40 -2
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -305,6 +305,7 @@ User comment → Intent Classifier (small model, ~2s) → Route to handler
305
305
  | "looks good, ship it" (during planning) | Runs plan audit + cross-model review |
306
306
  | "nevermind, cancel this" (during planning) | Exits planning mode |
307
307
  | "hey kaylee can you look at this?" | Routes to Kaylee (no `@` needed) |
308
+ | "@mal close this issue" | Routes to Mal (one-time detour) and closes the issue |
308
309
  | "what can I do here?" | Default agent responds (not silently dropped) |
309
310
  | "fix the search bug" | Default agent dispatches work |
310
311
  | "close this" / "mark as done" / "this is resolved" | Generates closure report, transitions issue to completed |
@@ -313,6 +314,41 @@ User comment → Intent Classifier (small model, ~2s) → Route to handler
313
314
 
314
315
  > **Tip:** Configure `classifierAgentId` to point to a small/fast model agent (like Haiku) for low-latency, low-cost intent classification. The classifier only needs ~300 tokens per call.
315
316
 
317
+ ### Agent Routing
318
+
319
+ The plugin supports a multi-agent team where one agent is the default (`isDefault: true` in agent profiles) and others are routed to on demand. Routing works across all webhook paths:
320
+
321
+ | Webhook Path | How agent is selected |
322
+ |---|---|
323
+ | `Comment.create` | `@mention` in comment text → specific agent. No mention → intent classifier may detect agent name ("hey kaylee") → `ask_agent` intent. Otherwise → default agent. |
324
+ | `AgentSessionEvent.created` | Scans user's message for `@mention` aliases → routes to mentioned agent for that interaction. No mention → default agent. |
325
+ | `AgentSessionEvent.prompted` | Same as `created` — scans follow-up message for `@mention` → one-time detour to mentioned agent. No mention → default agent. |
326
+ | `Issue.update` (assignment) | Always dispatches to default agent. |
327
+ | `Issue.create` (triage) | Always dispatches to default agent. |
328
+
329
+ **One-time detour:** When you `@mention` an agent in a session that belongs to a different default agent, the mentioned agent handles that single interaction. The session itself stays owned by whoever created it — subsequent messages without `@mentions` go back to the default. This lets you ask a specific agent for help without permanently switching context.
330
+
331
+ **Agent profiles** are configured in `~/.openclaw/agent-profiles.json`:
332
+
333
+ ```json
334
+ {
335
+ "agents": {
336
+ "mal": {
337
+ "label": "Mal",
338
+ "mentionAliases": ["mal"],
339
+ "isDefault": false
340
+ },
341
+ "zoe": {
342
+ "label": "Zoe",
343
+ "mentionAliases": ["zoe"],
344
+ "isDefault": true
345
+ }
346
+ }
347
+ }
348
+ ```
349
+
350
+ Each agent needs a unique set of `mentionAliases`. The `appAliases` field (e.g. `["ctclaw"]`) is separate — those trigger `AgentSessionEvent` from Linear's own `@app` mention system, not the plugin's routing.
351
+
316
352
  ### Deduplication
317
353
 
318
354
  The webhook handler prevents double-processing through a two-tier guard system:
@@ -993,10 +1029,12 @@ The handler dispatches by `type + action`:
993
1029
  Incoming POST /linear/webhook
994
1030
 
995
1031
  ├─ type=AgentSessionEvent, action=created
996
- │ └─ New agent session on issue → dedup → create LinearAgentApi run agent
1032
+ │ └─ New agent session → dedup → scan message for @mentions
1033
+ │ route to mentioned agent (or default) → run agent
997
1034
 
998
1035
  ├─ type=AgentSessionEvent, action=prompted
999
- │ └─ Follow-up message in existing session → dedup → resume agent with context
1036
+ │ └─ Follow-up message → dedup → scan message for @mentions →
1037
+ │ route to mentioned agent (one-time detour, or default) → resume agent
1000
1038
 
1001
1039
  ├─ type=Comment, action=create
1002
1040
  │ └─ Comment on issue → filter self-comments (viewerId) → dedup →
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/openclaw-linear",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "description": "Linear Agent plugin for OpenClaw — webhook-driven AI pipeline with OAuth, multi-agent routing, and issue triage",
5
5
  "type": "module",
6
6
  "license": "MIT",