CLI: Installation & Configuration
The Arca CLI is a Go binary built with the Cobra framework. It communicates with the Arca API and supports multiple named profiles.
Install via Homebrew
brew install arcaresearch/tap/arcaBuild from Source
cd cli && go build -o arca .# Optionally add cli/ to your PATHConfiguration File
Configuration is stored at ~/.arca/config.json. Each profile contains an API base URL, optional portal URL for browser auth, default realm, and optional API key.
{ "active_profile": "staging", "profiles": { "local": { "api_base": "http://localhost:3052/api/v1", "realm": "development", "api_key": "arca_78ae7276_..." }, "staging": { "api_base": "https://api-staging.arcaos.io/api/v1", "portal_base": "https://app-staging.arcaos.io", "realm": "qa-regression" } }}Managing Profiles
# Create or update a profilearca config set local --api-base http://localhost:3052/api/v1arca config set local --realm developmentarca config set local --api-key arca_78ae7276_...
# Staging profile (browser auth opens app-staging)arca config set staging \ --api-base https://api-staging.arcaos.io/api/v1 \ --portal-base https://app-staging.arcaos.ioarca config use staging
# Switch the active profilearca config use local
# List all profilesarca config list
# View a specific profilearca config get localEnvironment Variables
Environment variables override profile settings:
ARCA_API_BASEstringapi_base value.ARCA_PORTAL_BASEstringportal_base value.ARCA_REALMstringrealm value.ARCA_API_KEYstringapi_key and any saved JWT.ARCA_ORGstringARCA_CONFIG_DIRstring~/.arca.Resolution Priority
For each setting, the CLI resolves values in this order (highest priority first):
- Command-line flags (
--api-key,--realm,--org,--profile) - Environment variables (
ARCA_API_KEY,ARCA_REALM,ARCA_ORG,ARCA_API_BASE,ARCA_PORTAL_BASE) - Active profile in
~/.arca/config.json - Defaults (API base:
http://localhost:3052/api/v1; portal inferred for local, staging, and production API hosts)
Global Flags
Available on every command:
--realmstring--api-keystring--outputstringtext (default), json, or table.--no-colorboolean--profilestring~/.arca/config.json.--orgstringARCA_ORG environment variable.Use ARCA_ORG to set the active organization for scripting and CI. It overrides the profile's org value.
Always use --output json when scripting or verifying behavior programmatically. Text output is for humans; JSON is for automation.
CLI: Auth Commands
Manage builder authentication. JWT tokens are stored at ~/.arca/token after login/signup.
Quick Start
Running arca auth without a subcommand launches an interactive setup wizard that walks you through login (or account creation), API key setup, and realm selection.
arca authlogin
Sign in to an existing account. Opens your browser for authentication. A staging profile opens app-staging.arcaos.io whenportal_base is set, or when the API base is the known staging host.
arca auth loginsignup
Create a new builder account. Opens your browser for account creation.
arca auth signuplogout
Clear the saved JWT token and revoke the refresh token.
arca auth logoutwhoami
Show the current authenticated identity (organization name, email, builder ID).
arca auth whoamistatus
Show the current authentication state: method (JWT or API key), active profile, API base, and realm.
arca auth statustoken
Mint a scoped JWT for end-user access. Returns a short-lived token with IAM-style policy statements.
arca auth token \ --sub user123 \ --actions arca:Read,arca:TransferFrom,arca:ReceiveTo \ --resources "/users/user123/*" \ --expiration 30--substringrequired--actionsstring[]requiredarca:Read,arca:Transfer).--resourcesstring[]required/users/*).--realm-idstring--expirationnumberCLI: Realm Commands
Manage realms. Aliases: arca realms.
list
arca realm listarca realm list --output jsoncreate
# Two-axis model (preferred):arca realm create --name "Trading App" --asset live --lifecycle permanentarca realm create --name "Bench" --asset paper --lifecycle temporary
# Legacy single-axis type still works:arca realm create --name "Sandbox" --type developmentA realm has two independent axes. Asset is the real-money risk tier: paper realms transact simulated funds (auto-minted, dev chain) while live realms transact real money (KYB-gated, production chain, withdrawals require a real destination, value-moving actions require browser step-up). Lifecycle is the durability tier: permanent realms are never auto-reaped and need step-up to archive; temporary realms are disposable (reaped after 30 days). The two axes are orthogonal — a paper+permanent realm is a long-lived practice app; a live+temporary realm is a short-lived real-money run.
--namestringrequired--assetstringpaper (simulated funds) or live (real money). When set it wins over --type.--lifecyclestringpermanent or temporary. Defaults to the diagonal partner of the asset (live→permanent, paper→temporary) unless set explicitly.--backingstringchain (default) or ledger-only (reserved for a future tier).--typestringdevelopment (default when no axis is given) or production. Retained as an alias of --asset (production↔live, development↔paper); prefer --asset/--lifecycle.--descriptionstringget
arca realm get <realm-id>delete
arca realm delete <realm-id>arca realm delete <realm-id> --force # skip confirmationarca realm delete <realm-id> --force-production-archive # required for permanent realms
# Paper realms only (e.g. load-test scaffolding):arca realm delete <realm-id> --force-pool-imbalance --imbalance-reason "<rationale>"arca realm delete <realm-id> --force-active-operations --imbalance-reason "<rationale>"Soft-archives the realm. The preconditions split along the two realm axes. Lifecycle: a permanent realm additionally requires --force-production-archive AND server-side step-up auth (the CLI opens your browser to confirm), because an app depends on its continued existence; a temporary realm needs neither. Asset: a live realm must have zero pool obligations, zero on-chain pool balance, and no pending operations or held reservations before it can be archived.
For paper realms — load-test scaffolding, throwaway probes, integration spins where no human or downstream system depends on the realm — the operator can opt out of the pool-solvency and active-operations preconditions with --force-pool-imbalance and --force-active-operations. Both REQUIRE --imbalance-reason for the audit trail and both are REFUSED on live realms regardless of step-up — see .cursor/rules/ledger-integrity.mdc rule 5 for the policy: a paper realm holds only simulated funds, but a real-purpose one still warrants investigation over archive-and-recreate.
--forceboolean--force-production-archiveboolean--force-pool-imbalanceboolean--imbalance-reason. Server logs WARN with the abandoned value at archive time. Refused on live realms.--force-active-operationsboolean--imbalance-reason. Refused on live realms.--imbalance-reasonstring--force-pool-imbalance or --force-active-operations. Recorded in the audit log alongside the structured WARN. Required when either override is set.CLI: Object Commands
Manage Arca objects. Aliases: arca objects, arca obj.
ensure
arca object ensure --path /wallets/mainarca object ensure --path /exchanges/hl1 --type exchange--pathstringrequired/wallets/main).--typestringdenominated (default), exchange, deposit, withdrawal, escrow.--metadatastring--operation-pathstringlist
arca object listarca object list --prefix /wallets --output jsonarca object list --include-deleted--prefixstring/wallets).--include-deletedbooleanget
Get an object by its path.
arca object get /wallets/mainarca object get /wallets/main --output jsondetail
Get full object detail including operations, events, deltas, and balances.
arca object detail <object-id> --output jsonbalances
Get current balances for an Arca object. Each balance includes arriving, settled, departing, and total fields showing in-flight transfer state.
arca object balances <object-id>arca object balances <object-id> --output json[ { "denomination": "USD", "arriving": "200.00", "settled": "800.00", "departing": "0.00", "total": "1000.00" }]delete
Delete an Arca object. If the object has non-zero balances, use --sweep-to to transfer remaining funds before deletion. For exchange objects with open positions, use --liquidate to close all positions via market order first. Deletion is blocked if the object has in-flight operations (pending transfers or deposits).
# Simple deletionarca object delete /wallets/old --force
# Deletion with balance sweeparca object delete /wallets/old --sweep-to /wallets/main --force
# Exchange deletion with liquidationarca object delete /exchanges/hl1 --sweep-to /wallets/main --liquidate --force--sweep-tostring--liquidateboolean--forcebooleanlabels get
View current labels on an Arca object.
arca object labels get <object-id>arca object labels get <object-id> --output jsonlabels set
Set one or more labels on an Arca object. Uses merge semantics — existing labels not mentioned in the command are left unchanged.
arca object labels set <object-id> displayName="Main Wallet" tier=goldarca object labels set <object-id> stripeCustomerId=cus_abc123key=valuestringrequired., _, -, and be 1–63 characters. Values are max 256 characters. Keys prefixed with arca. or _ are reserved.labels remove
Remove one or more labels from an Arca object by key.
arca object labels remove <object-id> tier supportTicketarca object labels remove <object-id> displayNameCLI: Transfer & Fund Account
transfer
Execute an atomic transfer between two Arca objects. The --path serves as the idempotency key — resubmitting the same path returns the existing result without a double-spend.
arca transfer \ --path /op/transfer/alice-to-bob-1 \ --from /wallets/alice \ --to /wallets/bob \ --amount 250--pathstringrequired--fromstringrequired--tostringrequired--amountstringrequired--fee-overridestring0 to disable the fee entirely. Non-production realms only.fund-account
Fund an Arca object (denominated or exchange). This is a developer tool for competitions and programmatic account seeding. In development realms, funding is simulated with a configurable delay. For production deposit flows, use payment links.
arca fund-account --ref /wallets/main --amount 1000--refstringrequired--amountstringrequiredCLI: Operation Commands
Inspect operations. Aliases: arca operations, arca op.
list
arca operation list --output jsonarca operation list --type transfer --output jsonarca operation list --type deposit--typestringtransfer, create, delete, deposit, order, cancel.get
Get operation detail with correlated events and state deltas.
arca operation get <operation-id> --output jsonnonce
Reserve the next unique nonce for a path prefix. Always reserve before the operation and store the result — see Nonce Best Practices in the API Reference.
# Reserve a nonce, then use itNONCE_PATH=$(arca nonce --prefix /op/transfer/fund --output json | jq -r .path)arca transfer --path "$NONCE_PATH" --from /wallets/alice --to /wallets/bob --amount 250
# Colon separator for create-operation noncesarca nonce --prefix /op/create/wallets/main --separator ":"# → /op/create/wallets/main:1--prefixstringrequired--separatorstring- (or / if prefix ends with /). Use ":" for operation nonces.CLI: Exchange Commands
Trade perpetual futures on exchange Arca objects. Aliases: arca ex.
state
Get exchange account state (equity, margin summary, positions, open orders).
arca exchange state <object-id> --output jsonleverage set
Set the leverage for a coin. Leverage is a per-coin setting, not per-order. Must be set before placing orders at non-default leverage.
arca exchange leverage set \ --object <exchange-object-id> \ --coin hl:0:BTC --leverage 10isolated-margin
Add or remove collateral from an isolated-margin position. A positive --amount (USD) adds collateral and lowers the liquidation price; a negative amount removes it (rejected if it would breach maintenance margin). Only valid on isolated positions.
# Add $25 of margin to an isolated CL positionarca exchange isolated-margin \ --object <exchange-object-id> \ --coin hl:1:CL --amount 25
# Remove $10arca exchange isolated-margin \ --object <exchange-object-id> \ --coin hl:1:CL --amount -10margin-mode
Switch an asset between cross and isolated margin. Rejected on isolated-only markets and while an open position exists for the asset.
arca exchange margin-mode \ --object <exchange-object-id> \ --coin hl:0:BTC --mode isolatedorder place
Place a market or limit order. The --path is the idempotency key. Orders use the leverage currently set for the coin. For take-profit / stop-loss triggers, pass --trigger with --trigger-px and --tpsl; use --trigger-market for a market execution when triggered, or omit it to use --price as the limit after trigger.
# Market orderarca exchange order place \ --object <exchange-object-id> \ --coin hl:0:BTC --side buy --size 0.01 \ --path /op/order/btc-buy-1
# Limit orderarca exchange order place \ --object <exchange-object-id> \ --coin hl:0:ETH --side sell --type limit --price 3000 --size 1 \ --path /op/order/eth-sell-1
# Trigger order (TP) — limit when triggeredarca exchange order place \ --object <exchange-object-id> \ --coin hl:0:BTC --side sell --type limit --price 100000 --size 0.01 \ --path /op/order/btc-tp-1 \ --trigger --trigger-px 99000 --tpsl tp--objectstringrequired--coinstringrequiredhl:0:BTC, hl:0:ETH).--sidestringrequiredbuy or sell.--sizestringrequired--pathstringrequired--typestringmarket (default) or limit.--pricestring--reduce-onlyboolean--isolatedbooleanhl:1:CL — pass together with --leverage. Cross orders on isolated-only markets are rejected with a 400 before the operation is created. (Isolated-only is the asset's marginModes == ["isolated"]; independent of HIP-3.)--tifstringGTC (default), IOC, ALO.--triggerboolean--trigger-px and --tpsl are required.--trigger-pxstring--trigger-marketboolean--price).--tpslstringtp (take profit) or sl (stop loss). Required with --trigger.--size-to-maxboolean--size value is ignored). Omit for a sized trigger that closes its fixed --size (reduce-only).order list
arca exchange order list --object <id> --output jsonarca exchange order list --object <id> --status OPEN--objectstringrequired--statusstringPENDING, OPEN, PARTIALLY_FILLED, FILLED, CANCELLED, FAILED, WAITING_FOR_TRIGGER, TRIGGERED.order get
Get a specific order with its fills.
arca exchange order get <order-id> --object <id> --output jsonorder cancel
Cancel an open order. The --path is the idempotency key.
arca exchange order cancel <order-id> \ --object <exchange-object-id> \ --path /op/cancel/btc-1order modify
Resize a resting order to a new total size. Only sized orders can be resized: resting limit orders and sized TP/SL triggers. Unsized (sizeToMax: true) triggers are rejected — they always close the whole position and have no quantity to amend. The --new-size must exceed the order's already-filled quantity; --path is the idempotency key.
arca exchange order modify <order-id> \ --object <exchange-object-id> \ --path /op/modify/btc-1-0.75 \ --new-size 0.75position list
arca exchange position list --object <id> --output jsonposition close
Close an open position with reduceOnly: true enforced. Looks up the position for --coin, infers the closing side, and submits a reduce-only market order sized to close the full position (or --sizefor a partial close). Automatically threads the position's leverage and the market's marginModes into the order — required on isolated-only markets where Hyperliquid's matching engine refuses closes without explicit leverage + isolated.
# Close the full positionarca exchange position close \ --object <exchange-object-id> \ --coin hl:1:CL \ --path /op/close/cl-1
# Partial closearca exchange position close \ --object <exchange-object-id> \ --coin hl:0:BTC --size 0.005 \ --path /op/close/btc-partial--objectstringrequired--coinstringrequiredhl:0:BTC, hl:1:CL).--pathstringrequired--sizestring--tifstringIOC (default), GTC, ALO.position set-tpsl
Attach a stop-loss and/or take-profit to an open position. Looks up the position for --coin, infers the closing side (LONG → SELL, SHORT → BUY), and submits each trigger as a reduce-only unsized market order — so when it fires it closes the entire live position regardless of size, and it is cancelled automatically when the position closes or is liquidated. The position's leverage and the market's marginModes are threaded in automatically, exactly like position close.
At least one of --stop-loss / --take-profit is required (each is a trigger price). When both are set, two triggers are placed on derived sub-paths <path>/sl and <path>/tp. By default an existing unsized trigger of the same type is replaced (cancel-then-place); pass --replace=false to stack. For a sized (fixed-quantity) trigger or a limit trigger, use order place --trigger.
# Stop-loss on a long BTC position (places a reduce-only SELL trigger)arca exchange position set-tpsl \ --object <exchange-object-id> \ --coin hl:0:BTC --stop-loss 54000 \ --path /op/tpsl/btc-sl
# Both legs at once — derives /op/tpsl/btc/sl and /op/tpsl/btc/tparca exchange position set-tpsl \ --object <exchange-object-id> \ --coin hl:0:BTC --stop-loss 54000 --take-profit 72000 \ --path /op/tpsl/btc--objectstringrequired--coinstringrequiredhl:0:BTC, hl:1:TSLA).--pathstringrequired/sl and /tp sub-paths.--stop-lossstring--take-profitstring--replacebooleantrue). Pass --replace=false to stack.Triggers execute as market orders when the mark price crosses the threshold. They surface as WAITING_FOR_TRIGGER / TRIGGERED in order list.
position clear-tpsl
Cancel resting unsized triggers for a coin. With no --tpsl filter it clears both legs; pass --tpsl sl or --tpsl tp to clear just one. Sized triggers and other coins are left untouched.
# Clear both stop-loss and take-profit for BTCarca exchange position clear-tpsl \ --object <exchange-object-id> \ --coin hl:0:BTC \ --path /op/tpsl/btc-clear
# Clear only the stop-loss legarca exchange position clear-tpsl \ --object <exchange-object-id> \ --coin hl:0:BTC --tpsl sl \ --path /op/tpsl/btc-clear-sl--objectstringrequired--coinstringrequiredhl:0:BTC).--pathstringrequired--tpslstringsl or tp. Omit to clear both.fills
List historical fills (trades) with per-fill P&L, fee breakdown, and trade direction.
arca exchange fills --object <id> --output jsonarca exchange fills --object <id> --market hl:0:BTC --limit 50arca exchange fills --object <id> --start-time 2026-01-01T00:00:00.000000Z--objectstringrequired--marketstringhl:0:BTC).--start-timestring--end-timestring--limitnumber--cursorstringtrade-summary
Per-market P&L summary: realized P&L, total fees, trade count, and volume.
arca exchange trade-summary --object <id> --output jsonarca exchange trade-summary --object <id> --output table--objectstringrequired--start-timestring--end-timestringfunding-history
List hourly funding payments applied to an exchange account. Payments are signed — negative means the account paid, positive means it received.
arca exchange funding-history --object <id> --output jsonarca exchange funding-history --object <id> --limit 50 --output table--objectstringrequired--limitnumbermarket meta
Get market metadata (supported assets, max leverage, size decimals).
arca exchange market meta --output jsonmarket mids
Get current mid prices for all assets.
arca exchange market mids --output jsonmarket tickers
Get 24h ticker data for all assets (volume, price change, funding, delisted status).
arca exchange market tickers --output jsonmarket book
Get the L2 order book for a specific coin.
arca exchange market book hl:0:BTC --output jsonCLI: PnL Commands
Compute profit-and-loss over time for a path prefix.
history
Fetch P&L history over a time range.
arca pnl history --from 2026-01-01T00:00:00Z --to 2026-03-10T00:00:00Zarca pnl history --prefix / --from 2026-01-01T00:00:00Z --to 2026-03-10T00:00:00Z --points 200 --output json--prefixstring/.--fromstringrequired--tostringrequired--pointsnumber--outputstringjson or table.CLI: Payment Link Commands
Create and manage shareable payment links for deposits and withdrawals. Aliases: arca pl.
create
Create a payment link. Returns the shareable URL for the end user.
arca payment-link create \ --type deposit \ --ref /wallets/main \ --amount 100
# With return URL (web redirect)arca payment-link create \ --type withdrawal \ --ref /wallets/main \ --amount 50 \ --return-url https://example.com/thanks \ --expires-in 60
# For native apps using in-app browsersarca payment-link create \ --type deposit \ --ref /wallets/main \ --amount 100 \ --return-strategy close--typestringrequireddeposit or withdrawal.--refstringrequired--amountstringrequired--return-urlstringredirect and navigate strategies.--return-strategystringredirect (default), navigate (custom URL scheme), or close (dismiss web view).--expires-innumberlist
List payment links in the current realm.
arca payment-link listarca payment-link list --output jsonarca payment-link list --type deposit --status pending--typestringdeposit or withdrawal.--statusstringpending, completed, expired.preview
Show the public preview of a payment link, including the on-chain deposit instructions (pool address, boundary, ref, raw amount) that the pay page would surface to the depositor's browser wallet. Lets test scripts, CI, and any on-chain tool (cast, foundry, Safe, manual MetaMask) drive a deposit without opening the browser. The endpoint is unauthenticated — the token in the URL is the credential — so this works from any machine without first running arca auth login.
arca payment-link preview <token>arca payment-link preview <token> --output jsoncomplete
Register a payment link's deposit/withdrawal intent on the platform side — the same call the pay page makes after the user clicks Confirm in their browser wallet. For deposit links, this writes the DepositIntentrow the chain monitor matches against; for withdrawal links it kicks off the on-chain operator-withdraw workflow. Pair with preview to drive the full flow from CI or a non-browser tool. Idempotent — a second call on an already-completed link is a no-op.
arca payment-link complete <token>arca payment-link complete <token> --output jsonCLI: Summary
Show aggregate counts for the current realm.
arca summaryarca summary --output jsonReturns object count, operation count, event count, pending operations, and expired operations.
Advanced: API Keys, Permissions, Org, Fees & Admin ▸
CLI: API Key Commands
Manage API keys for programmatic access. Aliases: arca api-keys.
list
arca api-key listarca api-key list --output jsoncreate
Create a new API key. The raw key is shown once at creation — save it immediately.
arca api-key create --name "ci-pipeline"
# Lock the key to a single realm with a least-privilege presetarca api-key create --name "dev-ci" --realm rlm_dev --permissions read
# Realm-locked full-access backend keyarca api-key create --name "prod-backend" --realm rlm_prod --permissions full--namestringrequired--realmstring--permissionsstringread (view-only), trade (view + place/cancel orders), or full (no action restriction).The full key is only displayed at creation time. Store it securely — it cannot be retrieved later.
revoke
Permanently revoke an API key. This cannot be undone.
arca api-key revoke <key-id>arca api-key revoke <key-id> --force # skip confirmation--forcebooleanCLI: Permissions
View the Arca action catalog — all available permissions grouped by category, plus convenience aliases.
arca permissions --output jsonSee the Scoped Tokens & Permissions section for the full catalog and authorization model.
CLI: Org & Team
Manage your organization and team members from the command line. Aliases: arca org, arca organizations.
list
List organizations you belong to.
arca org listarca org lsarca org list --output jsoncreate
Create a new organization. You become the owner.
arca org create --name "Acme Inc"--namestringrequiredswitch
Set the active organization in your profile for subsequent commands.
arca org switch acme-incarca org use org-uuidarca org switch <org-id-or-slug>org-id-or-slugstringrequiredView Organization
arca org info --output jsoninvitations
List pending invitations to your organization.
arca org invitationsarca org invitesarca org invitations --output jsonrevoke-invitation
Revoke a pending invitation.
arca org revoke-invitation <invitation-id>arca org revoke-invitation inv_abc123 --forceinvitation-idstringrequiredList Members
arca org members --output tableremove-member
Remove a member from the organization. Cannot remove the owner.
arca org remove-member <member-id>arca org remove-member member_abc123 --forcemember-idstringrequiredInvite a Member
arca org invite --email alice@example.com --role developerAvailable roles: admin, developer, viewer. The invitee receives an invitation link. You cannot assign a role higher than your own (privilege escalation protection).
Transfer Ownership
arca org transfer-ownership <user-id>Transfers organization ownership to another member. Only the current owner can do this.
CLI: Fee Commands
Estimate fees and view the current fee schedule.
estimate
Estimate the fee for a transfer or order before executing it.
arca fees estimate --action transfer --from /wallets/main --to /exchange/main --amount 1000arca fees estimate --action transfer --amount 500 --output json--actionstringrequiredtransfer or order.--amountstringrequired--fromstring--tostringschedule
Display the current fee schedule.
arca fees schedulearca fees schedule --output tableCLI: Admin Commands (Internal)
The arca admin subcommands provide operator visibility into platform health. These are not published to Homebrew and require admin auth.
After arca admin auth login, print the Authorization header line for use with curl:
# Production admin auth (default)arca admin auth login
# Staging admin autharca admin auth login --env staging# or: arca admin auth login --staging
arca admin auth print-header
curl -sS "$ARCA_API_BASE/admin/chain-transactions/bulk-abandon" \ -H "$(arca admin auth print-header | tr -d '\n')" \ -H "Content-Type: application/json" \ -d '{"type":"stuck-in-flight","minAge":"7d"}'venue-health
Venue reconciliation diagnostics: fill audit, adjustments, drift state, and unmatched fills. See the venue reconciliation design doc for context.
# Aggregate statsarca admin venue-health summary --output json
# Fill audit (fee breakdown, cloid match status)arca admin venue-health fill-audit --realm-id <realmId> --output json
# Venue adjustment logarca admin venue-health adjustments --realm-id <realmId> --output json
# Per-account reconciliation statearca admin venue-health reconciliation --realm-id <realmId> --output jsonarca admin venue-health reconciliation --output json
# Unmatched fill operations (external trades)arca admin venue-health unmatched-fills --output json
# Acknowledge an adjustment (operator role)arca admin venue-health ack <adjustmentId>--realm-idstring--outputstringjson or table. Use json for scripting.recovery
Custody recovery operations for the v2 (kernel/coordinator/modules) custody hatch. venue-unwind fires the cooperative on-chain entrypoint ArcaCoordinator.requestVenueUnwind(boundary): unlike lockBoundary it does not revoke ARCA's per-vault trading agent, so the platform cooperatively flattens every Hyperliquid exchange-arca in the boundary (cancel resting orders, close positions reduce-only, poll flat) on the user's behalf. The flatten is solvency-neutral; the subsequent drain and ledger settle run through the existing delete/withdraw paths (whose "venue must be flat" precondition this unblocks).
# Dry-run preview (default) — prints the boundary + irreversible-flatten effectarca admin recovery venue-unwind --realm <realmId>
# Commit. Step-up gated on production realms (opens the browser-confirm flow).arca admin recovery venue-unwind --realm <realmId> \ --boundary <boundaryId> --reason "orderly wind-down" --execute--boundarystring--reasonstring--executebooleanrequestVenueUnwind. Omitted ⇒ dry-run preview only.--yesbooleanThis is a destructive-class, step-up-gated action — it places reduce-only market closes against live positions. On a production realm the CLI opens the browser-confirmation flow to mint a single-use step-up token bound to admin:recovery/venue-unwind. The boundary's recovery key holder can also call the entrypoint directly on-chain; this command is the operator-driven convenience.