skein_unclaim
Release the caller's lock on an issue AND atomically transition status to the caller-declared nextStatus. Three valid intents: nextStatus="in_progress" = handoff (status stays in_progress so a teammate can claim and continue; pair with a comment describing what's done); nextStatus="open" = give up (status reverts to open so the issue is visible again in skein_ready); nextStatus="deferred" = punt (status → deferred; set defer_until via a follow-up skein_update if needed). nextStatus="closed" is rejected — use skein_close instead, which carries reason + commits[]. reason is required (non-empty after trim) and lands on both the issue.unclaimed event and (when status actually changed) the issue.status_changed event. Idempotent on an already-unlocked issue (returns the issue post-state unchanged; nextStatus is ignored — use skein_update directly if you want to flip status without a lock). Caller must hold the lock or pass force=true (force_unlock: project owner, space owner, instance admin; others get force_unlock_forbidden); event reason becomes " (force-overridden)" on the force path. ANSWERS WITH AN ACKNOWLEDGEMENT by default — the id, the applied state and the new version, no issue card and no prose — so the expectedVersion cycle continues without a re-read; pass verbose for the full IssueDetail.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"id": "<id>",
"nextStatus": "<nextStatus>",
"reason": "<reason>"
},
"name": "skein_unclaim"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Full hierarchical issue id (e.g. "demo-42"). | |
| force | No | Bypass the lock-holder predicate. Needs force_unlock on the issue's project (project owner, space owner, instance admin); others get `force_unlock_forbidden`. Default: false. | |
| reason | Yes | Free-form reason annotation (non-empty after trim). Lands on issue.unclaimed.reason and, when status changed, issue.status_changed.reason. | |
| verbose | No | Return the full IssueDetail, prose included. Default false = acknowledgement: `id`, `ok`, `version` plus the post-state stamps that apply (`status`, `assignee`, lock / claim / close stamps) — no issue card and no free text. The version is always there, so the expectedVersion cycle needs no extra read. Details: skein_get_instructions. | |
| nextStatus | Yes | Required intent declaration: "in_progress" (handoff), "open" (give up), or "deferred" (punt). "closed" is rejected — use skein_close. |