Skip to main content
By the end of this page you will have a device that:
  • holds its own signing key,
  • is claimed as an ERC-8004 agent whose NFT sits in your wallet,
  • has a funded vault with spending caps you chose,
  • answers you on Telegram and records its actions on Monad.
The device can be a Raspberry Pi, any 64-bit Linux machine, or a Mac. Hardware such as an ESP32 is optional for this page; Hardware and firmware covers it.

Before you start

A machine to run on

64-bit Linux (x86_64 or aarch64) or macOS (Apple Silicon or Intel). On a Raspberry Pi, use the 64-bit Raspberry Pi OS image.

An owner wallet with testnet MON

MetaMask or any EVM wallet on Monad testnet (chain id 10143). You need a few MON for the claim, 1 MON of starting gas for the device, and whatever you deposit into the vault. Get testnet MON from the Monad faucet.

A Telegram bot token

Open @BotFather in Telegram, send /newbot, and copy the token it returns. This bot becomes the device’s voice.

A model provider

An API key for Anthropic, OpenAI, Gemini, or OpenRouter, or a local Ollama install. Any OpenAI-compatible endpoint also works.
You do not deploy any contracts. Every device uses the shared KineticVM deployment on Monad testnet. See Deployments.

Set up the device

Install the binary

Run the installer on the device.
The installer downloads the latest release for your platform, checks it against the published SHA256SUMS, and puts kinetic in ~/.local/bin. Make sure that directory is on your PATH, then confirm:
To build from source instead, clone the repository and run cargo build --release with Rust 1.96. The binary is target/release/kinetic.

Run quickstart

Quickstart is interactive and needs a terminal. It asks for eight answers:The per-transaction cap cannot be higher than the daily cap. Quickstart writes ~/.kinetic/config.toml (or the directory in KINETIC_CONFIG_DIR), turns on the [chain] section, and creates an agent with the alias device.
Quickstart does not create the device key yet. The key is created the first time the device needs the chain, which is right after you pair Telegram in the next steps.

Start the runtime

The KineticVM mark prints, the gateway and channels come up, and because no Telegram account is paired yet, the terminal shows a one-time code:

Pair your Telegram account

Open a chat with your bot and send the code:
The terminal prints ✅ Telegram paired successfully!. That chat is now the owner chat: the only chat allowed to run owner commands.Right after pairing, the device creates its signing key, encrypts it on disk, signs a claim ticket naming your owner wallet, and sends a Claim message to the chat with two buttons: Open in browser and Open in MetaMask.

Claim the device

Tap a button and connect the owner wallet you entered in quickstart. The claim page at claim.kineticvm.xyz walks you through up to three confirmations:
  1. claim on KineticRegistry. This mints the ERC-8004 identity, moves the NFT to your wallet, binds the device key, and sets the starting caps.
  2. setApprovalForAll on the Identity Registry, approving the KineticAttestor contract (never the device) so it can write attestations for your agent.
  3. A 1 MON gas transfer to the device address, only if the device holds less than 1 MON. The device needs gas to send its own transactions.
The page never sees the device key. When the claim lands, the terminal shows:
The claim ticket is valid for 23 hours, inside the contract’s one-day limit. If it expires, restart kinetic start or run kinetic claim-link to get a fresh link.

Fund the vault

Telegram also receives a Device Vault link. Open it, connect any wallet, and deposit MON. You can always get the link again with /deposit.The vault holds the device’s spending money, separately from the device’s gas. The device can only reach it through the caps, and the owner can withdraw at any time.

Check that everything is live

In the owner chat, send:
The reply shows the agent id, device address, owner, vault balance, what has been spent today, both caps, whether spending is paused, and links to the most recent attestations.On the device, print the device card:

Talk to the device

Message the bot like any assistant. The agent can read its identity and vault with the monad_identity and vault_status tools, and every successful pin or serial actuator action is signed and recorded on Monad automatically.
You can also chat from the device’s own terminal:

Keep it running

Register the runtime with systemd (Linux) or launchd (macOS) so it starts when the machine boots and restarts if it stops:
To update later, run kinetic update. It replaces the binary with the latest release after checking its checksum. Your config and device key are left in place.

Headless setup

If you configure a device over SSH or from a script, you can skip the Telegram claim message and print the claim link directly:
claim-link creates the device key if needed, signs the claim ticket, and prints the URL. Open it in the owner wallet. The terminal QR code, if shown, contains only kinetic:<device address>, never the signature.

What just happened

Next steps

How it works

The full architecture and the lifecycle of a device.

Build a vending machine

Wire a Raspberry Pi to an ESP32 and attest every vend.

Owner commands

Pause, change limits, and approve recipients from Telegram.

Write a plugin

Add your own tools to the device.