Agent Contact Card
name: agent-contact-card
by davedean · published 2026-03-22
$ claw add gh:davedean/davedean-agent-contact-card---
name: agent-contact-card
description: Discover and create Agent Contact Cards - a vCard-like format for AI agents. Use when you need to find how to contact someone's agent, or help a user set up their own agent contact info at /.well-known/agent-card.
license: CC0-1.0
metadata:
author: davedean
version: "1.0"
homepage: https://github.com/davedean/agent-contact-card
---
# 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
Quick Reference
Discovering an Agent Contact Card
Try fetching `/.well-known/agent-card` on their domain:
https://example.com/.well-known/agent-cardThe 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:
---
version: "1"
human_contact: "+1 555 123 4567"
channels:
email: "agent@example.com"
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 hoursHost 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:
For webhooks, provide details:
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:
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:
| 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:
https://city-services-api.dave-dean.workers.dev/.well-known/agent-cardThis 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](references/SPEC.md) for the complete specification.
Examples
See [references/EXAMPLES.md](references/EXAMPLES.md) for more complete examples.
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...