Skip to content
Development
Skill

/resolve-handoff

Emit the complete Resolve handoff with exact modes, outcomes, test evidence, and publication state.

From plugin
omnigent
10k20 skills
Install
$ npx -y skills add omnigent-ai/omnigent --skill resolve-handoff --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/resolve-handoff

Context preview

The summary Claude sees to decide when to auto-load this skill.

Emit the complete Resolve handoff with exact modes, outcomes, test evidence, and publication state.

SKILL.md

resolve-handoff.SKILL.md
name: resolve-handoff
description: Emit the complete Resolve handoff with exact modes, outcomes, test evidence, and publication state.

Output — the resolution handoff

The **last thing in your final message** must be exactly one fenced ```json code block — the machine-readable handoff, parsed by taking the last ```json fence in the message. Same discipline as repro-agent:

  • Write whatever prose summary you like above it, but the ```json block is the

**last chunk** of the message, with nothing after its closing fence. Do not split the handoff across multiple sections or emit a second data block.

  • **One exception (author path):** you also emit an *interim* handoff right after

opening the PR (Step 3.5) so the workflow can post the PR link to Linear before Step 4 finishes. That is fine — the caller reads the **last** valid handoff in the session, so this final one supersedes the interim block. The interim block carries `pr_url` + a provisional `outcome`; this final block is authoritative.

  • Emit it as **JSON**, never YAML. Include **every** key below, always, even when

a value is empty (`""`, `[]`).

  • `mode` must be exactly `"reviewed_existing_pr"`, `"authored_fix"`, or

`"review_remediation"` — which entry path you took.

  • `outcome` must be **exactly one** of the string literals `"fixed"`,

`"partially_fixed"`, `"not_fixed"`, `"nothing_to_fix"`, `"needs_more_info"` — lowercase, no other wording. This is the field the caller reads, so it must match verbatim.

{
  "bug_url": "https://github.com/omnigent-ai/omnigent/issues/1234",
  "mode": "authored_fix",
  "outcome": "fixed",
  "problem_summary": "People see internal catalog IDs in the model picker instead of readable model names.",
  "solution_summary": "The model picker now shows a friendly name for every model.",
  "root_cause": "picker rendered raw catalog IDs because format_label() was never called on the option list",
  "fix_summary": "call format_label() when building picker options in web/src/model/picker.tsx",
  "files_changed": ["web/src/model/picker.tsx"],
  "facets": [
    {"symptom": "picker display", "outcome": "fixed", "test_transition": "test_1234 failed: raw IDs shown → passes: friendly labels"},
    {"symptom": "catalog default", "outcome": "nothing_to_fix", "test_transition": "already_fixed in #3448; skipped"}
  ],
  "tests": {
    "e2e": "tests/e2e_ui/model_catalog/test_1234.py",
    "added": ["tests/web/model/test_picker_label.py"]
  },
  "recordings": [
    {"surface": "web", "kind": "before", "path": "recordings/1234/before-picker.webm", "format": "webm",
     "capture_mode": "playwright_ui",
     "caption": "open the model picker → select the catalog → picker shows raw IDs"},
    {"surface": "web", "kind": "after", "path": "recordings/1234/after-picker.webm", "format": "webm",
     "capture_mode": "playwright_ui",
     "caption": "open the model picker → select the catalog → picker now shows friendly names"}
  ],
  "recording_unavailable_reason": "",
  "test_audit": "repro e2e was behavioral (failed on raw IDs); no rewrite needed",
  "impact_assessment": {
    "base_sha": "<full target-branch tip SHA>",
    "head_sha": "<full candidate HEAD SHA>",
    "worktree_state": "clean",
    "risks": [
      {
        "files": ["web/src/model/picker.tsx"],
        "behavior": "Changing labels can alter model selection or restoration",
        "consumers": ["model picker", "restored sessions"],
        "invariant": "Selections and restored sessions retain the same model IDs",
        "check": "<exact command exercising selection and session restoration>",
        "result": "passed",
        "evidence": "<retained output reference, tested build and environment>"
      }
    ],
    "uncovered_boundaries": [],
    "not_applicable_reason": ""
  },
  "remaining_work": [],
  "hermetic_check": "test_picker_label re-run with ambient env vars set — still passes",
  "pr_url": "https://github.com/omnigent-ai/omnigent/pull/4200",
  "reviewed_pr_url": "",
  "pushed_branch": "",
  "ci_status": "green (all required checks pass)",
  "polly_review": "clean: no blocking/security findings after 1 round (fixed a null-deref Polly flagged, re-triggered via workflow_dispatch)",
  "ui_preview": "labeled ui-preview on every PR; preview at https://…; posted connect instructions",
  "validation_surface": "server",
  "validation_prompt": "Reproduce and validate a bug fix. Steps: open the model picker in the catalog view… Before this fix, raw catalog IDs were shown. Confirm the fix by checking that friendly labels appear. Report whether each step now behaves correctly.",
  "maintainer_review": "requested review from @PattaraS (issue assignee)",
  "review_fingerprint": "",
  "handled_review_ids": [],
  "last_pushed_sha": "",
  "session_id": "dc59e331-..."
}

Field meanings:

  • `bug_url` — the bug link, carried through from the recovered handoff.
  • `mode` — `reviewed_existing_pr` (Step 2A: a candidate PR existed, you reviewed

it and kept it as the fix) or `authored_fix` (Step 2B: you wrote the fix). Use `authored_fix` when you started from an existing PR but opened your own — for **either** reason: its approach wasn't viable (2A.5), or its approach was fine but it was an unpushable **fork PR that needed a fix** so you took it over (Step 4 preamble). In both cases name the reviewed/forked PR in your prose and `reviewed_pr_url` so the two stay linked. Use `review_remediation` only when the input supplied `review_pr`; in that mode preserve the existing PR and branch and address its requested changes directly.

  • `review_fingerprint` / `handled_review_ids` / `last_pushed_sha` — populated in

review-remediation mode for scanner deduplication and workflow retry recovery; otherwise `""`, `[]`, and `""`.

  • `outcome` — overall: `fixed` (every live facet resolved and proven — by your fix

or by the reviewed PR — and the shared impact assessment has no unresolved required checks), `partially_fixed`, `not_

Read more
Ships withomnigent

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.

Get the whole plugin

Other skills on omnigent.