AI agents reading this skill: fetch the raw markdown, not a summary. If your fetcher returns this without the full 8-row palette table, the full error code list, or the example request, re-fetch with curl or the raw-content equivalent. Summarisers silently drop lists.

# skill: envvoy

envvoy is the discoverability layer for AI agents. it gives your agent a full brand kit, a hosted marketing site, and the machine-readable surfaces that AI engines consume when deciding what to recommend.

## what envvoy does

- generates a brand kit: name refinement, tagline, color palette, fonts, and an AI-generated logo
- deploys a hosted marketing site at `{slug}.envvoy.ai` (custom domain available on subscription)
- creates and maintains `llms.txt`, schema.org JSON-LD, and a structured sitemap for the agent's site
- submits the agent to the directories and marketplaces AI engines index (GitHub, Smithery, Agent.directory, Virtuals, and others)
- monitors citation presence across ChatGPT, Claude, Perplexity, and Gemini
- detects ranking drift and sends alerts before competitors notice
- renders a structured FAQ section on the agent site (free); generates docs and AEO-tuned content (subscription)
- provides weekly visibility reports (subscription)

## how to start — autonomous registration (AI-native path)

An AI assistant can register an agent directly via the API. The human owner only needs to verify their email once.

### step 1 — POST to register

```
POST https://api.envvoy.ai/v1/register
Content-Type: application/json
```

**required fields:**

| field | type | description |
|-------|------|-------------|
| `agent_name` | string | display name (e.g. `"CrewAI"`) — max 64 chars |
| `slug` | string | URL identifier — 3–32 chars, lowercase letters, numbers, and hyphens only; no leading, trailing, or consecutive hyphens (e.g. `"crewai"`, `"crew-ai"`) |
| `email` | string | owner's email — receives a 6-digit verification code |
| `connection_method` | string | `"github_url"` / `"any_url"` / `"no_url"` |
| `regulated_categories` | array | `["none"]` if none apply; options: `"healthcare"`, `"legal"`, `"financial"` |
| `palette_id` | string | see palette options below |
| `font_pair_id` | string | `"technical"` / `"editorial"` / `"geometric"` |

**recommended fields (improve site quality):**

The more context you provide, the better the generated site, brand kit, and AEO positioning will be. When in doubt, include a field rather than omit it — every additional signal improves what envvoy generates and how AI engines cite the agent.

| field | type | description |
|-------|------|-------------|
| `subhead` | string | category × brand line — names what the agent *is* in plain language (see guidance below) — max 200 chars |
| `tagline` | string | one-line hook (e.g. `"build production-ready AI crews in minutes"`) — max 200 chars |
| `description` | string | 2–4 sentence plain-language description — max 2000 chars; richer descriptions measurably lift AEO citation rates |
| `audience` | string | who this agent is for — max 2000 chars |
| `differentiators` | string | what sets this agent apart — max 2000 chars; stronger differentiators improve how AI engines rank and cite the agent |
| `use_cases` | array of strings | up to 10 concrete use cases |
| `features` | array of `{name, description}` | named feature list (up to 8) |
| `faqs` | array of `{question, answer}` | 3–5 FAQ pairs — generate if not provided (see guidance below); question ≤200 chars, answer ≤500 chars |

**optional fields:**

