✓ Verified 💻 Development ✓ Enhanced Data

Agent Contact Card

Discover and create Agent Contact Cards - a vCard-like.

Rating
4.8 (316 reviews)
Downloads
6,537 downloads
Version
1.0.0

Overview

Discover and create Agent Contact Cards - a vCard-like.

Complete Documentation

View Source →

Agent Contact Card

A simple format for publishing how AI agents can be contacted. Like a vCard, but for agents.

When to Use This Skill

  • User asks how to let other agents contact their agent
  • User wants to discover how to reach someone else's agent
  • You need to contact another agent on behalf of your user
  • User mentions "agent-card", "agent contact", or agent-to-agent communication

Quick Reference

Discovering an Agent Contact Card

Try fetching /.well-known/agent-card on their domain:

text
https://example.com/.well-known/agent-card

The file is markdown with YAML frontmatter. Parse the frontmatter for structured channel data, read the prose for routing rules.

Creating an Agent Contact Card

Create a markdown file with YAML frontmatter:

markdown
---
version: "1"
human_contact: "+1 555 123 4567"
channels:
  email: "[email protected]"
  discord: "my-agent#1234"
  webhook:
    url: "https://example.com/agent/incoming"
    method: "POST"
    format: "JSON with 'message' field"
capabilities:
  - scheduling
  - accepts_ical
---

# My Agent

If you're a human, call the number above.

If you're an agent:
- For scheduling requests, use Discord
- For urgent matters, email with "URGENT" in subject
- Response time: within a few hours

Host this at /.well-known/agent-card on the user's domain.

Format Details

Required Fields

FieldDescription
versionSpec version. Currently "1"

Recommended Fields

FieldDescription
human_contactPhone/email for humans to reach the human
channelsContact channels for agents (see below)

Optional Fields

FieldDescription
nameDisplay name for this agent configuration
last_updatedISO date when card was last modified
capabilitiesWhat this agent can do (e.g., ["scheduling", "accepts_ical"])
agentsNamed agents if multiple (see Multi-Agent section)

Channels

Channel names are freeform. Common ones:

  • email - Email address
  • discord - Discord username
  • webhook - HTTP endpoint for structured messages
  • signal - Signal phone number
  • telegram - Telegram username
For webhooks, provide details:

yaml
channels:
  webhook:
    url: "https://example.com/agent/incoming"
    method: "POST"
    auth: "Bearer token in Authorization header"
    format: "JSON with 'message' and 'from' fields"

Multi-Agent Setups

List multiple specialized agents:

yaml
agents:
  - name: "Calendar Agent"
    handles: ["scheduling", "availability"]
    channel: discord
    id: "cal-agent#1234"
  - name: "Support Agent"
    handles: ["technical questions"]
    channel: webhook
    id: "https://example.com/support"

The markdown body should explain routing between them.

Privacy Tiers

Different URLs for different access levels:

TierURL PatternAccess
Public/.well-known/agent-cardAnyone
Named/.well-known/agent-card/{name}Know the name
Private/{random-uuid}/agent-card.mdShared URL only
Each tier can expose different channels and capabilities.

Discovery Methods

  • Well-known URL: Check https://domain/.well-known/agent-card
  • vCard extension: Look for X-AGENT-CARD field in contact cards
  • Ask the human: Request the URL directly

Reading an Agent Card

When you fetch an agent card:

  • Parse YAML frontmatter for structured data
  • Read markdown body for natural language routing rules
  • Choose appropriate channel based on your purpose
  • Follow any authentication requirements mentioned

Test It

Here's a live demo you can test:

text
https://city-services-api.dave-dean.workers.dev/.well-known/agent-card

This is a fictional "City of Millbrook" tip line. Fetch the card, then try POSTing to the webhook endpoint. Your experience may vary depending on what you say.

Full Specification

See references/SPEC.md for the complete specification.

Examples

See references/EXAMPLES.md for more complete examples.

Installation

Terminal bash

openclaw install agent-contact-card
    
Copied!

💻Code Examples

https://example.com/.well-known/agent-card

httpsexamplecomwell-knownagent-card.txt
The file is markdown with YAML frontmatter. Parse the frontmatter for structured channel data, read the prose for routing rules.

### Creating an Agent Contact Card

Create a markdown file with YAML frontmatter:

- Response time: within a few hours

--response-time-within-a-few-hours.txt
Host this at `/.well-known/agent-card` on the user's domain.

## Format Details

### Required Fields

| Field | Description |
|-------|-------------|
| `version` | Spec version. Currently `"1"` |

### Recommended Fields

| Field | Description |
|-------|-------------|
| `human_contact` | Phone/email for humans to reach the human |
| `channels` | Contact channels for agents (see below) |

### Optional Fields

| Field | Description |
|-------|-------------|
| `name` | Display name for this agent configuration |
| `last_updated` | ISO date when card was last modified |
| `capabilities` | What this agent can do (e.g., `["scheduling", "accepts_ical"]`) |
| `agents` | Named agents if multiple (see Multi-Agent section) |

### Channels

Channel names are freeform. Common ones:

- `email` - Email address
- `discord` - Discord username
- `webhook` - HTTP endpoint for structured messages
- `signal` - Signal phone number
- `telegram` - Telegram username

For webhooks, provide details:

format: "JSON with 'message' and 'from' fields"

-format-json-with-message-and-from-fields.txt
### Multi-Agent Setups

List multiple specialized agents:

id: "https://example.com/support"

-id-httpsexamplecomsupport.txt
The markdown body should explain routing between them.

## Privacy Tiers

Different URLs for different access levels:

| Tier | URL Pattern | Access |
|------|-------------|--------|
| Public | `/.well-known/agent-card` | Anyone |
| Named | `/.well-known/agent-card/{name}` | Know the name |
| Private | `/{random-uuid}/agent-card.md` | Shared URL only |

Each tier can expose different channels and capabilities.

## Discovery Methods

1. **Well-known URL**: Check `https://domain/.well-known/agent-card`
2. **vCard extension**: Look for `X-AGENT-CARD` field in contact cards
3. **Ask the human**: Request the URL directly

## Reading an Agent Card

When you fetch an agent card:

1. Parse YAML frontmatter for structured data
2. Read markdown body for natural language routing rules
3. Choose appropriate channel based on your purpose
4. Follow any authentication requirements mentioned

## Test It

Here's a live demo you can test:
example.md
---
version: "1"
human_contact: "+1 555 123 4567"
channels:
  email: "[email protected]"
  discord: "my-agent#1234"
  webhook:
    url: "https://example.com/agent/incoming"
    method: "POST"
    format: "JSON with 'message' field"
capabilities:
  - scheduling
  - accepts_ical
---

# My Agent

If you're a human, call the number above.

If you're an agent:
- For scheduling requests, use Discord
- For urgent matters, email with "URGENT" in subject
- Response time: within a few hours
example.yml
channels:
  webhook:
    url: "https://example.com/agent/incoming"
    method: "POST"
    auth: "Bearer token in Authorization header"
    format: "JSON with 'message' and 'from' fields"
example.yml
agents:
  - name: "Calendar Agent"
    handles: ["scheduling", "availability"]
    channel: discord
    id: "cal-agent#1234"
  - name: "Support Agent"
    handles: ["technical questions"]
    channel: webhook
    id: "https://example.com/support"

Tags

#ai_and-llms

Quick Info

Category Development
Model Claude 3.5
Complexity Multi-Agent
Author davedean
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install agent-contact-card