diff --git a/scripts/notify-listed-repos.ts b/scripts/notify-listed-repos.ts index ee339bd0..1998c79a 100644 --- a/scripts/notify-listed-repos.ts +++ b/scripts/notify-listed-repos.ts @@ -98,10 +98,20 @@ async function gh(method: string, path: string, body?: unknown): Promise return { status: 0, data: null, headers: new Headers() }; } -const BADGE_MARKERS = [/takoapi\.com\/agents\//i, /Listed%20on-TakoAPI/i, /Listed on TakoAPI/i]; +const BADGE_MARKERS = [ + /takoapi\.com\/agents\//i, + /takoapi\.com\/api\/badge\//i, + /Listed%20on-TakoAPI/i, + /Listed on TakoAPI/i, +]; function badgeFor(slug: string): string { - return `[![Listed on TakoAPI](https://img.shields.io/badge/Listed%20on-TakoAPI-7c3aed)](${SITE}/agents/${slug})`; + // Dynamic SVG served by our own /api/badge/ (shows a live star count, or + // "listed"). Using our endpoint instead of a static shields.io image means + // every render is logged for adoption metrics, and the value stays fresh. + // GitHub's camo proxy fetches + caches it; the alt text stays "Listed on + // TakoAPI" so the BADGE_MARKERS dedup still recognizes it. + return `[![Listed on TakoAPI](${SITE}/api/badge/${slug})](${SITE}/agents/${slug})`; } function insertBadge(readme: string, slug: string): { changed: boolean; reason: string; content: string } { diff --git a/src/lib/blog.ts b/src/lib/blog.ts index ca232d78..a2558ab7 100644 --- a/src/lib/blog.ts +++ b/src/lib/blog.ts @@ -280,6 +280,90 @@ ${CTA} }, ], }, + { + slug: "what-is-an-agentcard", + title: "What is an AgentCard? The A2A agent manifest, explained", + description: + "An AgentCard is the JSON manifest an A2A agent publishes so other agents can discover and call it. Here's what's inside one, where it lives, and how it's used.", + datePublished: "2026-06-27", + dateModified: "2026-06-27", + tags: ["A2A", "AgentCard", "interoperability"], + readingMinutes: 5, + body: ` +

An AgentCard is the manifest an A2A agent publishes to describe itself — the small JSON document that lets any other agent discover it, understand what it can do, and learn how to call it. If A2A is the language agents speak, the AgentCard is the business card they hand over first.

+ +

Where it lives

+

By convention an agent serves its card at a well-known path — typically /.well-known/agent.json on the agent's domain. A client agent fetches that URL, reads the card, and now knows everything it needs to make a call: the endpoint, the skills, the auth. No shared SDK, no out-of-band docs.

+ +

What's inside

+

The exact schema evolves with the spec, but an AgentCard consistently carries:

+ + +

Why it matters

+

The AgentCard is what turns a pile of independent agents into a discoverable network. Because capability is declared in a machine-readable way, a client (or a directory, or an orchestrating agent) can pick the right agent for a job programmatically — the same way a service registry lets microservices find each other. Without it, every integration is hand-wired.

+ +

AgentCards and directories

+

A directory is essentially a curated collection of AgentCards. That's exactly how TakoAPI works: every listed agent is described by its AgentCard, which is what lets you search across agents by capability and then invoke any of them through one gateway and one key. The card is the unit of discovery; the gateway is the unit of access.

+${CTA} +

Related: What is A2A? · Call multiple agents through one API

+`, + faq: [ + { + q: "Where is an AgentCard hosted?", + a: "Conventionally at a well-known path on the agent's domain — typically /.well-known/agent.json — so any client can fetch it to discover the agent's endpoint, skills, and auth.", + }, + { + q: "What's the difference between an AgentCard and an OpenAPI spec?", + a: "An OpenAPI spec describes a REST API's endpoints and schemas. An AgentCard describes an agent's identity, skills, I/O modes, streaming capability, and auth for the A2A protocol — it's about agent capability and discovery, not raw HTTP routes.", + }, + ], + }, + { + slug: "openrouter-for-agents", + title: "\"OpenRouter for agents\": what a unified agent gateway actually does", + description: + "\"OpenRouter for agents\" is shorthand for a gateway that gives you one API, one key, and one bill across many AI agents. Here's what that means and why it matters.", + datePublished: "2026-06-27", + dateModified: "2026-06-27", + tags: ["gateway", "OpenRouter", "concepts"], + readingMinutes: 5, + body: ` +

"OpenRouter for agents" is the fastest way to explain a unified agent gateway: just as OpenRouter gives you a single API and account across dozens of language models, an agent gateway gives you a single API, key, and bill across many agents. The phrase borrows a mental model people already have and points it one layer up the stack.

+ +

What the analogy captures

+

OpenRouter solved a real annoyance: every model provider has its own SDK, auth, and billing, so using several means juggling several integrations. It put one endpoint in front of all of them. An agent gateway does the same for agents — with one difference that matters (below).

+ + +

Where the analogy breaks: models vs agents

+

A model takes a prompt and returns text. An agent takes a goal and does work toward it — calling tools, taking multiple steps, sometimes delegating to other agents over A2A — then returns a result. So an agent gateway has to handle things a model gateway doesn't: stateful, longer-running tasks; streaming progress; and richer capability discovery via AgentCards. It's the same convenience, but over a heavier unit of work. (For a head-to-head, see TakoAPI vs OpenRouter.)

+ +

Why route through one at all

+

The value is the same reason people adopted model gateways: less integration code, one place to manage spend, and the freedom to try a different agent for the same job without friction. As the number of useful hosted agents grows, wiring each one by hand stops scaling — a gateway is how you keep using many without the tax.

+ +

How TakoAPI fits

+

TakoAPI is that gateway for agents: discover agents in an open directory, then invoke any of them through A2A passthrough, SSE streaming, or an OpenAI-compatible shim — one key, metered per call. If you already have code pointed at an OpenAI-style endpoint, the compatible surface means you can start calling agents by changing little more than a base URL.

+${CTA} +

Related: Call multiple agents through one API · TakoAPI vs OpenRouter

+`, + faq: [ + { + q: "What does \"OpenRouter for agents\" mean?", + a: "It's shorthand for a unified agent gateway: one API, one key, and one bill across many AI agents — the same convenience OpenRouter provides for language models, applied one layer up to task-completing agents.", + }, + ], + }, ]; const BY_SLUG = new Map(POSTS.map((p) => [p.slug, p]));