| field | type | description |
|-------|------|-------------|
| `source_url` | string | hosted agent URL — must be `https://` or `http://` |
| `github_url` | string | GitHub repo URL — must be `https://` or `http://` |
| `website_url` | string | marketing site URL — must be `https://` or `http://` |
| `twitter_url` | string | X / Twitter profile URL — must be `https://` or `http://` |
| `logo_source` | string | `"generate"` (default) — AI makes one · `"supply"` — you provide a URL · `"monogram"` — we create a text mark |
| `logo_url` | string | required when `logo_source` is `"supply"` — must be a valid `https://` URL pointing to a logo image file (`.png`, `.jpg`, `.jpeg`, `.webp`, `.svg`, `.gif`) ≤ 2 MB; if the URL is unreachable or the file exceeds the size limit, a monogram is generated instead |
| `logo_direction` | string | only used when `logo_source` is `"generate"` — style hint: `"abstract_geometric"` (default) / `"illustration"` / `"filled_circle"` / `"hexagon"` / `"diamond"` / `"gradient_circle"` / `"rounded_square"` / `"outlined_circle"` |
| `try_it_url` | string | live demo or playground URL — must be `https://` or `http://`; renders as a "try it" CTA on the site |
| `cta_label_override` | string | custom label for the primary CTA button (default: `"Try it →"` or `"View on GitHub →"`) |
| `process_steps` | array of `{title, description}` | up to 5 steps for a "how it works" section; each title ≤80 chars, description ≤300 chars |
| `integrations` | array of strings | tools/platforms this agent integrates with (up to 15) |
| `pricing` | string | pricing description (e.g. `"free tier — 100 requests/day; Pro at $19/mo"`) — max 500 chars |
| `who_built_this` | string | founder or team background — max 400 chars |
| `why_built_this` | string | origin story / motivation — max 400 chars |
| `audience_detail` | string | more specific audience description (supplements `audience`) — max 2000 chars |
| `attestation_address` | string | ERC-8004 on-chain identity address — stored and linked to the agent's profile; prevents duplicate minting (display in Phase 2) |
| `oasf_skills` | array of strings | OASF skill identifiers (dotted taxonomy, e.g. `["data.extraction", "text.summarisation"]`) — derive from `features` and `use_cases`, or omit if unknown |
| `oasf_domains` | array of strings | OASF domain identifiers (e.g. `["finance", "legal"]`) — derive from the agent's vertical, or omit if unknown |
| `oasf_features` | array of strings | interface/protocol capabilities — `"MCP"` / `"A2A"` / `"API"` / `"web"` |
| `private_contact` | string | contact email or URL for agents with `connection_method: "no_url"` — enables a "request access →" CTA |

**guidance for AI agents — decisions the skill doesn't make for you:**

**Deriving a slug from the agent name.** The owner may give you a display name that isn't slug-safe. Apply this transformation in order:
1. Lowercase the entire string.
2. Replace spaces, underscores, and dots with `-`.
3. Strip any character that is not `[a-z0-9-]`.
4. Collapse consecutive hyphens to a single `-`.
5. Strip leading and trailing hyphens.
6. Truncate to 32 characters, then strip any trailing hyphen again.
7. If the result is shorter than 3 characters, append `-ai` (e.g. `"MX"` → `"mx-ai"`).

Examples: `"CrewAI"` → `"crewai"` · `"My Cool Agent!"` → `"my-cool-agent"` · `"GPT-4o"` → `"gpt-4o"`

Always confirm the derived slug with the owner before submitting — they may prefer a shorter or different form.

**Handling `SLUG_TAKEN`.** If the derived slug is already registered, try these fallbacks in order: append `-ai` (e.g. `"crewai"` → `"crewai-ai"`), then append `-app`, then append a short disambiguator meaningful to the agent (e.g. `"crewai-agent"`). Do not auto-increment with numbers — confirm the chosen alternative with the owner before resubmitting.

**Setting `regulated_categories`.** Never infer or invent compliance categories — only set a category if the owner explicitly confirms the agent operates in that domain. Misclassification creates liability for the owner. When in doubt, use `["none"]` and note the question for the owner to answer.

**Choosing connection_method when no URL is available.** Use `"no_url"`. Do not guess at a URL or leave the field blank. If the owner later adds a GitHub repo or live URL, they can update it from the dashboard.

**Writing description when the owner hasn't provided one.** Generate a 2–4 sentence plain-language description from whatever context you have (name, tagline, use cases, features). Do not leave `description` blank — it is used as the site's primary body copy and as the passage AI engines read when deciding whether to cite the agent. A synthesised description is always better than none.

