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.

Status: guarded beta on mainnet, pending an independent external audit. Do not move funds you cannot afford to lose.

Getting started

1. Add the Ramestta network

NetworkRamestta Mainnet
Chain ID1370 (0x55A)
RPC URLhttps://blockchain.ramestta.com
CurrencyRAMA
Explorerramascan.com
Testnetchain 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…
Already booted? Use Agent.connect(name, signer, network) to attach with the controller key.

Core concepts

ConceptWhat it is
IdentityA .rama name (RAMANameService) resolving to the agent's wallet, forward & reverse.
AgentWalletAn EIP-712 smart account. execute (controller) and executeMeta (session-key/relayer) move funds and call contracts.
AgentPermissionsSpend limits, target/token/recipient allow-lists, expiring session keys, and a human approval inbox — enforced on-chain.
SchedulerA permissionless keeper market for time- and condition-triggered tasks. No cron, no server.
AgentTreasurySponsored-gas quotas (1k/10k/100k per month by tier) refunded to a relayer per meta-tx.
MeshEnd-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

CapabilityWhat it means
Own identity & walletA .rama name plus its own smart-account address that holds and controls funds.
Send & receive valueSend 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 chainTrigger on prices, balances, yields or events — condition tasks are checked on-chain at execution time.
Talk securelyEnd-to-end-encrypted chat with humans (MumbleChat) and with other agents (mesh) — negotiate, coordinate, report.
Pay its own gasA sponsored-gas quota via the Treasury, so users never need to hold RAMA to interact with it.
Be an LLM's handsExpose 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 controlPause it, revoke a session key, or require human approval above a threshold — any time, enforced on-chain.

Example agents people build

AgentWhat it does
💹 Yield / trading botWatches APYs and rebalances a vault when they move — autonomously, on schedule. (The YieldHunter reference demo.)
💸 Payments / payroll agentSends scheduled or on-demand payouts, strictly within per-recipient and daily caps.
⛽ Keeper / auto-topupRefills a pool of wallets or pokes a contract whenever a condition is met — no server holding keys.
💬 Concierge / support agentChats over MumbleChat, answers questions, and can transact small amounts within hard limits.
🏦 Treasury automationScheduled DCA, sweeps or distributions from a smart wallet with allow-listed targets.
🤝 Agent-to-agent commerceAgents find each other by .rama name and negotiate / pay each other over encrypted mesh.
🔔 Monitor / alert agentWatches on-chain events and messages you (or another agent) the moment something happens.
Every one of these is the same primitives — Scheduling, Permissions, Messaging — composed differently. Start from a template with 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);
MethodDescription
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()
web3.py note: the SDK injects ExtraDataToPOAMiddleware automatically (bor is POA-style).

Framework adapters

FrameworkImport
LangChain.jsimport { ramesttaTools } from "@ramestta/agent-kit/langchain"
elizaOSimport { createRamesttaPlugin } from "@ramestta/agent-kit/eliza"
CrewAI / LangChain-pyagent.tools() → wrap each with the framework's tool decorator
AutoGenfrom ramestta_agent_kit.autogen import ramestta_function_tools, register_ramestta
OpenAI Agents SDKfrom ramestta_agent_kit.openai_agents import ramestta_agents_tools
Olas / Open Autonomyfrom 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:

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.

Fund your tasks. Keeper fees are real economics. An unfunded task simply won't be executed.

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:

The controller's direct execute is unrestricted by design — it's the human root authority. Permissions bound the delegated path an LLM or relayer uses.

Contracts mainnet 1370

ContractAddress
AgentBootHelper0x0781EAc0486cB177864586e4DfC2077E8B88bBEa
Scheduler0xb01dcA10Dff6242c46d69CBB9EfcC514a9995F23
AgentTreasury0x2a5EBF934D72d3b4b65F6d4A85dCB8639C8cfD8d
AgentPermissions0xA1C395a5AeF2b584982A1cEC27F10f33D29e25a0
SLAInsurancePool0x24fb0B59356799bc985AC6B0476Da9e9180de3bf
AgentReputation0x774a0da308cD92a09BCF08ff896733fdBDC7786a
AgentMemory0x571e0C76594348038ed4B9361211Ea2A50bd24ac
KeeperRegistry0xe573981627216B1353D1690D79154dE941297703
RAMANameService0xde4ACb2fB2b69c96c2312887c2656Ee5Ff6290EB (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.

EndpointDescription
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:

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().