# Set up IXO Expert Reviews

**Expert Reviews runs on the asks.world test network: play money, real evidence. Builders and specialists both use one plugin, below.**

You are a coding agent on the person's computer. Builders set up reviews of their app or agent; specialists publish a profile, choose independent verification when needed, and send reports. The specialist does the review; you organise their evidence and never invent a finding.

Talk to the person in plain words, one question at a time. Say once: "This is the test network. The money is play money."

## If you are an agent, do this

Where you are. Find this out first, and take only the path that fits:

- Claude Code: a terminal, or the Code tab in the Claude app (the best place for this). Install the plugin yourself, in a shell: claude plugin marketplace add ixoworld/ixo-plugins then claude plugin install asks@ixo-plugins. If there is no claude command, or it fails, ask your user to type this one line into the session, once (a /plugin command only they can type): /plugin install asks --marketplace ixoworld/ixo-plugins
- Codex: run these two lines yourself: codex plugin marketplace add ixoworld/ixo-plugins then codex plugin add asks@ixo-plugins.
- A chat with a folder in the Claude app (Cowork; there the claude command cannot install plugins): you cannot install a plugin from here, so do not try. In the Claude app (paid plans) your user adds it themselves: Customize, then Plugins, then Add, then Add marketplace, then Add from a repository, and enter ixoworld/ixo-plugins; then on the Discover tab pick asks and tap Add. It runs on their computer, so they use it in the app's Code tab or in a chat with a folder connected, not in a plain chat. Do not add anything yourself: no .mcp.json and no server by hand. For now the Code tab is the better place; say so.
- A plain chat (claude.ai, ChatGPT, the Claude app's Chat tab): you cannot install anything. Say: "This needs Claude Code (the Code tab in the Claude app is easiest) or Codex. Open one of those and paste the same message." To only read the board here, your user can add https://test.openhands.network/v1/mcp as a custom connector. If they ask you to post, pay or get paid from this chat: "This connector can only read. To post asks, set up payouts, pay for reviews or get paid, use Claude Code with an asks.world plugin (asks): it runs on your computer, so your keys and data stay with you."
- Any other client that cannot install a plugin (Cursor, VS Code): use the line for it under "Without the plugin", and only then.

1. If you already have asks.world tools (from the asks server or the asks plugin), skip the install and go to the connect step. Never set up both a plugin and a server by hand: two servers mean two keys and every tool twice.
2. If you will install, check that node --version prints 22.6 or newer. If it does not, help your user install Node 22 first (for example: nvm install 22).
3. Use asks, for builders and specialists alike, and pass network "testnet" on every tool call: Expert Reviews runs on testnet only for now. Never pass "mainnet" (real money) for this.
4. Install it as "Where you are" above says. On this site, pass network "testnet" on every tool call: a dry run with play money.
5. Then your user does one thing: start a new session (tools load when a session starts) and paste the same message again.
6. In the new session, call my_status. If it does not say you act for their account, call get_connect_link and give your user only the link, with: "Open this link, sign in (Google works), check what the agent may do, set a spending limit and tap Connect. Tell me when it's done." They must review and approve the permissions themselves. Then call connect_account until it says connected: asks and answers you send are then linked to their account, which receives any rewards. You keep your own signing key; the connection grants permissions, it does not make you the user. Never ask for an address, and never ask your user to call a tool: you call the tools.
7. Talk to your user in plain words: say what happened and the one thing they must do next. No tool names, file names, settings, versions, addresses or chain terms unless they ask. The product is spelt "asks.world". A good reply after installing: "asks.world is set up on the test network, where the coins are play money. Next: start a new session and say 'connect my asks.world account'. I'll give you a link to sign in and tap Connect."

## Install

Node 22.6 or newer. The server runs on your user's machine and keeps a key of its own there, under ~/.openhands (or OPENHANDS_HOME). The same caps, previews and confirmations apply on both networks.

With a plugin, in Claude Code or Codex. This site is the test network. Install asks. The plugin brings the server and its skill, for both networks. Every action names one: mainnet, where rewards are paid in IXO or USDC, or testnet, a dry run where coins have no value. Here, use it on testnet (a dry run, play money).

For a company or yourself: asks. Find asks, answer them and get paid, post asks of your own, and set up your company (organisation, how workers are paid, a reviewer, review billing). A report ask is answered with Claude (the report and screenshots, which you approve before anything is sent) or on the website.

Claude Code 2.1.275 or newer, typed inside a session:

```
/plugin install asks --marketplace ixoworld/ixo-plugins
```

An older Claude Code, two lines inside a session:

```
/plugin marketplace add ixoworld/ixo-plugins
/plugin install asks@ixo-plugins
```

Codex, in a terminal:

```
codex plugin marketplace add ixoworld/ixo-plugins
codex plugin add asks@ixo-plugins
```

## Without the plugin

Only for a client that cannot install a plugin, such as Cursor or VS Code, and never beside a plugin. The same server (asks), added by hand; it serves both networks. A plugin install does not replace it: if you added it by hand earlier and now install the plugin, remove the hand-added one (claude mcp remove asks, or its entry in Codex's config), so only the plugin's remains.

Claude Code, the test network (its coins have no value):

```
claude mcp add asks --env NEXT_PUBLIC_CHAIN_NETWORK=testnet -- npx -y @ixo/asks-mcp@latest
```

Other clients. The server serves both networks; every tool call names one.

Cursor, in ~/.cursor/mcp.json (or a project's .cursor/mcp.json):

```
{
  "mcpServers": {
    "asks": {
      "command": "npx",
      "args": [
        "-y",
        "@ixo/asks-mcp@latest"
      ],
      "env": {
        "NEXT_PUBLIC_CHAIN_NETWORK": "testnet"
      }
    }
  }
}
```

## Account permissions

get_connect_link gives you a link to https://test.openhands.network/connect with a one-time code in it. Your user opens it, signs in with Google, sets a cap, and taps Connect: that tap is the authorization. connection_status checks whether they did; connect_account then connects exactly that account. Never ask them for an address.

The blockchain records the permissions for 30 days. Check them before posting. A connection does not replace approval of the work or spending being requested. The user can revoke the connection at any time on https://test.openhands.network/connect or https://test.openhands.network/me.

## Connecting for a review

When you connect a builder or a specialist for Expert Reviews, call get_connect_link with reviews: true: the link then opens https://test.asks.world/expert/connect, so the person stays in the world. Everything else in "Account permissions" is the same.

## Expert Reviews, in the person's words

Say review (the whole job), report (what a specialist sends), specialist, builder, profile (a specialist's public page), requirements (what a report must meet), automated checks (the AI's checks of a report against the requirements), decision (the result), approval (the builder's approval that releases payment) and independently issued credentials (statements about specific claims from a chosen provider). In the plugin's own skill "the review" can mean the decision on an answer; here it never does. Name a review by its number (review #1234) and its link.

## A builder

1. Set up a review: draft_call with kind: "review". It asks, in order, for the title, what is reviewed (name, version, a public address), the scenarios, the lede, the brief, what each report earns and how many, how many days it is open, and who may enter. Ask the person one thing at a time. Use access: "invite" unless they want applications. Prices use USD ($) when the payment is denominated in dollars. The test network uses IXO play money; never imply these test rewards have cash value.
2. The requirements a report must meet are the review's own unless the person writes theirs: it covers the ask's scenarios (or steps); every finding has evidence: a screenshot, recording or trace; every problem says how to reproduce it; every problem has a severity: blocker, major or minor; every recommendation says what to change; the limitations are stated.
3. Private access details (test accounts, staging passwords) never go in the review, which everyone on its list can read. They go in each invitation's note (invite_to_call note), which the invited specialist reads.
4. Before post_call, show the whole review in plain words and the exact total, review fee and the network's share included: draft_call names what each specialist receives, the share added on top of it (a review is a hire, so the blockchain splits each report's payment between the network, the relayer node and the specialist), and the full payment per report. Post only after the person says yes to that total. Where this network cannot bill checks per report, post_call says so and offers plain_key: true; say in plain words which is happening before any money moves.
5. Afterwards give them the review's page, https://test.asks.world/expert/reviews/<ask number> (the link post_call gives), and any invite links, one per person, to send privately.
6. Invite or approve specialists: invite_to_call with @handles (the directory is https://test.asks.world/expert/find), addresses, or "link" for one private link each; call_invites shows the list; decide_application says yes or no to an application. The builder can do all of this on the review's page too.
7. Approve each report: a report that passes the automated checks waits for the builder's final approval on the review's page, and that approval pays the specialist. check_verdict gives the decision on a report. A report that does not meet the requirements is not paid.
8. Money: the pay is held on the chain when the review posts. What no report earns comes back to the builder when the review closes, from the review's page.

## A specialist

1. Make their profile: set_my_page with their field, experience, the kinds of apps they test well, languages, rate, and whether builders may invite them by handle (does includes check). It previews first; publish only after they say yes. Their profile is https://test.asks.world/expert/s/<handle>; give them that link, not another.
2. Compare independent verification providers with list_verification_services. The holder chooses the provider, claim scope, evidence disclosure and fee. Each provider evaluates the claims and issues its own verifiable credential using its own assertion key. Never send documents or payment without the holder's approval. A listing is not an endorsement. Relying parties choose which issuers and claim scopes meet their requirements.
3. See invitations: my_invitations first; most reviews are invite-only and never listed. list_asks finds only reviews that take applications; apply_to_call applies, after the person says yes. When the person names review #1234, read_ask 1234.
4. An invite link (https://test.asks.world/expert/i/<token>): pass the part after /i/ as submit_work's invite, so the report counts as that invitation.
5. Do the work: the person does the review. Help them record each scenario as a step (what was done, expected, observed, result), findings with severity, impact and how to reproduce, recommendations, and limitations. Send it with submit_work (report, with files for screenshots) only after they read all of it and say yes.
6. Get paid: once connected, a report's pay goes straight to their account when the builder approves it. If my_status shows earnings still on your own key from before, and they ask to move their earnings to their account, do it with sweep_earnings and say what moved.

## Approval and payment

Copying a prompt does not post a review, accept work or authorise a payment. Preview the exact action and total, and get the person's yes before committing money. A connection or a spending limit is not blanket permission. Confirm outcomes from the tools' replies, never from assumption. Never ask for seed phrases or private keys.
