N8n handoff
the governed runtime for agent skill workflows, off the leash but on the record
npx -y skills add runxhq/runx --skill n8n-handoffAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Validate a runx execution context and hand off a governed payload to an n8n workflow webhook with scoped auth, idempotency, and receipt expectations.
SKILL.md
3.1 KB, as published. Nobody here has run it
n8n Handoff
Hand off governed runx work to an n8n workflow without turning n8n into the authority holder.
This skill is for the outbound side of the n8n integration story. runx owns the policy decision, credential delivery, execution context, and receipt. n8n owns its workflow webhook, canvas, branching, fan-out, and downstream notifications.
Runners
preflight: validates and normalizes the handoff context without network.send: validates the context and posts the payload to the n8n webhook.
Use preflight for reviews, CI, and local harnesses; it never needs approval.
The send runner opens approval immediately before the outbound webhook. It
posts through Runx's native http.execute capability; there is no handoff-
specific HTTP wrapper or token-bearing manifest.
Because an n8n host may be self-hosted, bind the stored credential to that exact HTTPS audience when configuring it:
printf '%s' "$N8N_WEBHOOK_TOKEN" |
runx credential set n8n \
--profile workflow \
--auth-mode bearer \
--audience https://n8n.example.com \
--from-stdin
Then pass the same host without a scheme as webhook_host. Runx intersects
the request allowlist with the credential audience before sending. A bare
ambient N8N_WEBHOOK_TOKEN has no safe host binding for this dynamic-provider
case and therefore cannot authorize the HTTP call.
Execution context
execution_context must identify where the handoff came from. Include at least
one of:
callerorcaller_idprincipalorprincipal_idworkflow,workflow_id,workflow_ref, orsource_workflowupstream_execution_idorupstream_run_id
When present, these fields must match the top-level inputs:
platformevent_ididempotency_keyhandoff_scopehandoff_audience
Edge cases
- Cloud n8n cannot call a local shell or localhost runx process. Use hosted runx APIs for public n8n listing work.
- Self-hosted n8n can receive local outbound webhooks, but the receiver endpoint still needs an operator-owned bearer token and idempotency check.
- A profile audience and
webhook_hostmust name the same host. Runx rejects a mismatch before credential material reaches the HTTP transport. - Do not put raw provider credentials into
payloadorexecution_context. Pass credential references or let runx hold the provider secret. - If the workflow slug changes, update
handoff_audienceto the matchingn8n:workflow:<slug>value. - The receiver must dedupe by
event_idbefore branching or sending downstream notifications.
Inputs
event_id(required): stable id for receiver-side dedupe.execution_context(required): explicit caller/workflow context.payload(required): business payload delivered to n8n.handoff_audience(optional): defaults ton8n:workflow:runx-governed-effect.webhook_hostandworkflow_slug(send runner): public n8n endpoint parts.idempotency_key(optional): defaults toevent_id.