OpenClaw Integration
Using daimon.email as an OpenClaw skill
Overview
daimon.email is fully compatible with the OpenClaw protocol, enabling automatic skill discovery and integration. OpenClaw-compatible agents can discover and use daimon.email capabilities without manual configuration.
Info
Auto-discovery: OpenClaw agents automatically detect daimon.email capabilities through the standardized SKILL.md manifest. No manual integration required.
OpenClaw Protocol
OpenClaw is a protocol for AI agent skill discovery and composition. Agents can:
- Discover available skills via SKILL.md manifest
- Understand capabilities without custom training
- Compose multiple skills into workflows
- Share skill libraries across agent frameworks
SKILL.md Manifest
daimon.email provides a complete OpenClaw SKILL.md manifest:
---
name: daimon-email
version: 1.0.0
protocol: openclaw-v1
category: communication
tags: [email, inbox, messaging, agent-infrastructure]
---
# daimon.email - Email Infrastructure for AI Agents
## Description
Email infrastructure built specifically for AI agents. Create inboxes, send/receive emails,
and manage email workflows without human intervention.
## Capabilities
### create_inbox
Create a new email inbox instantly. No authentication required for free tier.
**Input:**
```json
{
"username": "string (required) - Username for the inbox",
"client_id": "string (optional) - Idempotency key"
}Output:
{
"email": "string - Email address (username@daimon.email)",
"inbox_id": "string - Inbox identifier",
"api_key": "string - API key for this inbox",
"tier": "string - Account tier (free/developer/growth)"
}check_messages
Check for new messages in an inbox.
Input:
{
"inbox_id": "string (required) - Inbox to check",
"limit": "number (optional) - Max messages to return"
}Output:
{
"messages": [
{
"id": "string - Message ID",
"from": "string - Sender email",
"subject": "string - Email subject",
"body": "string - Full email body",
"reply_body": "string - Extracted reply without quotes",
"cta_links": ["array - Detected confirmation/verification links"],
"received_at": "string - ISO timestamp"
}
]
}send_email
Send an email from an inbox. Requires paid tier.
Input:
{
"inbox_id": "string (required) - Inbox to send from",
"to": "string (required) - Recipient email",
"subject": "string (required) - Email subject",
"body": "string (required) - Email body"
}Output:
{
"message_id": "string - Sent message ID",
"status": "string - 'queued' or 'sent'"
}get_capabilities
Check what the agent can do at current tier.
Input:
{
"api_key": "string (required) - API key to check"
}Output:
{
"tier": "string - Current tier",
"can": ["array - Available capabilities"],
"cannot": ["array - Unavailable capabilities with upgrade info"]
}Authentication
API key from inbox creation. Format: dm_free_* or dm_live_*.
Rate Limits
- Free tier: 10 inbox creates per hour per IP
- Developer: Unlimited creates, 1000 sends/month
- Growth: Unlimited creates and sends
Example Usage
# OpenClaw agent discovers and uses daimon.email
from openclaw import Agent, SkillRegistry
# Agent discovers skill
agent = Agent()
registry = SkillRegistry()
email_skill = registry.discover('daimon-email')
# Agent uses skill
inbox = email_skill.execute('create_inbox', {
'username': 'my-agent'
})
messages = email_skill.execute('check_messages', {
'inbox_id': inbox['inbox_id']
})Error Handling
All tier-limit errors include upgrade context:
{
"error": "SEND_REQUIRES_PAID",
"upgrade_context": {
"operator_action_url": "https://...",
"agent_script": "Tell your operator: ..."
}
}Metadata
- Base URL: https://api.daimon.email
- OpenAPI Spec: https://api.daimon.email/openapi.json
- Documentation: https://docs.daimon.email
- Status: https://status.daimon.email
## Using with OpenClaw Agents
```python Python
from openclaw import Agent, SkillRegistry
# Agent automatically discovers daimon.email skill
agent = Agent(name="EmailBot")
registry = SkillRegistry()
registry.auto_discover() # Finds daimon.email via SKILL.md
# Create inbox via skill
result = agent.execute(
skill="daimon-email",
capability="create_inbox",
params=dict(username="openclaw-agent")
)
print("Created inbox:", result["email"])
# Check messages
messages = agent.execute(
skill="daimon-email",
capability="check_messages",
params=dict(inbox_id=result["inbox_id"])
)
for msg in messages["messages"]:
print("From:", msg["from"])
print("Subject:", msg["subject"])import { Agent, SkillRegistry } from 'openclaw';
const agent = new Agent({ name: 'EmailBot' });
const registry = new SkillRegistry();
await registry.autoDiscover();
const inbox = await agent.execute({
skill: 'daimon-email',
capability: 'create_inbox',
params: { username: 'openclaw-agent' }
});
console.log('Created inbox:', inbox.email);
const messages = await agent.execute({
skill: 'daimon-email',
capability: 'check_messages',
params: { inboxId: inbox.inbox_id }
});
messages.messages.forEach(msg => {
console.log('From:', msg.from);
console.log('Subject:', msg.subject);
});Skill Composition
# Compose daimon.email with other OpenClaw skills
from openclaw import Agent, SkillChain
agent = Agent()
# Chain: Create inbox → Sign up for service → Verify email
workflow = SkillChain([
{
'skill': 'daimon-email',
'capability': 'create_inbox',
'params': {'username': 'agent-signup'}
},
{
'skill': 'web-automation',
'capability': 'fill_form',
'params': {
'url': 'https://service.com/signup',
'fields': {
'email': '{{previous.email}}' # Use email from step 1
}
}
},
{
'skill': 'daimon-email',
'capability': 'check_messages',
'params': {'inbox_id': '{{step1.inbox_id}}'}
}
])
result = agent.execute_chain(workflow)Multi-Agent Coordination
# Multiple agents sharing email skill
from openclaw import AgentTeam
team = AgentTeam([
Agent(name='InboxManager', skills=['daimon-email']),
Agent(name='CustomerSupport', skills=['daimon-email', 'llm']),
Agent(name='Researcher', skills=['daimon-email', 'web-search'])
])
# Inbox manager creates inboxes for team
inbox1 = team.agents['InboxManager'].execute(
skill='daimon-email',
capability='create_inbox',
params={'username': 'support'}
)
inbox2 = team.agents['InboxManager'].execute(
skill='daimon-email',
capability='create_inbox',
params={'username': 'research'}
)
# Customer support monitors support inbox
team.agents['CustomerSupport'].monitor(
skill='daimon-email',
capability='check_messages',
params={'inbox_id': inbox1['inbox_id']},
interval=60 # Check every 60 seconds
)Skill Discovery Flow
1. Agent starts with no knowledge of daimon.email
↓
2. Agent queries OpenClaw registry for 'email' skills
↓
3. Registry returns daimon.email SKILL.md manifest
↓
4. Agent parses capabilities from manifest
↓
5. Agent can now use daimon.email without custom codeCustom Skill Extensions
# Extend daimon.email with custom capabilities
from openclaw import Skill, Capability
class DaimonEmailExtended(Skill):
base_skill = 'daimon-email'
@Capability
def auto_reply(self, inbox_id: str, template: str):
"""Auto-reply to all new messages."""
# Check messages
messages = self.execute('check_messages', {'inbox_id': inbox_id})
# Send replies
for msg in messages['messages']:
self.execute('send_email', {
'inbox_id': inbox_id,
'to': msg['from'],
'subject': f"Re: {msg['subject']}",
'body': template
})
# Register extended skill
registry.register(DaimonEmailExtended())Skill Versioning
# Agent can specify skill version
email_v1 = registry.get_skill('daimon-email@1.0.0')
email_latest = registry.get_skill('daimon-email@latest')
# Capabilities may vary by version
assert email_v1.has_capability('create_inbox')
assert email_latest.has_capability('create_inbox')Testing OpenClaw Integration
# Test skill discovery
def test_skill_discovery():
registry = SkillRegistry()
skill = registry.discover('daimon-email')
assert skill is not None
assert 'create_inbox' in skill.capabilities
assert 'check_messages' in skill.capabilities
assert 'send_email' in skill.capabilities
# Test skill execution
def test_skill_execution():
agent = Agent()
result = agent.execute(
skill='daimon-email',
capability='create_inbox',
params={'username': 'test'}
)
assert 'email' in result
assert result['email'].endswith('@daimon.email')Best Practices
- Use idempotency keys: Always provide
client_idfor inbox creation - Check capabilities first: Call
get_capabilitiesbefore attempting operations - Handle upgrade flows: Respect tier limits and use upgrade context
- Compose skills: Chain daimon.email with other skills for complex workflows
- Version your dependencies: Pin specific skill versions in production
OpenClaw Ecosystem
daimon.email integrates with other OpenClaw skills:
- web-automation: Sign up for services using daimon.email addresses
- llm: Generate email content with AI
- web-search: Find contact information for outreach
- scheduling: Coordinate meeting times via email
- data-extraction: Parse structured data from emails