---
updatedAt: 2026-08-07T01:39:11.000Z
agentTools:
  projectIndex: https://docs.onechain.nexus/llms.txt
---

# ONE WAVE

Submit Shorts / TikTok videos to ONE WAVE missions for $CROSS rewards. Read missions and campaigns anonymously; auth via pasted JWT for submit and referral.

<br />

<Callout icon="✨" theme="default">
  ### **Browse missions and submit your videos with one sentence.**

  Drives [ONE WAVE](https://wave.crosstoken.io) — the NEXUS Open Streamer Economy that pays $CROSS (and per-game coupons) for completing video missions. Anonymous read; auth via pasted JWT for submit / referral / whoami.
</Callout>

***

## 1. Install

The block below is a **natural-language prompt to paste into your AI agent** — not a terminal command.

```text Paste-into-agent prompt
Clone https://github.com/to-nexus/skill-cross-wave into a temporary directory and run the install.sh script inside it to install the cross-wave skill into my environment. Tell me the result in one line when you're done.
```

<Callout icon="🚧" theme="warn">
  ### **Bash execution required.**

  Read-path works fully anonymous. Auth-path needs a one-time browser step (see §6).
</Callout>

### Install all ONE skills at once

```text Paste-into-agent prompt
Clone https://github.com/to-nexus/cross-skills-suite into a temporary directory and run the bootstrap.sh script inside it to install every ONE skill into my environment. Tell me which skills succeeded and which failed.
```

***

## 2. Where it runs

### ✅ Supported · CLI agents with Bash access

Claude Code (CLI) · OpenClaw · Cursor Composer · Codex CLI · Aider · Goose · Gemini CLI · OpenInterpreter · any other Bash-capable CLI.

### ❌ Not supported · Browser / hosted only

Claude.ai (web) · ChatGPT (web) · Gemini (web) · Copilot Chat (web). The skill needs filesystem access to persist your JWT at `~/.claude/skills/cross-wave/.sessions/wave.json` mode `0600`.

***

## 3. What you can do

### Read · no auth

| Subcommand     | What it does                                      |
| -------------- | ------------------------------------------------- |
| 🟢 `info`      | Service metadata + capture status + login status. |
| 🟢 `missions`  | Flat or grouped mission list / single detail.     |
| 🟢 `campaigns` | Mission groups view.                              |

### Auth · paste-the-token

| Subcommand    | What it does                                            |
| ------------- | ------------------------------------------------------- |
| 🟣 `login`    | Verify a pasted JWT via `/users/me` and persist.        |
| 🟣 `whoami`   | Your wallet address, accrued CROSS, submitted missions. |
| 🟣 `referral` | Your referral link + 5% commission stats.               |
| 🟣 `submit`   | Submit a Shorts / TikTok URL to a mission.              |

`claim` is a `no_op` by design — ONE WAVE has no user-initiated claim. Operator review approves submissions, then rewards auto-distribute at each mission's `rewardScheduledAt`.

***

## 4. Try it

<Callout icon="💬" theme="default">
  ### **Any natural language works.** Examples below are in English; phrase your intent in whichever language you prefer — the agent forwards your intent, not the wording.
</Callout>

```text Example prompts
List ONE WAVE active campaigns
Show 5 ended missions
Open mission 21
Show campaign 5 detail
Save my WAVE access token (I have the JWT from DevTools)
Get my referral link
Submit my Shorts to mission 21: https://www.youtube.com/shorts/XXXX
Show my wave profile
```

***

## 5. Command reference

| command     | args                                                                  | auth  | mutation        | description                            |
| ----------- | --------------------------------------------------------------------- | ----- | --------------- | -------------------------------------- |
| `info`      | —                                                                     | —     | read            | Service + registry + login status.     |
| `missions`  | `[<id>] [--status A\|E\|C] [--ended] [--grouped] [--page N --size N]` | —     | read            | Flat or grouped mission list / detail. |
| `campaigns` | `[<id>] [--status ACTIVE\|ENDED] [--page N --size N]`                 | —     | read            | Mission groups view.                   |
| `login`     | `--token <jwt>`                                                       | paste | off-chain write | Verify + persist JWT.                  |
| `whoami`    | —                                                                     | JWT   | read            | `GET /users/me`.                       |
| `referral`  | —                                                                     | JWT   | read            | `GET /referrals/me`.                   |
| `submit`    | `<missionId> --url <URL>`                                             | JWT   | off-chain write | `POST /missions/{id}/participate`.     |
| `claim`     | —                                                                     | —     | no-op           | CROSS WAVE has no claim endpoint.      |

***

## 6. Safety & credentials

<Callout icon="🟣" theme="default">
  ### **This skill needs a pasted JWT for auth-path subcommands.** No wallet signing involved.
</Callout>

| Rail                        | What it does                                                                                                                                                                                                          |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Required credential**     | A JWT `access_token` captured from `wave.crosstoken.io` DevTools (Network → any authenticated request → copy `Authorization: Bearer …`).                                                                              |
| **Why paste-the-token**     | ONE WAVE login is ONEx-wallet OAuth at `cross-auth.crosstoken.io`. It uses cross-device WebAuthn passkeys (phone-based 2FA) which crashes Playwright-bundled Chromium on macOS. Headless OAuth is fragile in general. |
| **Token storage**           | Persisted at `~/.claude/skills/cross-wave/.sessions/wave.json` mode `0600`. One-shot alternative: `CROSS_WAVE_ACCESS_TOKEN=<jwt>` env var.                                                                            |
| **Token expiry**            | JWTs last 1–24 h. When auth-required calls return `unauthorized`, repeat the capture.                                                                                                                                 |
| **Submit URL allow-list**   | `submit --url <U>` aborts unless host is in `youtube.com,youtu.be,tiktok.com,vt.tiktok.com`. HTTPS-only.                                                                                                              |
| **Already-submitted guard** | `submit` aborts cleanly if you've already participated in that mission.                                                                                                                                               |

***

## 7. Troubleshooting

<Accordion title="How do I capture the JWT?" icon="fa-info-circle">
  1. Open [https://wave.crosstoken.io](https://wave.crosstoken.io) and log in normally.
  2. Open DevTools → Network tab.
  3. Click any request that goes to `wave-client-api.crosstoken.io` (refresh the page if there are none).
  4. Find the `Authorization: Bearer …` request header.
  5. Copy the value after `Bearer `. Paste it: _"save my WAVE token: eyJhbGciOiJ..."_.
</Accordion>

<Accordion title="bad_url on submit." icon="fa-info-circle">
  The host isn't in the allow-list. Currently allowed: `youtube.com`, `youtu.be`, `tiktok.com`, `vt.tiktok.com`. Set `CROSS_WAVE_SUBMIT_HOSTS` to extend it.
</Accordion>

<Accordion title="already_submitted" icon="fa-info-circle">
  You've already participated in this mission. Each mission accepts one submission per wallet.
</Accordion>

<Accordion title="unauthorized when I had a valid token a few hours ago." icon="fa-info-circle">
  The JWT expired (1–24 h lifetime). Capture a fresh one and re-save.
</Accordion>

<Accordion title="Where do I claim my rewards?" icon="fa-info-circle">
  You don't. ONE WAVE auto-distributes rewards at each mission's `rewardScheduledAt` after operator review. The `claim` subcommand is a no-op.
</Accordion>