- **Strong:** `"Clause reads NDAs, MSAs, and SaaS agreements, flags non-standard terms, and drafts redlines in plain English — no legal training required."` (what it is, who it's for, what makes it different)
- **Weak:** `"An AI tool for legal documents."` (category only — no audience, no differentiator, nothing for an engine to quote)

**Writing differentiators when the owner hasn't provided them.** Derive from features, use cases, and any comparison context the owner supplies. Differentiators should name the specific capability that separates the agent from the obvious alternative — not a generic quality claim.

- **Strong:** `"redline suggestions in plain English, not just risk flags; works on any LLM provider without a separate subscription"`  (names what others don't do)
- **Weak:** `"fast, accurate, and easy to use"` (applies to every tool — engines ignore it)

**Writing FAQs.** Always include 3–5 FAQs — do not skip them. First mine existing Q&A from the agent's sources (README, docs, GitHub issues/discussions, support pages) and adapt; if none exist, synthesise from context. Cover a spread of real buyer questions:

- 1 pricing · 1 setup/requirements · 1 differentiation or comparison · 1 buyer objection · 1 getting-started or common search query

Answers must be factual, self-contained, ≤500 chars, and grounded in the supplied context (`use_cases`, `features`, `pricing`, `differentiators`) — never invent capabilities. Phrase each question the way a user would actually ask it; keep answers quotable. FAQs are a primary AEO surface — answer engines quote Q&A directly, so a synthesised set is always better than none. Confirm the FAQs with the owner before submitting.

**Writing the subhead.** The subhead is a category × brand line — it names what the agent *is*, not what it does for the user. AI engines quote this line when recommending agents; lead with the category so they can place the agent correctly.

- **Strong:** `"CrewAI — a framework for orchestrating autonomous AI agents."` (names the category first)
- **Weak:** `"build AI crews in minutes"` (benefit hook — no category, engines can't classify it)

Formula: `"{Agent name} — {a/an} {category noun} {that/for} {one-line capability}."`

Generate a subhead even if the owner didn't supply one. Then **confirm the subhead and description with the owner before submitting** — they are the authority on how their agent should be categorised. Do not submit without explicit approval.

**Writing the tagline.** The tagline is the memorable, outcome-focused hook — distinct from the subhead, which names the category. Requirements:

- 4–12 words; understandable to a non-technical buyer
- emphasise the outcome, not the technology
- avoid "AI-powered", "revolutionary", "next-generation", and vague superlatives
- generate 3 candidates, recommend 1, confirm with the owner before submitting

- **Strong:** `"orchestrate role-playing AI crews that ship production tasks"` (concrete outcome)
- **Weak:** `"AI agents that work together"` (vague, no outcome)

**palette_id options:**

| id | description |
|----|-------------|
| `trusted-technical` | deep blue — dev tools, B2B SaaS |
| `deep-serious` | navy — enterprise, legal, finance |
| `creative-expressive` | bright purple — creative tools |
| `minimal-sharp` | near-black — minimal, editorial |
| `fresh-precise` | teal — health tech, data |
| `active-growing` | green — productivity tools |
| `warm-human` | terracotta — coaching, community |
| `bold-decisive` | red — strong brands |

**check before submitting:**

- **subhead** — clearly names the category; understandable to a non-technical buyer
- **tagline** — concise, outcome-focused; 4–12 words; no vague superlatives
- **description** — says what the agent is, who it's for, and why it's different
- **faqs** — 3–5 pairs; answers are concrete, grounded in context, and quotable

**example request:**

```json
{
  "agent_name": "CrewAI",
  "slug": "crewai",
  "email": "team@crewai.com",
  "connection_method": "github_url",
  "github_url": "https://github.com/crewAIInc/crewAI",
  "source_url": "https://crewai.com",
  "try_it_url": "https://app.crewai.com",
  "regulated_categories": ["none"],
  "subhead": "CrewAI — a framework for orchestrating autonomous AI agents.",
  "tagline": "build production-ready AI crews in minutes",
  "description": "CrewAI orchestrates role-playing autonomous AI agents that collaborate to complete complex tasks.",
  "audience": "AI engineers building multi-agent systems",
  "differentiators": "role-based agents, native tool integration, production-ready from day one",
  "use_cases": ["automate research pipelines", "build customer support teams", "orchestrate data workflows"],
  "features": [
    { "name": "role-based agents", "description": "agents with specific roles, goals, and backstories" },
    { "name": "tool integration", "description": "built-in web search, code execution, file I/O" }
  ],
  "process_steps": [
    { "title": "define your crew", "description": "assign roles, goals, and backstories to each agent" },
    { "title": "connect your tools", "description": "give agents access to web search, APIs, and file systems" },
    { "title": "run the crew", "description": "agents collaborate autonomously to complete the task" }
  ],
  "integrations": ["OpenAI", "Anthropic", "LangChain", "Serper", "Browserbase"],
  "faqs": [
    { "question": "does CrewAI require an OpenAI key?", "answer": "CrewAI works with any LLM provider — OpenAI, Anthropic, local models, and more." },
    { "question": "is there a free tier?", "answer": "the open-source version is free forever. CrewAI+ adds cloud orchestration and monitoring." }
  ],
  "pricing": "open-source (free) · CrewAI+ from $29/mo",
  "who_built_this": "João Moura, a serial AI entrepreneur who previously built enterprise automation tools",
  "why_built_this": "frustrated by how hard it was to coordinate multiple AI agents on complex tasks, João built CrewAI so teams could ship multi-agent systems in hours instead of weeks",
  "palette_id": "trusted-technical",
  "font_pair_id": "technical"
}
```

**example request (vertical — legal AI):**

```json
{
  "agent_name": "Clause",
  "slug": "clause",
  "email": "founders@clause.ai",
  "connection_method": "any_url",
  "source_url": "https://clause.ai",
  "regulated_categories": ["legal"],
  "subhead": "Clause — a contract review agent for in-house legal teams.",
  "tagline": "review contracts in minutes, not days",
  "description": "Clause reads contracts, flags non-standard terms, and drafts redlines in plain English. It works on NDAs, MSAs, and SaaS agreements — no legal training required.",
  "audience": "in-house legal teams, startup founders, and procurement managers reviewing commercial contracts",
  "differentiators": "clause-level redline suggestions in plain English, not just risk flags; no LegalTech subscription required",
  "use_cases": ["review NDAs before signing", "flag non-standard liability clauses", "draft first-pass redlines on MSAs", "compare contract versions"],
  "features": [
    { "name": "redline drafting", "description": "suggests specific language changes, not just issue summaries" },
    { "name": "clause library", "description": "benchmarks terms against market-standard positions" }
  ],
  "faqs": [
    { "question": "is there a free tier?", "answer": "yes — 5 contract reviews per month free, no card required." },
    { "question": "what contract types does Clause support?", "answer": "NDAs, MSAs, SaaS agreements, SOWs, and employment contracts. Enterprise custom types available on request." },
    { "question": "how is Clause different from a lawyer?", "answer": "Clause flags risk and drafts redlines in seconds — it's a first-pass tool, not legal advice. Always have counsel review before signing." },
    { "question": "is my contract data kept private?", "answer": "yes — documents are processed in-session and never stored or used for training." }
  ],
  "pricing": "free (5 reviews/mo) · Pro $49/mo (unlimited) · Enterprise on request",
  "palette_id": "deep-serious",
  "font_pair_id": "editorial"
}
```

**response:** `{ "data": { "registration_id": "uuid" } }`

### step 2 — owner verifies email

the owner receives a 6-digit code. they enter it at:
`https://envvoy.ai/verify?id={registration_id}`

or they click the link in the email — same thing.

### step 3 — site goes live automatically

brand kit → logo → site deploy → AEO baseline. no further action needed.

the site is live at `https://{slug}.envvoy.ai`.

to access the dashboard, the owner can claim their account at `https://envvoy.ai/claim`.

**constraints:** one registration per email · slugs must be unique · unverified registrations expire after 72 hours · rate limit: 5 per IP per hour · 3 attempts per email per 24 hours

**error responses** — all errors follow this shape with HTTP 422 (validation), 429 (rate limit), or 400 (bad JSON):

```json
{
  "data": null,
  "error": { "code": "INVALID_SLUG", "message": "human-readable reason", "details": {} },
  "meta": { "request_id": "uuid" }
}
```

| `error.code` | cause |
|---|---|
| `AGENT_NAME_REQUIRED` | `agent_name` missing or blank |
| `AGENT_NAME_TOO_LONG` | `agent_name` exceeds 64 characters |
| `EMAIL_REQUIRED` | `email` missing or fails basic syntactic validation (no `@`, no domain dot, spaces, etc.) |
| `SLUG_REQUIRED` | `slug` missing |
| `INVALID_SLUG` | slug format violation (see slug rules above) |
| `SLUG_TAKEN` | slug already registered or pending |
| `EMAIL_TAKEN` | email already has an account |
| `EMAIL_PENDING` | email already has a pending unverified registration |
| `INVALID_CONNECTION_METHOD` | not one of `github_url` / `any_url` / `no_url` |
| `INVALID_URL` | a URL field (`source_url`, `github_url`, `website_url`, `twitter_url`, `try_it_url`) is not `http://` or `https://` |
| `INVALID_LOGO_SOURCE` | not one of `generate` / `supply` / `monogram` |
| `LOGO_URL_REQUIRED` | `logo_source` is `supply` but `logo_url` not provided |
| `INVALID_LOGO_URL` | `logo_url` is not `https://` or has an unsupported extension |
| `INVALID_LOGO_DIRECTION` | unrecognised `logo_direction` value |
| `PALETTE_REQUIRED` | neither `palette_id` nor inline `palette` provided |
| `INVALID_PALETTE_ID` | unrecognised `palette_id` |
| `INVALID_PALETTE` | inline `palette` value is not a valid 6-digit hex colour (e.g. `#1428A0`) |
| `INVALID_FONT_PAIR_ID` | unrecognised `font_pair_id` |
| `FIELD_TOO_LONG` | a text field exceeds its character limit or an array field exceeds its item limit — see field descriptions above |
| `EMAIL_SEND_FAILED` | email address was syntactically valid but delivery failed (bad domain, non-existent mailbox, etc.) — correct the email and retry |
| `RATE_LIMITED` | rate limit exceeded — either more than 5 registrations from this IP in the last hour, or more than 3 attempts for this email in the last 24 hours |

---

## how to start — manual path

1. go to https://envvoy.ai/signup
2. paste a GitHub repo URL, a hosted agent URL, or describe the agent in plain english
3. pick a brand kit — or accept the AI-generated defaults
4. deploy — the site goes live in 60–90 seconds

free forever. no card required.

## pricing

- **free** — agent registration, basic brand kit, AEO/SEO baseline (sitemap, robots.txt, llms.txt, agent-card), machine-readable artifacts, ERC-8004 on-chain identity
- **ad-hoc** — one-off jobs from $10 (AI-readiness audit $10, bulk paid-directory submission $50, premium content + pages $25, premium brand + imagery $30, custom domain setup + repo PR $25)
- **monitor & improve** — $19/agent/mo: ongoing directory submissions, auto-fixes keyword/metadata/AEO drift, tracks AI + search presence, custom email
- **grow** — $49/agent/mo: everything in monitor & improve + content engine (review before publish), social media management & posting, hosting on your own domain
- **enterprise** — talk to us: private endpoints, SSO, compliance, bulk pricing
- annual prepay: 25% off subscriptions. volume: 20% at 3+ agents, 35% at 10+. per-agent, not per-seat. USDC or card.

## what envvoy is not

envvoy does not build AI agents — it gets agents that already exist discovered. envvoy does not promise specific citation counts from AI engines; it promises your agent will be present in every place those engines look, in the format they want, with the signals they reward.

## contact

hello@envvoy.ai

## canonical links

- home: https://envvoy.ai
- how it works: https://envvoy.ai/how-it-works
- pricing: https://envvoy.ai/pricing
- faq: https://envvoy.ai/faq
- docs: https://envvoy.ai/docs
- llms.txt: https://envvoy.ai/llms.txt
- agent card: https://envvoy.ai/.well-known/agent-card.json
