Ramestta Agent OS — Docs
Everything you need to give an AI agent an on-chain body on Ramestta: a .rama identity, a smart wallet, sponsored gas, chain-native scheduling, on-chain permissions, and encrypted messaging.
Introduction
The Agent OS is a set of audited-in-progress smart contracts on Ramestta (chain 1370 mainnet, 1371 testnet) plus TypeScript and Python SDKs. The primitives are contracts, not a hosted service — any wallet, dApp, or model can use them permissionlessly. A human controller can pause or revoke an agent at any time.
Getting started
1. Add the Ramestta network
| Network | Ramestta Mainnet |
|---|---|
| Chain ID | 1370 (0x55A) |
| RPC URL | https://blockchain.ramestta.com |
| Currency | RAMA |
| Explorer | ramascan.com |
| Testnet | chain 1371 · https://testnet.ramestta.com · faucet testnet-faucet.ramascan.com |
2. Install an SDK
npm install @ramestta/agent-kit # TypeScript
pip install ramestta-agent-kit # Python (add [mesh] for messaging)
Packages: npm · @ramestta/agent-kit · PyPI · ramestta-agent-kit
3. Boot your first agent
Booting registers a .rama name, deploys the agent's smart wallet, and opens its sponsored-gas account — one transaction. You pay the name price + the Treasury minimum deposit.
import { Agent } from "@ramestta/agent-kit";
const agent = await Agent.boot({ name: "yieldhunter", signer, network: "mainnet" });
console.log(agent.name, agent.wallet); // yieldhunter.rama 0x…
Agent.connect(name, signer, network) to attach with the controller key.Core concepts
| Concept | What it is |
|---|---|
| Identity | A .rama name (RAMANameService) resolving to the agent's wallet, forward & reverse. |
| AgentWallet | An EIP-712 smart account. execute (controller) and executeMeta (session-key/relayer) move funds and call contracts. |
| AgentPermissions | Spend limits, target/token/recipient allow-lists, expiring session keys, and a human approval inbox — enforced on-chain. |
| Scheduler | A permissionless keeper market for time- and condition-triggered tasks. No cron, no server. |
| AgentTreasury | Sponsored-gas quotas (1k/10k/100k per month by tier) refunded to a relayer per meta-tx. |
| Mesh | End-to-end encrypted agent-to-agent messaging (X25519 + AES-256-GCM) over the production relay. |
What can you build?
Once your agent is booted it has a wallet, a name, gas, scheduling, permissions and messaging. Here is what those primitives let it actually do — and the kinds of agents people build by composing them.
Your agent's capabilities
| Capability | What it means |
|---|---|
| Own identity & wallet | A .rama name plus its own smart-account address that holds and controls funds. |
| Send & receive value | Send RAMA or tokens and receive payments — every transfer bounded by on-chain spend limits (per-tx, per-day, allow-lists). |
| Run itself, server-less | “Every N hours do X”, or “when condition Y is true do Z” — executed by the keeper market. No cron, no server of yours. |
| React to the chain | Trigger on prices, balances, yields or events — condition tasks are checked on-chain at execution time. |
| Talk securely | End-to-end-encrypted chat with humans (MumbleChat) and with other agents (mesh) — negotiate, coordinate, report. |
| Pay its own gas | A sponsored-gas quota via the Treasury, so users never need to hold RAMA to interact with it. |
| Be an LLM's hands | Expose read-only discovery through the public remote MCP, then give trusted local AI clients signed tools through the stdio MCP/SDK — your model can use a wallet and scheduler without a key touching a remote host. |
| Stay under human control | Pause it, revoke a session key, or require human approval above a threshold — any time, enforced on-chain. |
Example agents people build
| Agent | What it does |
|---|---|
| 💹 Yield / trading bot | Watches APYs and rebalances a vault when they move — autonomously, on schedule. (The YieldHunter reference demo.) |
| 💸 Payments / payroll agent | Sends scheduled or on-demand payouts, strictly within per-recipient and daily caps. |
| ⛽ Keeper / auto-topup | Refills a pool of wallets or pokes a contract whenever a condition is met — no server holding keys. |
| 💬 Concierge / support agent | Chats over MumbleChat, answers questions, and can transact small amounts within hard limits. |
| 🏦 Treasury automation | Scheduled DCA, sweeps or distributions from a smart wallet with allow-listed targets. |
| 🤝 Agent-to-agent commerce | Agents find each other by .rama name and negotiate / pay each other over encrypted mesh. |
| 🔔 Monitor / alert agent | Watches on-chain events and messages you (or another agent) the moment something happens. |
npm create ramestta-agent, then wire your own logic.TypeScript SDK @ramestta/agent-kit
import { Agent } from "@ramestta/agent-kit";
const agent = await Agent.connect("yieldhunter", signer, "mainnet");
// move funds / call a contract as the agent (controller path)
await agent.execute(target, value, calldata);
// recurring on-chain call, run by keepers — no server
await agent.scheduleEvery(6 * 3600, VAULT, rebalanceCalldata);
// encrypted message to another agent by .rama name
const mesh = await agent.mesh();
await mesh.send("otheragent", { offer: "swap 100 RAMA?" });
// framework-ready tools
import { ramesttaTools } from "@ramestta/agent-kit/langchain";
const tools = await ramesttaTools(agent);
| Method | Description |
|---|---|
Agent.boot(opts) | Register name + deploy wallet + open gas account. |
Agent.connect(name, signer, net) | Attach to a booted agent. |
agent.execute(target, value, data) | Call anything as the agent (controller only). |
agent.executeMeta(...) | Session-key/relayer path through AgentPermissions. |
agent.scheduleEvery(secs, target, data) | Register a recurring keeper task. |
agent.mesh() → .send(name, payload) | Encrypted agent messaging. |
Python SDK ramestta-agent-kit
from ramestta_agent_kit import Agent
agent = Agent.connect("yieldhunter", PRIVATE_KEY, network="mainnet")
agent.execute(target, value_wei, calldata)
agent.schedule_every(6 * 3600, VAULT, calldata)
# encrypted message (needs the [mesh] extra)
import asyncio
asyncio.run(agent.send_message("otheragent", "swap 100 RAMA?"))
# tools for CrewAI / LangChain-py / AutoGen
tools = agent.tools()
ExtraDataToPOAMiddleware automatically (bor is POA-style).Framework adapters
| Framework | Import |
|---|---|
| LangChain.js | import { ramesttaTools } from "@ramestta/agent-kit/langchain" |
| elizaOS | import { createRamesttaPlugin } from "@ramestta/agent-kit/eliza" |
| CrewAI / LangChain-py | agent.tools() → wrap each with the framework's tool decorator |
| AutoGen | from ramestta_agent_kit.autogen import ramestta_function_tools, register_ramestta |
| OpenAI Agents SDK | from ramestta_agent_kit.openai_agents import ramestta_agents_tools |
| Olas / Open Autonomy | from ramestta_agent_kit.olas import ramestta_ops |
| MCP (Claude / Cursor) | Remote MCP: 5 read-only discovery tools. Local stdio MCP: 6 signed control tools (MCP.md) |
Scheduling
Register a task in the Scheduler; a permissionless keeper market executes it. Two trigger types:
- Time / block — runs every
intervalonce pastexecuteAt. - OnCondition — a view probe (address + calldata) decides at execution time whether the task should run.
Tasks hold their own balance and pay the keeper maxFee per run — fund them with fundTask or they stop. Execution is best-effort within 256 blocks; a verifiably-missed, funded task lets its creator claim capped compensation from the SLAInsurancePool.
Messaging
Mesh gives agents end-to-end encrypted messages. The agent↔agent envelope uses an ephemeral X25519 key; the human-interop path uses the MumbleChat mumblechat-e2ee-v1 codec (static-static X25519 → HKDF-SHA256 → AES-256-GCM), so agents and human MumbleChat users can message each other. The Python and TypeScript codecs are wire-identical (cross-verified).
const mesh = await agent.mesh();
mesh.onMessage((m) => console.log(m.from, m.payload));
await mesh.send("otheragent", { text: "gm" });
Permissions & safety
Every delegated (session-key / relayer) action passes AgentPermissions.checkAndConsume on-chain:
- Spend limits — per-tx, per-day, per-month.
- Allow-lists — targets, tokens, recipients.
- Session keys — expiring, spend-capped keys you can
revokeAll. - Approval inbox — spends above a threshold require a human
approve, bound to the exact calldata. - Pause — a human can pause the agent instantly.
execute is unrestricted by design — it's the human root authority. Permissions bound the delegated path an LLM or relayer uses.Contracts mainnet 1370
| Contract | Address |
|---|---|
| AgentBootHelper | 0x0781EAc0486cB177864586e4DfC2077E8B88bBEa |
| Scheduler | 0xb01dcA10Dff6242c46d69CBB9EfcC514a9995F23 |
| AgentTreasury | 0x2a5EBF934D72d3b4b65F6d4A85dCB8639C8cfD8d |
| AgentPermissions | 0xA1C395a5AeF2b584982A1cEC27F10f33D29e25a0 |
| SLAInsurancePool | 0x24fb0B59356799bc985AC6B0476Da9e9180de3bf |
| AgentReputation | 0x774a0da308cD92a09BCF08ff896733fdBDC7786a |
| AgentMemory | 0x571e0C76594348038ed4B9361211Ea2A50bd24ac |
| KeeperRegistry | 0xe573981627216B1353D1690D79154dE941297703 |
| RAMANameService | 0xde4ACb2fB2b69c96c2312887c2656Ee5Ff6290EB (verified) |
MCP server
There are two MCP surfaces. The public remote endpoint at https://agents.ramestta.com/mcp is read-only and exposes five discovery tools: ramestta_network_info, ramestta_resolve_name, ramestta_check_name, ramestta_agent_info, ramestta_getting_started. For value-moving control, run the local stdio server @ramestta/agent-mcp-server; it exposes six signed tools to Claude Desktop, Cursor and other local MCP clients: ramestta_agent_info, ramestta_remaining_quota, ramestta_send_payment, ramestta_schedule_task, ramestta_list_tasks, ramestta_send_message. Add it in one step — no clone needed:
{
"mcpServers": {
"ramestta": {
"command": "npx",
"args": ["-y", "@ramestta/agent-mcp-server"],
"env": { "AGENT_KEY": "0x…controller-key…",
"AGENT_NAME": "youragent",
"RAMESTTA_NETWORK": "mainnet" }
}
}
}
Every value-moving local tool passes the agent's on-chain spend limits. The public remote MCP never accepts private keys and never moves value. Full reference in MCP.md.
Relayer API
The sponsored relayer submits an agent's EIP-712 executeMeta so the agent pays no gas. See openapi.yaml.
| Endpoint | Description |
|---|---|
GET /health | { ok, relayer, chainId, poolBalance } |
POST /sponsor | { agentNameHash, walletAddress, target, value, data, deadline, signature } → { ok, quotaTx, execTx } |
Machine-readable docs
For AI agents and tooling that ingest specs directly:
- llms.txt — concise agent-readable overview
- llms-full.txt — full capability & contract reference
- AGENTS.md — rules & capabilities for agents
- openapi.yaml — relayer API spec
FAQ
Is gas really free?
No — gas is near-zero (~7 gwei), and sponsored per-agent from AgentTreasury so the agent itself pays nothing on the meta-tx path. We never claim "zero gas".
What if I lose the controller key?
Rotate it before it's at risk with transferController. A lost controller key strands the agent (its wallet and name).
Can a human stop an agent?
Yes — pause it, revoke session keys, or reject approval requests. All enforced on-chain, independent of the agent's prompt.
Which frameworks are supported?
LangChain (JS + Py), CrewAI, AutoGen, elizaOS, and MCP today; any orchestrator that accepts callables via agent.tools().