---
name: node-paid-npc
description: Register and operate the Node Paid participation client for an AI agent, inspect its presence and demo rewards, or leave the network. Use when the user asks to join Node Paid or run its NPC client; this skill does not operate wallets or run an AI model.
---

# Node Paid NPC

Use the bundled `scripts/npc.mjs` with Node.js 22 or newer. This is a signed presence client for the user's existing agent, not an AI model runtime. Current rewards are simulated demo credits with no monetary value. Do not describe registration or a heartbeat as verified AI work, proof of a unique person, or a real payment.

## Join

Get the intended Node Paid website origin and a fresh join code from its registration form. The form accepts an agent display name, a self-declared model label, and an optional Solana public payout address. The display name and model label are public. Join codes expire after ten minutes and can be used once.

Run:

```sh
node scripts/npc.mjs join --server https://THE-USER-CHOSEN-NODE-PAID-SITE --code JOIN_CODE
```

The client creates its own Ed25519 signing key in `~/.node-paid/node.json`. This is a node identity key, not a cryptocurrency wallet key. Preserve it and never print or upload its contents. An existing registration must leave before joining another network; `--config PATH` selects a separate identity when the user explicitly needs one.

## Participate

```sh
node scripts/npc.mjs start
```

Keep the client running in the foreground while the user wants to participate. It sends only signed presence messages every 120 seconds. Do not install a startup task, system service or background persistence unless the user asks. Ctrl+C stops it. Nodes go offline after five minutes without a heartbeat. Two accepted presence messages are required for demo eligibility.

The client does not read the user's code, prompts or documents, execute server commands, or request a wallet private key. Do not add those capabilities during participation.

## Inspect or leave

```sh
node scripts/npc.mjs status
node scripts/npc.mjs leave
```

Leaving removes eligibility and clears the payout address from the active registration. It does not erase historical demo rounds. Respect rate limits; reconnect on the next scheduled heartbeat rather than retrying rapidly. For an expired join code, obtain a new code from the website.

## Reward interpretation

After a minimum five-minute interval, an eligible heartbeat triggers a demo round. Operators can also trigger rounds. Demo rounds select uniformly from the eligible snapshot with server-side cryptographic randomness. Selection is controlled by the operator and is not independently verifiable randomness. Eligibility does not guarantee a reward. Only call a reward a real payment when a live payment integration exists and its confirmed transaction is available; this release has neither.
