| name | hand-off |
| description | Split the current pane, launch a command in the new pane, confirm it started, then close self. Use when explicitly transferring work to a different agent or pane — e.g. escalating a hard reject, handing off to a human, or launching a parallel task. Not for the standard ship pipeline (those chain inline). Requires PLEXI_PANE_ID. |
| source | local |
Hand-Off
Split the current pane, start work in the new pane, confirm it's running, then close self. Use for explicit pane transfers — escalations, parallel task spawning, handing off to a human-monitored pane. The ship pipeline (implement → open-pr → validate-pr → merge-pr) chains inline; don't use hand-off there.
Invocation
/hand-off /some-skill # any slash command
/hand-off echo "hello" # any shell command
If invoked with no argument: scan the current conversation for the most recently scoped or confirmed issue number (e.g. a GitHub issue URL, "issue #N", or a RECOMMENDATION block pointing to issue N). If one is unambiguous, use /implement-issue N without asking. Only ask if no issue number is inferable.
Step 1 — Require Plexi context
: ${PLEXI_PANE_ID:?Must run inside a Plexi pane}
PLEXI=plexi${PLEXI_CHANNEL:+-$PLEXI_CHANNEL}
MY_ID=$PLEXI_PANE_ID
REPO_DIR=$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")
If PLEXI_PANE_ID is unset, stop with: "This skill must run inside a Plexi pane."
Step 2 — Resolve the command
Use the argument verbatim as the command. Derive a short label from it:
CMD='/some-skill 123'
LABEL='some-skill #123'
For a bare integer argument: treat as /implement-issue N.
Step 2b — Ensure ready label (implement-issue only)
If the resolved command is /implement-issue N (or a bare integer), extract the issue number(s) and add the ready label to each one that doesn't already have it:
LABELS=$(gh issue view $N --json labels --jq '[.labels[].name]')
if ! echo "$LABELS" | grep -q '"ready"'; then
gh issue edit $N --add-label "ready"
echo "Labeled #$N ready."
fi
Skip this step for any other command.
Step 3 — Split and launch
NEW_ID=$($PLEXI pane new "c \"$CMD\"" \
--right \
--from $MY_ID \
--cwd "$REPO_DIR" \
--no-focus)
$PLEXI pane name $NEW_ID "$LABEL"
Step 4 — Confirm running
Poll pane capture until output is non-empty. 10s timeout at 0.5s intervals.
for i in $(seq 1 20); do
OUTPUT=$($PLEXI pane capture $NEW_ID --lines 3 2>/dev/null)
if [[ -n "$OUTPUT" ]]; then
echo "Hand-off confirmed: pane $NEW_ID is active."
break
fi
sleep 0.5
done
Step 5 — Close self
$PLEXI pane close $MY_ID
This is the last command. The current pane closes immediately after.