Public content repo for agentfirst.directory.
This repo contains the approved directory content only:
- categories in
categories/ - tools in
tools/
The website code lives separately in bradvin/agentfirst.directory-site.
Agent First is intentionally opinionated, but agent-first infrastructure is broader than agent-only software. The directory includes products and protocols that meet at least one of these classifications:
agent-native— agents are a core actor, runtime, entity, or participant in the product. Examples include agent orchestration, agent identity and communications, agent-operated interfaces, and human-agent collaboration systems.agent-enabling— the product materially empowers an agent-first workflow through substantive capabilities such as execution, memory, data access, communication, testing, or safe interaction. Agents do not need to be the product's exclusive or primary users.agent-internet-protocol— an open protocol or interaction standard lets agents participate in internet communication, commerce, identity, coordination, or other machine-to-machine interaction.
Classification explains how each listing qualifies; it is not a quality tier.
A listing must pass all of these checks:
- Identify one classification. Which of the three definitions does the product satisfy?
- Name the concrete agent outcome. What can an agent or agent builder materially do because this product or protocol exists?
- Verify the claim from first-party evidence. Product documentation, source repositories, protocol specifications, or first-party pages must describe the relevant capability.
- Check that the capability is substantive. The qualifying value must come from the product or protocol itself, not a thin wrapper or an integration badge.
- Keep the directory defensible. The listing and its classification must remain accurate without stretching generic technical compatibility into an agent-first claim.
A listing should be rejected when its only support is:
- generic technical compatibility with software an agent could call;
- a thin MCP, API, or command wrapper over an otherwise unrelated product;
- vague or unsupported marketing language about agents;
- a general-purpose primitive with no material agent-first workflow or agent-internet role;
- third-party claims that cannot be confirmed from an authoritative first-party source.
General-purpose products can qualify as agent-enabling when their documented capabilities materially empower agent-first workflows. Conversely, adding an agent integration does not automatically qualify a product.
When evidence is ambiguous, do not invent a rationale: request stronger first-party evidence or reject the listing.
Each category is one JSON file in categories/<slug>.json.
Example:
{
"slug": "orchestrators",
"label": "Orchestrators",
"sortOrder": 75,
"seoTitle": "Orchestration platforms for teams of AI agents",
"descriptionMd": "Control planes and runtimes that coordinate agents, tasks, state, governance, and human review.",
"definitionMd": "This category covers systems whose main purpose is coordinating agent work across multiple runs, roles, workers, or workflows.",
"scopeMd": "Includes control planes and runtimes that coordinate multiple agents or runs through task assignment, shared state, scheduling, observability, budgets, approvals, or governance.",
"inclusionMd": "- Coordinates multiple agents or runs.\n- Provides shared state, observability, budgets, approvals, or governance.",
"exclusionMd": "- A single-agent framework with no coordination layer.\n- A generic scheduler that merely launches an agent.",
"selectionGuideMd": "- Which runtimes can participate?\n- How are state, failures, budgets, and approvals handled?",
"useCases": [
"Coordinate long-running agent work",
"Apply budgets and approval controls"
],
"isIndexable": true
}Rules:
slugmust be lowercase kebab-caselabelshould be short enough to fit in the site navigationsortOrderis optional, but helps place the category in the listseoTitle,descriptionMd,definitionMd,scopeMd,inclusionMd,exclusionMd, andselectionGuideMdare required authored editorial fieldsuseCasesis a required non-empty array of concrete category-specific usessourcesis an optional claim-level evidence array. When present, each item requirestitle,url(HTTP or HTTPS first-party),claim, andaccessedAt;sourceTypeis optional but must use the controlled list below when presentreviewedBy,reviewedAt, andpublishedAtare optional provenance fields and must only be added when knownisIndexableis an optional boolean and defaults totrue- do not add
contentModifiedAt; the publishing pipeline manages it from substantive changes
Each tool is one Markdown file in tools/<slug>.md.
Example:
---
slug: "coolapi"
name: "CoolAPI"
description: "An agent-first API for doing cool things"
seoTitle: "CoolAPI: Controlled API Access for AI Agent Workflows"
seoDescription: "Explore how CoolAPI gives AI agents controlled access to documented API operations. Review its supported interfaces, deployment model, pricing, and evidence."
agentSummary: "CoolAPI provides API and MCP interfaces for agents that need to request approved operations. Its documented permission controls define which actions an agent can attempt, while the hosted deployment handles the execution path. Review the linked documentation and pricing page to confirm the current controls, supported operations, and limits before relying on it."
category: "api-access-orchestration-layers"
tags:
- "mcp"
- "security"
- "api"
websiteUrl: "https://coolapi.dev"
githubUrl: "https://github.com/cooldev/coolapi"
logoUrl: "https://www.google.com/s2/favicons?sz=64&domain_url=https://coolapi.dev"
ogImageUrl: "https://coolapi.dev/og-image.png"
logoWidth: 64
logoHeight: 64
ogImageWidth: 1200
ogImageHeight: 630
pricing: "freemium"
classification: "agent-enabling"
entityType: "web-api"
developerName: "CoolAPI"
docsUrl: "https://coolapi.dev/docs"
pricingUrl: "https://coolapi.dev/pricing"
licenseUrl: "https://coolapi.dev/license"
interfaces:
- "REST API"
- "MCP"
deploymentModes:
- "hosted"
evidenceSources:
- title: "CoolAPI agent documentation"
url: "https://coolapi.dev/docs/agents"
claim: "The documentation describes the agent-facing API and its permission model."
accessedAt: "2026-09-03"
sourceType: "official-documentation"
verificationLevel: "documentation-reviewed"
classificationRationaleMd: "Agents are a first-class participant in the documented API workflow."
inclusionRationaleMd: "The documented capability materially changes what an agent can do."
bestForMd: "Agent builders who need the documented API workflow."
notBestForMd: "Teams seeking an unrelated general-purpose API."
limitationsMd: "Confirm current limits on the linked pricing page."
unknownsMd: "No independent performance benchmark has been reviewed."
reviewedBy: "example-reviewer"
reviewedAt: "2026-09-03"
publishedAt: "2026-09-03"
isIndexable: true
---
Short summary of what the tool does.Required tool fields:
slugnamedescriptioncategorytagswebsiteUrlpricingclassificationevidenceSources— a non-empty array of first-party evidence using the required format below
Optional tool fields:
seoTitle,seoDescription, andagentSummaryare optional, non-empty plain-text strings. Contributors may suggest them; the editorial reviewer owns the final wording. Existing listings need no changes.- Surrounding whitespace is trimmed before validation and publishing; whitespace-only values are invalid.
seoTitleoverrides only the tool page title;seoDescriptionoverrides only its meta and social description. Each falls back independently to the current generated text when omitted.agentSummaryadds a paragraph before the existing visible description and does not replace it.- Draft a specific, factual title around the tool and its agent use (usually about 50–60 characters). Write a description that helps a reader decide whether to open the profile (usually about 140–160 characters). Summarize the practical agent-facing outcome in one short paragraph (roughly 40–70 words). These are editorial drafting targets, not hard validation limits or automatic truncation rules. Avoid unsupported claims, keyword repetition, promotional language, and markdown or HTML.
githubUrllogoUrlogImageUrllogoWidth,logoHeight,ogImageWidth, andogImageHeightas positive integersentityTypedeveloperNamedocsUrl,pricingUrl, andlicenseUrlinterfacesanddeploymentModesas arrays of non-empty stringsverificationLevelclassificationRationaleMdandinclusionRationaleMdbestForMd,notBestForMd,limitationsMd, andunknownsMdreviewedBy,reviewedAt, andpublishedAtisIndexable, which defaults totruesortOrder
The tool review guide gives the reviewer the acceptance checklist and rollout behavior for SEO suggestions.
Do not add contentModifiedAt to a tool file. D1 sets it when the record is first published and advances it only when authored or visible data changes. synced_at is a separate operational timestamp that advances on every sync.
Valid pricing values:
open-source— the core listed product is available under an open-source licence; a hosted offering may still chargesource-available— source can be inspected, but its licence includes restrictions that are not open sourcefreemium— a currently available, ongoing free tier exists alongside a currently available paid tier or upgradefree— the product is currently usable at no cost and no currently available paid tier is establishedpaid— ongoing use requires payment after any limited trial or one-time introductory credit, whether by subscription or usageunknown— current first-party sources do not establish the product's own pricing; user-funded transactions or third-party fees alone are not product pricing
Valid classification values:
agent-nativeagent-enablingagent-internet-protocol
Valid entityType values:
software-applicationweb-applicationsoftware-source-codeweb-apiservicetechnical-standardprotocol
Valid verificationLevel values:
documentation-reviewedvendor-confirmedhands-on-tested
Use hands-on-tested only when the listing records what was tested, when it was tested, and the relevant conditions. Do not infer this level from documentation or a vendor demonstration.
Every tool must include a non-empty evidenceSources array. This is required for every new tool submission; a missing or empty array fails content validation. Category sources remain optional and are separate from this tool-submission requirement.
Each item in a tool's evidenceSources array must include all of these required fields:
-
title— the source's descriptive title -
url— an HTTPS first-party URL -
claim— the specific directory claim this source supports -
accessedAt— the ISO 8601 date (YYYY-MM-DD) when the source was checked -
sourceType— one of these controlled values: -
official-documentation -
official-repository -
official-license -
official-pricing -
official-product-page -
official-product-announcement -
official-specification -
official-legal -
official-release-notes
One broad homepage link should not be used to support unrelated claims. The controlled official-* sourceType records the submitter's declaration that a source is first-party; reviewers must still confirm that the URL is owned or maintained by the product, project, or protocol authority.
reviewedBy and reviewedAt describe a real editorial review, not submission or sync time. Add both only after that review occurs. publishedAt should only be supplied when the publication date is known. Quote dates in YAML frontmatter so they remain strings.
- Fork this repo or create a branch.
- Pick the closest existing category in
categories/. - Add a new file in
tools/<slug>.md. - Fill in every required frontmatter field, including a non-empty
evidenceSourcesarray. - Check that every evidence item has a title, HTTPS first-party URL, specific claim, ISO 8601 access date, and controlled
sourceType. - Add a short body description.
- Open a pull request to
main.
What you need to provide:
- a valid tool file in
tools/<slug>.md - the required frontmatter fields
- a non-empty
evidenceSourcesarray with complete first-party evidence for the listing's claims - a short factual description of the tool
- useful, specific tags
githubUrlwhen the tool is open sourcelogoUrlandogImageUrlwhen you already have the canonical values, but these are optional
What you do not need to worry about:
- author attribution
- generated logo metadata
- generated OG image metadata
Add a new category only when the current list clearly does not fit.
- Create
categories/<slug>.json. - Keep the label concise.
- Add or update at least one tool in the same PR to use that category.
- Open a pull request to
main.
- Keep descriptions factual and compact.
- Use the canonical website URL.
- Add
githubUrlwhen the tool is open source. - Add
ogImageUrlfrom the product's social preview image when available. - Keep tags useful and specific.
- Do not create duplicate listings for the same product.
- Do not rely on vague claims like "works with agents" or "great for agent workflows" as the main justification.
Prefer including an agent-enablement section in the markdown body that makes the tool's value to agents explicit. Good headings for this section include:
## So agents can...## Allows agents to...## Allows you to create agents that...
This section should usually be a short bullet list of concrete agent outcomes. A simple example is:
## So agents can...
- do outcome one
- do outcome two
- do outcome threeAfter a tool PR is approved, the repo handles a few things automatically:
- author attribution is derived from the PR author
- missing
logoUrldefaults to a Google favicon URL based onwebsiteUrl - missing
ogImageUrlis discovered from the tool website's social metadata when available - D1 receives authored editorial, evidence, entity, and provenance fields
content_modified_atchanges only when authored or visible record data changes;synced_atrecords every sync- changed public URLs are purged from the Cloudflare cache after D1 sync, then the canonical HTML subset is submitted to IndexNow
Populate missing social preview images from each tool's website metadata:
npm run enrich:og-imagesWrite discovered ogImageUrl values back into tool files:
npm run enrich:og-images -- --writeRefresh even tools that already have ogImageUrl set:
npm run enrich:og-images -- --write --refreshPopulate both missing logoUrl and ogImageUrl values:
npm run enrich:tool-assets -- --writeSubmit a previously computed JSON URL list to IndexNow:
npm run submit:indexnow -- /path/to/changed-urls.jsonThe production workflow uses the public verification key at https://agentfirst.directory/51e9d2d62bf357523274a20c53e380c6.txt. Rotate the constant and the hosted key file together.
- Identity & Comms
- Compute & Sandboxes
- Browser Automation
- UI & Frontends
- Crawling & Extraction
- Agent Testing & QA
- Storage & Media
- Memory & State
- Payments
- Frameworks & Standards
- SaaS Integrations
- Orchestrators
- API Orchestration
- Voice & Multimodal
- Search & Discovery
- Marketing & SEO