handoff — cross-agent task delegation

NAME

handoff — delegate a task from an external coding agent to SLICC through a base64url-encoded URL fragment

SYNOPSIS

https://www.sliccy.ai/handoff#<base64url-json>

.agents/skills/slicc-handoff/scripts/slicc-handoff [--open] [--stdin] <payload.json>
cat payload.json | .agents/skills/slicc-handoff/scripts/slicc-handoff [--open]

DESCRIPTION

A handoff lets an external agent (Claude Code, Codex, Cursor, or any tool that can open a browser tab) pass a structured task to SLICC. A JSON payload is base64url-encoded into the URL fragment of a handoff page. No server round-trip is needed — the fragment never leaves the browser.

When the handoff URL is opened in a tab, both the Chrome extension and the standalone CLI app detect it. SLICC queues the task as a pending handoff and shows an Accept / Dismiss prompt in the Chat tab. The human reviews the payload and decides whether to proceed.

Supported URL:

PAYLOAD SHAPE

The JSON payload has one required field and five optional fields:

HELPER

The slicc-handoff skill bundles a Node.js helper script that builds the handoff URL from a JSON file or piped stdin.

.agents/skills/slicc-handoff/scripts/slicc-handoff payload.json
.agents/skills/slicc-handoff/scripts/slicc-handoff --open payload.json
cat payload.json | .agents/skills/slicc-handoff/scripts/slicc-handoff --open

The helper validates the payload (checks that instruction is a non-empty string, urls and acceptanceCriteria are string arrays when present, and title, context, notes are strings when present), then prints the full handoff URL to stdout.

WORKFLOW

  1. The external agent builds a JSON payload with at minimum an instruction field.
  2. The payload is passed to the helper script (or manually base64url-encoded).
  3. The helper prints the handoff URL. With --open, it also opens the URL in the default browser.
  4. SLICC (extension or CLI) detects the handoff tab and queues it.
  5. The human sees an Accept / Dismiss prompt in the Chat tab.
  6. On accept, SLICC begins executing the task with the provided context.

EXAMPLES

# Minimal handoff — just an instruction
echo '{"instruction": "Run the test suite and fix any failures"}' | \
  .agents/skills/slicc-handoff/scripts/slicc-handoff --open

# Full payload from a file
cat <<'EOF' > /tmp/handoff.json
{
  "title": "Verify signup flow",
  "instruction": "Continue this task in SLICC and verify the signup flow works end to end.",
  "urls": ["http://localhost:3000/signup"],
  "context": "The local coding agent already changed the validation and submit flow.",
  "acceptanceCriteria": [
    "The signup form renders",
    "Submitting valid data reaches the success state",
    "No uncaught console errors appear"
  ],
  "notes": "Use the currently signed-in browser session."
}
EOF
.agents/skills/slicc-handoff/scripts/slicc-handoff --open /tmp/handoff.json

# Pipe JSON directly from another tool
curl -s https://api.example.com/task/123 | \
  jq '{instruction: .description, urls: [.url], title: .name}' | \
  .agents/skills/slicc-handoff/scripts/slicc-handoff --open

ENCODING

The payload is serialized as UTF-8 JSON, then encoded with base64url (RFC 4648 §5, no padding). The encoded string is placed after the # in the URL. Because the fragment is never sent to the server, the handoff is fully client-side — no payload data touches the network.

RUNTIME COMPATIBILITY

Handoff detection works in both the Chrome extension and the standalone CLI. The extension's service worker watches for tabs matching the handoff URL pattern. The CLI app's BrowserAPI performs the same check. Both runtimes extract the fragment, decode the payload, and present the approval prompt identically.

SEE ALSO

cone, scoop, feed_scoop, skill, lick