multiAI Summary Pending
agents-infra
Infrastructure for AI Agents. Phone, email, Social accounts, compute, domains, and voice calling for AI agents. Pay with USDC on Solana or Base via x402.
3,556 stars
byopenclaw
Installation
Claude Code / Cursor / Codex
$curl -o ~/.claude/skills/agents-infra/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/0xartex/agents-infra/SKILL.md"
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/agents-infra/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How agents-infra Compares
| Feature / Agent | agents-infra | Standard Approach |
|---|---|---|
| Platform Support | multi | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Infrastructure for AI Agents. Phone, email, Social accounts, compute, domains, and voice calling for AI agents. Pay with USDC on Solana or Base via x402.
Which AI agents support this skill?
This skill is compatible with multi.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
**Base URL:** `https://agntos.dev`
**Source:** https://github.com/0xArtex/AgentOS
## Quick Reference
| Service | Endpoint | Cost (USDC) |
|---------|----------|-------------|
| Register agent | `POST /agents/register` | Free |
| **Phone** | | |
| Search numbers | `GET /phone/numbers/search?country=US` | Free |
| Provision number | `POST /phone/numbers` | 2.00 |
| Send SMS | `POST /phone/numbers/:id/send` | 0.05 |
| Read messages | `GET /phone/numbers/:id/messages` | 0.01 |
| **Voice Calls** | | |
| Place call | `POST /phone/numbers/:id/call` | 0.10 |
| Speak (TTS) | `POST /phone/calls/:callControlId/speak` | 0.05 |
| Play audio | `POST /phone/calls/:callControlId/play` | 0.05 |
| Send DTMF | `POST /phone/calls/:callControlId/dtmf` | 0.02 |
| Gather input | `POST /phone/calls/:callControlId/gather` | 0.05 |
| Record call | `POST /phone/calls/:callControlId/record` | 0.05 |
| Hangup | `POST /phone/calls/:callControlId/hangup` | 0.01 |
| Answer inbound | `POST /phone/calls/:callControlId/answer` | 0.01 |
| Transfer call | `POST /phone/calls/:callControlId/transfer` | 0.10 |
| List calls | `GET /phone/numbers/:id/calls` | 0.01 |
| Call details | `GET /phone/calls/:id` | 0.01 |
| **Email** | | |
| Provision inbox | `POST /email/inboxes` | 1.00 |
| Read inbox | `GET /email/inboxes/:id/messages` | 0.01 |
| Send email | `POST /email/inboxes/:id/send` | 0.05 |
| **Compute** | | |
| List plans | `GET /compute/plans` | Free |
| Upload SSH key | `POST /compute/ssh-keys` | 0.10 |
| Create server | `POST /compute/servers` | 5.00-95.00 |
| List servers | `GET /compute/servers` | 0.01 |
| Server status | `GET /compute/servers/:id` | 0.01 |
| Server action | `POST /compute/servers/:id/actions` | 0.05 |
| Resize server | `POST /compute/servers/:id/resize` | 0.10 |
| Delete server | `DELETE /compute/servers/:id` | 0.05 |
| **Domains** | | |
| Check availability | `GET /domains/check?domain=example.com` | Free |
| TLD pricing | `GET /domains/pricing?domain=example` | Free |
| Register domain | `POST /domains/register` | ~14-88 |
| DNS records | `GET /domains/:domain/dns` | Free |
| Update DNS | `POST /domains/:domain/dns` | Free |
| Pricing | `GET /pricing` | Free |
All paid endpoints use **x402** — make the request, get a 402, pay with USDC, done.
## Authentication
**Option A: Agent token** (register once)
```
Authorization: Bearer aos_xxxxx
```
**Option B: x402 payment** (no registration needed)
Just call any endpoint. The 402 response tells you what to pay. Payment = auth.
## How x402 Works
1. Call any paid endpoint → get `402 Payment Required`
2. Build a USDC transfer to the treasury address
3. Send it in the `Payment-Signature` header
4. Server verifies, settles on-chain, returns the response
**Networks supported:** Solana mainnet + Base (EVM)
---
## Register Agent (Free)
```bash
curl -X POST https://agntos.dev/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "walletAddress": "YOUR_SOLANA_PUBKEY"}'
```
Returns token — save it: `Authorization: Bearer aos_xxxxx`
---
## 📱 Phone & SMS
### Search Available Numbers (Free)
```bash
curl "https://agntos.dev/phone/numbers/search?country=US&limit=5"
```
### Provision Number (2.00 USDC)
```bash
curl -X POST https://agntos.dev/phone/numbers \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"country": "US"}'
```
Response:
```json
{
"id": "uuid",
"phoneNumber": "+14782058302",
"country": "US",
"owner": "your-agent",
"active": true
}
```
### Send SMS (0.05 USDC)
```bash
curl -X POST https://agntos.dev/phone/numbers/PHONE_ID/send \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"to": "+15551234567", "body": "Hello from my agent!"}'
```
### Read Messages (0.01 USDC)
```bash
curl https://agntos.dev/phone/numbers/PHONE_ID/messages \
-H "Authorization: Bearer aos_xxxxx"
```
---
## 📞 Voice Calls
### Place Outbound Call (0.10 USDC)
```bash
curl -X POST https://agntos.dev/phone/numbers/PHONE_ID/call \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"to": "+15551234567",
"tts": "Hello! I am an AI agent calling you.",
"ttsVoice": "female",
"record": true
}'
```
Response:
```json
{
"id": "uuid",
"callControlId": "v3:xxxxx",
"from": "+14782058302",
"to": "+15551234567",
"status": "initiated",
"message": "Calling +15551234567 from +14782058302",
"hint": "TTS will play when the call is answered"
}
```
**Parameters:**
- `to` (required) — phone number to call (E.164 format)
- `tts` — text-to-speech message to play when answered
- `ttsVoice` — voice: `male` or `female`
- `audioUrl` — URL of audio file to play when answered
- `record` — `true` to record the call
- `timeoutSecs` — ring timeout (default 30)
### In-Call Actions
Once a call is connected, use the `callControlId` from the dial response:
**Speak text (TTS) — 0.05 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/speak \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"text": "Please press 1 for sales or 2 for support", "voice": "female", "language": "en-US"}'
```
**Play audio file — 0.05 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/play \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"audioUrl": "https://example.com/greeting.mp3"}'
```
**Send DTMF tones — 0.02 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/dtmf \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"digits": "1234#"}'
```
**Gather DTMF input — 0.05 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/gather \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"maxDigits": 4,
"terminatingDigit": "#",
"prompt": "Please enter your PIN followed by the pound sign"
}'
```
**Start recording — 0.05 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/record \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"format": "mp3"}'
```
**Stop recording:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/record/stop \
-H "Authorization: Bearer aos_xxxxx"
```
**Transfer call — 0.10 USDC:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/transfer \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"to": "+15559876543"}'
```
**Answer inbound call:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/answer \
-H "Authorization: Bearer aos_xxxxx"
```
**Hang up:**
```bash
curl -X POST https://agntos.dev/phone/calls/CALL_CONTROL_ID/hangup \
-H "Authorization: Bearer aos_xxxxx"
```
### Call History
**List calls for a number (0.01 USDC):**
```bash
curl https://agntos.dev/phone/numbers/PHONE_ID/calls \
-H "Authorization: Bearer aos_xxxxx"
```
**Get call details (0.01 USDC):**
```bash
curl https://agntos.dev/phone/calls/CALL_ID \
-H "Authorization: Bearer aos_xxxxx"
```
### Example: Agent calls a restaurant
```
1. POST /phone/numbers/PHONE_ID/call → {"to": "+15551234567", "tts": "Hi, I'd like to place an order"}
2. Wait for call.answered webhook
3. POST /phone/calls/CTRL_ID/gather → {"prompt": "Press 1 for English", "maxDigits": 1}
4. POST /phone/calls/CTRL_ID/dtmf → {"digits": "1"}
5. POST /phone/calls/CTRL_ID/speak → {"text": "I'd like to order two large pizzas for delivery"}
6. POST /phone/calls/CTRL_ID/hangup
```
---
## 📧 Email
### Provision Inbox (1.00 USDC)
```bash
curl -X POST https://agntos.dev/email/inboxes \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "walletAddress": "YOUR_SOLANA_PUBKEY"}'
```
Returns: `my-agent@agntos.dev`
### Read Inbox (0.01 USDC via x402)
```bash
curl https://agntos.dev/email/inboxes/INBOX_ID/messages
```
### Send Email (0.05 USDC via x402)
```bash
curl -X POST https://agntos.dev/email/inboxes/INBOX_ID/send \
-H "Content-Type: application/json" \
-d '{"to": "user@example.com", "subject": "Hello", "body": "Message from my agent"}'
```
---
## 💻 Compute (VPS)
### List Plans (Free)
```bash
curl https://agntos.dev/compute/plans
```
Available plans:
| Type | vCPU | RAM | Disk | Price/mo |
|------|------|-----|------|----------|
| cx23 | 2 | 4GB | 40GB | $5 |
| cx33 | 4 | 8GB | 80GB | $9 |
| cx43 | 8 | 16GB | 160GB | $15 |
| cx53 | 16 | 32GB | 320GB | $28 |
| cpx11 | 2 | 2GB | 40GB | $7 |
| cpx21 | 3 | 4GB | 80GB | $15 |
| cpx31 | 4 | 8GB | 160GB | $26 |
| cpx41 | 8 | 16GB | 240GB | $48 |
| cpx51 | 16 | 32GB | 360GB | $95 |
### Upload SSH Key (0.10 USDC)
```bash
curl -X POST https://agntos.dev/compute/ssh-keys \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"name": "my-key", "publicKey": "ssh-ed25519 AAAA..."}'
```
Returns `id` — use it when creating servers.
### Create Server (5.00-95.00 USDC)
```bash
curl -X POST https://agntos.dev/compute/servers \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"name": "my-server", "serverType": "cx23", "sshKeyIds": [KEY_ID]}'
```
Response:
```json
{
"id": "12345",
"name": "my-server",
"serverType": "cx23",
"status": "running",
"ipv4": "89.167.36.207",
"message": "Server created. SSH in with: ssh root@89.167.36.207"
}
```
**Zero-access design:** You provide your SSH public key. We never see your private key. We can't access your server.
### Server Actions (0.05 USDC)
```bash
curl -X POST https://agntos.dev/compute/servers/SERVER_ID/actions \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"action": "reboot"}'
```
Actions: `reboot`, `poweron`, `poweroff`, `rebuild`, `reset`
### Resize Server (0.10 USDC)
```bash
curl -X POST https://agntos.dev/compute/servers/SERVER_ID/resize \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"serverType": "cx33"}'
```
Note: Server must be powered off to resize.
### Delete Server (0.05 USDC)
```bash
curl -X DELETE https://agntos.dev/compute/servers/SERVER_ID \
-H "Authorization: Bearer aos_xxxxx"
```
---
## 🌐 Domains
### Check Availability (Free)
```bash
curl "https://agntos.dev/domains/check?domain=example.com"
```
### Get Pricing (Free)
```bash
curl "https://agntos.dev/domains/pricing?domain=example"
```
### Register Domain (dynamic pricing via x402)
```bash
curl -X POST https://agntos.dev/domains/register \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"domain": "my-agent.dev"}'
```
### DNS Management (Free for owners)
```bash
# Get records
curl https://agntos.dev/domains/my-agent.dev/dns -H "Authorization: Bearer aos_xxxxx"
# Set records
curl -X POST https://agntos.dev/domains/my-agent.dev/dns \
-H "Authorization: Bearer aos_xxxxx" \
-H "Content-Type: application/json" \
-d '{"records": [{"type": "A", "name": "@", "value": "1.2.3.4"}]}'
```
---
## Payment Details
- **Solana:** USDC to `B1YEboAH3ZDscqni7cyVnGkcDroB2kqLXCwLs3Ez8oX3`
- **Base (EVM):** USDC to `0x7fA8aC4b42fd0C97ca983Bc73135EdbeA5bD6ab2`
- **x402 Version:** 2
- **Facilitator:** `4R67MWivvc52g9BSzQRvQyD8GshttW1QLbnj46usBrcQ`
## Webhooks
Set up webhooks to receive events:
- **SMS inbound:** Messages to your number arrive via Telnyx webhook → stored, readable via API
- **Voice events:** `call.initiated`, `call.answered`, `call.hangup`, `call.recording.saved`, `call.gather.ended`
- **Email inbound:** Emails to `*@agntos.dev` processed via Cloudflare worker → stored encrypted