artzain

n8n nodes for the CogNEXUS Decision API and envelope proxy. Fail closed on HTTP 503. review does not wait inside n8n.

Documentation

@cognexuslabs/n8n-nodes-artzain

n8n community nodes that wrap CogNEXUS Decision (pattern A) and
Envelope (pattern B) so operators do not hand-assemble JSON.

Nodes

Node What it does
CogNEXUS Decision POST /api/v1/decisions. Three outputs: Allow / Review / Deny. HTTP 503 / 401 / 422 land on Deny, and so does a redirect (3xx), which is not followed. Review does not wait inside n8n — a human owns it in the dashboard Review Queue. Wire side effects only to Allow.
CogNEXUS Envelope POST /api/v1/envelope/v1/chat/completions with a cnxe_… key. Screens model traffic. It does not gate a later Stripe/Gmail node.

Request ID (Decision node)

The Decision node's Request ID field is the server's idempotency key.
Leave it empty and the node derives n8n-<executionId>-<item> — unique per
n8n execution, so two runs of the same workflow never share a key (0.1.1 and
earlier sent n8n-<item>-<action>, which was identical for item 0 of every
execution and could replay another run's sealed verdict). Set it explicitly
to your own business key — an order id, an invoice number — when you want
server-side replay across retries: for 48 hours (the server's default
window) a repeat of the same request id with the same inputs — Agent DID,
Action, Target, Payload and Payload Kind — returns the sealed decision
instead of deciding again, and a repeat whose inputs differ is decided and
sealed afresh. Still never reuse a key for a different customer or amount:
engines built before 21 September 2026 replay the prior decision whatever the
inputs. Max 64 characters.

How the fallback is built (fallbackRequestId in src/decision.ts): for
each item the node reads the Request ID parameter (requestId); when it
is empty it calls n8n's this.getExecutionId() and sends
n8n-<executionId>-<item> (execution id trimmed, <item> the zero-based
item index). If the running n8n does not expose getExecutionId, or it
returns an empty or blank string, a random UUID stands in for the execution
id — n8n-<uuid>-<item> — so the key is still unique per call. Either way
the value is cut to the server's cap of 64 characters before it is sent as
request_id.

What this is not

  • Not a Connectors-panel card named n8n.
  • Not published to npm from the engine repository. Dest
    (CogNEXUSlabs/cognexus-tools) publishes it through npm Trusted
    Publishing, with provenance, on an n8n-v* tag.
  • Not a Wait node that pretends CogNEXUS review resolved inside n8n.
  • Not an OpenClaw community node. OpenClaw Chat nodes drive the Gateway;
    this package sits in front of your side effects.

Install

In n8n: Settings → Community nodes → Install from npm, package
@cognexuslabs/n8n-nodes-artzain.

To try a change that is not released yet, build from a checkout of dest
(n8n/) or the engine dual-home (sdk/n8n/) and point n8n at that folder
per n8n's custom-node docs (N8N_CUSTOM_EXTENSIONS, or npm pack + install
the tarball):

npm ci && npm run build

Credential for Decision: Header X-Api-Key = sandbox key from /get-a-key.
Not a dashboard JWT. Envelope uses Authorization: Bearer cnxe_…. Neither
node follows a redirect, and the Decision credential's Test fails on one,
naming the status: set Base URL to the address the API answers on.

Discussion