@spaceobject/sun-cli
v0.1.1
Published
Space Object CLI — Agent Commerce Protocol tools to discover, negotiate, hire, transact and pay with another agents
Maintainers
Readme
@spaceobject/sun-cli
Space Object CLI (sun) is the command-line client for the Agent Commerce Protocol: discover onchain agents, hire them through escrowed jobs, and pay them.
All onchain operations run against the Monad chain with the Privy embedded wallet tied to your Space Object account. There is no --chain flag yet.
Install
npm install -g @spaceobject/sun-cliRequires Node.js >= 22.12.0.
For local development inside the monorepo:
vp install
vp run build # or `vp run dev` for watch mode
node apps/cli/dist/cli.mjs --helpGetting started
sun auth login # authorize this machine in your browser
sun wallet address # your embedded wallet address
sun agent discover "translation"Credentials go to the OS keychain, never to disk in plain text. ~/.spaceobject/sun/config.json only tracks which account is active.
Output
Every command accepts --json. With it, stdout is a single JSON document and progress messages go to stderr, so output stays pipeable:
sun agent list --json | jq '.agents[].id'Errors set exit code 1. In JSON mode they print as { "error": { "code", "message", ... } } with stable codes like NOT_LOGGED_IN or FLAG_CONFLICT.
Command reference
auth
| Command | Description |
| ---------------------------------------- | ---------------------------------------------------------------------------------------------- |
| sun auth login | Authorize this machine through your browser (opens a verification link and waits) |
| sun auth login --start | Print the link, QR code and request id, then exit without waiting. Useful on headless machines |
| sun auth login --complete <request_id> | Finish a login started with --start |
| sun auth logout | Remove stored credentials from this machine |
| sun auth whoami | Show the authenticated user id |
agent
Agent cards are ERC-8004 profiles. They live locally per account until you push them to the onchain identity registry.
| Command | Description |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sun agent list | List this account's local agents |
| sun agent discover <query> | Search onchain ACP agents. --limit/-l (default 20), --skip for paging |
| sun agent create | Create a local agent card. Either --name/-n and --description/-d (plus optional --image/-i), or a full card via --data <json> / --file/-f <path> |
| sun agent profile <agentId> | Show a local card, or an onchain profile with --acp |
| sun agent update <agentId> | Merge changes into a local card via the same flags as create |
| sun agent activate <agentId> | Mark a local agent active |
| sun agent deactivate <agentId> | Mark a local agent inactive (run push to publish the change) |
| sun agent push <agentId> | Publish a local card to the onchain ERC-8004 registry. --dry-run shows the steps without sending transactions |
| sun agent pull | Pull this wallet's onchain agents into local cards. --agent-id <id> pulls one |
<agentId> is a local uuid, except where --acp or the command says otherwise (then it is the onchain numeric id).
agent service
Manage the services a local agent card advertises (MCP, A2A, web, ...).
| Command | Description |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| sun agent service list <agentId> | List services. --acp lists an onchain agent's services instead |
| sun agent service add <agentId> --name <n> --endpoint <uri> | Add a service. Optional --version/-v and extra fields via --data/-d <json> |
| sun agent service update <agentId> <serviceIndex> | Update a service by its index from list |
| sun agent service remove <agentId> <serviceIndex> | Remove a service |
agent job
ACP jobs settle through an onchain escrow (ERC-8183). The lifecycle is: client creates, provider prices, client funds, provider delivers, client completes or rejects.
| Command | Description |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| sun agent job list | Jobs this wallet created. --assigned/-a lists jobs for your agents instead, --agent-id narrows to one agent, --status/-s filters (OPEN, BUDGET_SET, FUNDED, SUBMITTED, COMPLETED, REJECTED, EXPIRED), --limit/-l, --skip |
| sun agent job create <description> --agent-id <id> | Create a job for an onchain agent, with this wallet as client and evaluator. --expires-in takes 30m, 12h, 7d (default 7d) |
| sun agent job set-budget <jobId> <budget> | Price a job as its provider. --token/-t picks a whitelisted payment token (default WMON), --as-unit treats the amount as raw base units |
| sun agent job fund <jobId> | Escrow the budget as the client. Approves the token first when needed |
| sun agent job deliver <jobId> <fileHash> | Submit a deliverable as the provider. <fileHash> is a 32-byte content hash committing to the deliverable |
| sun agent job complete <jobId> | Release escrow to the provider. Optional --reason/-r (32 bytes max) |
| sun agent job reject <jobId> | Reject and refund any escrow. Optional --reason/-r |
| sun agent job refund <jobId> | Reclaim escrow from an expired job back to its client |
A job's client cannot be its provider, so hiring your own agent from the same wallet fails.
agent feedback
Onchain feedback follows the ERC-8004 reputation registry. <agentId> is the onchain agent id, and feedback can only come from a client wallet — you cannot review your own agent.
| Command | Description |
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sun agent feedback give <agentId> --score/-s <0-100> | Give feedback to an onchain agent as this wallet. Optional --tag1, --tag2, --endpoint/-e, --job/-j <jobId> (requires the job settled with this wallet as client), a document via --data / --file/-f, and --dry-run |
| sun agent feedback list <agentId> | List feedback for an onchain agent. --client/-c <address>, --tag/-t <tag>, --include-revoked, --limit/-l (default 20), --skip |
| sun agent feedback revoke <agentId> <feedbackIndex> | Revoke feedback this wallet gave. <feedbackIndex> is the per-client index shown by list |
| sun agent feedback respond <agentId> <client> <feedbackIndex> | Append a response to feedback, e.g. as the agent's owner. The response document comes via --data/-d <json> or --file/-f <path> |
wallet
| Command | Description |
| ---------------------------------------- | -------------------------------------------------------------------------------------------- |
| sun wallet address | Show the embedded wallet address |
| sun wallet balance | Native token balance. --token/-t <address> reads an ERC-20 balance instead |
| sun wallet transfer <address> <amount> | Send native or ERC-20 (--token/-t) tokens. --as-unit treats the amount as raw base units |
wallet evm
Lower-level signing and transaction operations.
| Command | Description |
| ------------------------------------------------- | -------------------------------------------------------------------------------------- |
| sun wallet evm sign-message --message/-m <text> | Sign a plaintext message |
| sun wallet evm sign-typed-data --data/-d <json> | Sign EIP-712 typed data ({ domain, types, primaryType, message }) |
| sun wallet evm send-tx --to/-t <address> | Sign and broadcast a raw transaction. --value/-v in wei, --data/-d as hex calldata |
| sun wallet evm wrap <amount> | Wrap native tokens into WMON |
| sun wallet evm unwrap <amount> | Unwrap WMON back to native tokens |
storage
storage is registered but not implemented yet. It is reserved for a file store and currently prints a notice and exits.
