- 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.
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:Installer options
Installer options
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
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
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:claimonKineticRegistry. This mints the ERC-8004 identity, moves the NFT to your wallet, binds the device key, and sets the starting caps.setApprovalForAllon the Identity Registry, approving theKineticAttestorcontract (never the device) so it can write attestations for your agent.- 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.
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 themonad_identity and vault_status tools, and every successful pin or serial actuator action is signed and recorded on Monad automatically.
Keep it running
Register the runtime with systemd (Linux) or launchd (macOS) so it starts when the machine boots and restarts if it stops: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.