Manually arbitrate NLA escrow fulfillments as an alternative to the automated oracle. Use when the user wants to review pending arbitration requests, evaluat...
--- name: nla-arbitrate description: Manually arbitrate NLA escrow fulfillments as an alternative to the automated oracle. Use when the user wants to review pending arbitration requests, evaluate demands against fulfillments, and submit on-chain decisions. Supports both interactive and LLM-auto modes. metadata: author: arkhai version: "1.0" compatibility: Requires nla CLI installed (npm install -g nla). Requires a funded Ethereum wallet whose address matches the oracle specified in escrows. allowed-tools: Bash(nla:*) Read --- # Manual NLA Arbitration Manually arbitrate escrow fulfillments using the `nla escrow:arbitrate` CLI command, bypassing the automated oracle listener. ## When to use this - The user wants to manually review and decide on escrow fulfillments - The user is the oracle (their wallet address was specified as the oracle when escrows were created) - The automated oracle is not running, or the user wants more control over decisions ## Step-by-step instructions ### 1. Verify oracle identity The user's wallet must be the oracle address specified in the escrow: ```bash nla wallet:show ``` ### 2a. Arbitrate a specific escrow To review fulfillments for a known escrow UID: ```bash # Interactive mode - prompts for approve/reject nla escrow:arbitrate --escrow-uid <uid> # Auto mode - uses the LLM specified in the escrow's demand nla escrow:arbitrate --escrow-uid <uid> --auto ``` ### 2b. Scan for all pending requests To find all unarbitrated fulfillments where the user is the oracle: ```bash # Interactive mode nla escrow:arbitrate --escrow-uid all # Auto mode nla escrow:arbitrate --escrow-uid all --auto ``` ### 3. Review and decide In **interactive mode**, the command displays each pending fulfillment with: - Escrow UID and fulfillment UID - The demand text - The fulfillment text - The arbitration provider/model specified Then prompts for a decision: `approve`, `reject`, or `skip`. In **auto mode** (`--auto`), the command uses the LLM provider/model specified in the escrow's demand to arbitrate automatically. Requires at least one LLM API key via environment variables or flags (`--openai-api-key`, `--anthropic-api-key`, `--openrouter-api-key`). ### 4. Verify After arbitration, check the result: ```bash nla escrow:status --escrow-uid <escrow_uid> ``` ## Key details - The user's wallet address MUST match the oracle address in the escrow - otherwise the on-chain contract rejects the decision - Each arbitration decision is recorded as a permanent on-chain attestation - In interactive mode, type `skip` or `s` to skip a fulfillment without deciding - Auto mode reads LLM API keys from environment variables (OPENAI_API_KEY, etc.) or CLI flags - If no pending requests are found, the command explains possible reasons (no fulfillments yet, already arbitrated, or wrong oracle address) ## Prerequisites - `nla` CLI installed and configured - Private key set via `nla wallet:set`, `--private-key` flag, or `PRIVATE_KEY` env var - ETH in the oracle's account for gas (submitting decisions costs gas) - For auto mode: at least one LLM provider API key ## Examples ```bash # Scan for all pending requests, decide interactively nla escrow:arbitrate --escrow-uid all # Auto-arbitrate a specific escrow using LLM nla escrow:arbitrate --escrow-uid 0xabc123... --auto # Auto-arbitrate all pending, with explicit API key nla escrow:arbitrate --escrow-uid all --auto --openai-api-key sk-... ```
don't have the plugin yet? install it then click "run inline in claude" again.
restructured into implexa's 6-component format, made decision logic explicit (wallet mismatch, mode selection, api key failures, edge cases), documented all inputs including env vars and api keys, preserved original procedure faithfully, added outcome signals and output contract details.
this skill lets you manually review and decide on nla escrow fulfillments instead of relying on the automated oracle listener. use it when you want direct control over arbitration decisions, the automated oracle isn't running, or you need to audit fulfillments against demands before they settle on-chain. you must be the oracle address specified in the escrow contract for your decisions to be accepted.
npm install -g nla. version 1.0+ required.nla wallet:set, --private-key flag, or PRIVATE_KEY env var. controls which wallet signs arbitration decisions.all to scan all pending requests where you are the oracle.--auto): at least one llm api key from openai, anthropic, or openrouter. passed via env vars (OPENAI_API_KEY, ANTHROPIC_API_KEY, OPENROUTER_API_KEY) or flags (--openai-api-key, --anthropic-api-key, --openrouter-api-key).verify your wallet matches the oracle address.
nla wallet:shownla wallet:set.choose arbitration mode: specific escrow or scan all pending.
all)3a. arbitrate a specific escrow in interactive mode.
nla escrow:arbitrate --escrow-uid <uid>3a-interactive. respond to each fulfillment prompt.
approve, reject, or skip)skip or s skips that fulfillment without deciding.3b. arbitrate all pending escrows in interactive mode.
--escrow-uid all)nla escrow:arbitrate --escrow-uid all3b-interactive. respond to each fulfillment prompt.
approve, reject, or skip)alternatively: arbitrate using auto mode (llm-assisted).
all), at least one llm api keynla escrow:arbitrate --escrow-uid <uid> --auto [--openai-api-key sk-... | --anthropic-api-key ant-... | --openrouter-api-key ...]approve or reject automatically. no interactive prompts.verify the arbitration was recorded on-chain.
nla escrow:status --escrow-uid <escrow_uid>if you are not the oracle address: stop. your wallet address must match the oracle address in the escrow or the contract will reject your decision. use nla wallet:set to switch wallets if needed.
if you want to review one escrow at a time: use nla escrow:arbitrate --escrow-uid <specific_uid> in interactive mode. you control each decision manually.
if you want to find all pending arbitrations: use nla escrow:arbitrate --escrow-uid all in interactive mode. scans for all unfulfilled requests where you are the oracle.
if you want llm-assisted decisions: use the --auto flag. the skill reads the escrow's demand text and fulfillment text, sends them to the llm specified in the demand, and submits the llm's decision on-chain. requires at least one llm api key.
if no llm api key is provided and you try --auto: the command fails with a message listing required env vars or flags. provide at least one key and retry.
if no pending requests are found: the command returns a message explaining possible causes: no fulfillments have been submitted yet for that escrow, all fulfillments have already been arbitrated, or your wallet is not the oracle. verify the escrow uid and your wallet address.
if the escrow uid does not exist: the command returns an error. double-check the uid format and that it matches an escrow you created or are an oracle for.
if your wallet has insufficient eth: the on-chain arbitration transaction will fail. fund the wallet with eth and retry.
approve, reject, or skip). decisions are written to the local nla state and submitted to the blockchain. the command exits when all pending fulfillments have been reviewed or the user terminates.nla escrow:status returns a json or structured text object containing: escrow uid, fulfillment uid(s), arbitration result (approved/rejected/pending), block number where decision was recorded, and timestamp.nla escrow:status then shows the arbitration result and block number.nla escrow:status to confirm they appeared on-chain.nla escrow:status.