resolving-domains
ENS and Web3 identity resolution for XMTP agents. Use when resolving domain names, extracting mentions, or fetching Farcaster profiles. Triggers on ENS resolution, Farcaster lookup, or mention extraction.
Best use case
resolving-domains is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
ENS and Web3 identity resolution for XMTP agents. Use when resolving domain names, extracting mentions, or fetching Farcaster profiles. Triggers on ENS resolution, Farcaster lookup, or mention extraction.
Teams using resolving-domains should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/resolving-domains/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How resolving-domains Compares
| Feature / Agent | resolving-domains | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
ENS and Web3 identity resolution for XMTP agents. Use when resolving domain names, extracting mentions, or fetching Farcaster profiles. Triggers on ENS resolution, Farcaster lookup, or mention extraction.
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
# XMTP domain resolver
Resolve Web3 identities including ENS, Farcaster, Basenames, and Lens Protocol.
## When to apply
Reference these guidelines when:
- Resolving ENS names to addresses
- Extracting @mentions from messages
- Fetching Farcaster profiles
- Working with shortened addresses in groups
## Rule categories by priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Resolve | HIGH | `resolve-` |
| 2 | Extract | HIGH | `extract-` |
| 3 | Profiles | MEDIUM | `profiles-` |
## Quick reference
### Resolve (HIGH)
- `resolve-address` - Resolve domain names to addresses
- `resolve-mentions` - Resolve all mentions in a message
### Extract (HIGH)
- `extract-mentions` - Extract @mentions from text
### Profiles (MEDIUM)
- `profiles-farcaster` - Fetch Farcaster profile data
## Supported platforms
- **ENS** - `vitalik.eth`
- **Farcaster** - `dwr.eth`, `username.farcaster.eth`
- **Basenames** - `tony.base.eth`
- **Lens Protocol** - `stani.lens`
## Quick start
```typescript
import { createNameResolver } from "@xmtp/agent-sdk/user";
// Resolve a single name using the SDK resolver
const resolver = createNameResolver(process.env.WEB3_BIO_API_KEY || "");
const address = await resolver("vitalik.eth");
// Resolve all mentions in a message
const resolved = await resolveMentionsInMessage(
ctx.message.content,
await ctx.conversation.members()
);
// Returns: { "bankr.eth": "0x...", "@fabri": "0x..." }
// Get Farcaster profile via web3.bio API
const profile = await fetchFarcasterProfile("dwr.eth");
console.log(profile.username, profile.fid);
```
## Implementation snippets
**Extract mentions from text:**
```typescript
const extractMentions = (message: string): string[] => {
const mentions: string[] = [];
// Full addresses
const addresses = message.match(/(0x[a-fA-F0-9]{40})\b/g);
if (addresses) mentions.push(...addresses);
// @mentions and domains
const atMentions = message.match(/@(?!0x)([\w.-]+\.eth|[\w.-]+)/g);
if (atMentions) mentions.push(...atMentions.map(m => m.slice(1)));
// Standalone domains
const domains = message.match(/\b([\w-]+(?:\.[\w-]+)*\.eth)\b/g);
if (domains) mentions.push(...domains);
return [...new Set(mentions)];
};
```
**Resolve mentions in message:**
```typescript
import { createNameResolver } from "@xmtp/agent-sdk/user";
const resolveMentionsInMessage = async (
message: string, members?: GroupMember[]
): Promise<Record<string, string | null>> => {
const resolver = createNameResolver(process.env.WEB3_BIO_API_KEY || "");
const mentions = extractMentions(message);
const results: Record<string, string | null> = {};
await Promise.all(mentions.map(async (mention) => {
if (mention.match(/^0x[a-fA-F0-9]{40}$/)) {
results[mention] = mention;
} else {
const name = mention.includes(".") ? mention : `${mention}.farcaster.eth`;
results[mention] = await resolver(name).catch(() => null);
}
}));
return results;
};
```
**Fetch Farcaster profile:**
```typescript
const fetchFarcasterProfile = async (name: string) => {
const response = await fetch(`https://api.web3.bio/profile/${encodeURIComponent(name)}`);
if (!response.ok) return { address: null, username: null, fid: null };
const data = await response.json();
const profile = data?.find((p: any) => p.platform === "farcaster");
return {
address: profile?.address,
username: profile?.displayName,
fid: profile?.social?.uid?.toString(),
};
};
```
## How to use
Read individual rule files for detailed explanations:
```
rules/resolve-address.md
rules/extract-mentions.md
rules/profiles-farcaster.md
```Related Skills
premium-domains
Search for premium domains for sale across Afternic, Sedo, Atom, Dynadot, Namecheap, NameSilo, and Unstoppable Domains.
naming-and-domains
Name a business, product, or service and secure a matching domain.
paylock
Non-custodial SOL escrow for AI agent deals.
agent-reputation
summary: Cross-platform AI agent reputation checker with trust scoring and PayLock escrow recommendations.
Telecom Agent Skill
Turn your AI Agent into a Telecom Operator. Bulk calling, ChatOps, and Field Monitoring.
OpenClaw-Finnhub
OpenClaw skill for real-time stock quote, and financials via Finnhub API.
```markdown
# OpenClaw-Last.fm
security-operator
Runtime security guardrails for OpenClaw agents.
operator-humanizer
Transform AI-generated text into authentic human writing.
kit-email-operator
**AI-powered email marketing for Kit (ConvertKit)**.
agora
Trade prediction markets on Agora — the prediction market exclusively for AI agents. Register, browse markets, trade YES/NO, create markets, earn reputation via Brier scores.
surf-check
Surf forecast decision engine.