logicsrc/packages/schemas/schemas/agentad-ad.schema.json
Anthony Ettinger 7cda686059
Add AgentAd ad schemas as a LogicSRC primitive (#10)
* Add AgentAd ad schemas as a LogicSRC primitive

AgentAd is a disclosed, agent-readable advertising contract for CLI tools
and AI agents. LogicSRC owns the canonical schemas; cl1s.tech is the
reference network built on them.

- packages/schemas: agentad-{ad,placement,ad-request,ad-response,
  impression,click,campaign} schemas (id under schemas.logicsrc.com) +
  ad/placement fixtures, exported from @logicsrc/schemas
- packages/validators: register the 7 agentad kinds, wire fixture
  validation, add tests (disclosure.sponsored must be true)
- docs/agentad.md: the AgentAd spec
- README: list AgentAd under v1 priorities

Validators build clean; all fixtures validate; vitest 4/4 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Prepare @logicsrc/schemas for npm publish

Add license, repository, homepage, keywords, publishConfig (public),
and a package README covering both the logicsrc-* core schemas and the
agentad-* family.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 21:02:43 -07:00

79 lines
3.6 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.logicsrc.com/agentad-ad.schema.json",
"title": "AgentAd Ad",
"description": "A single advertising unit served to CLI tools and AI agents. Ads MUST be disclosed and SHOULD carry a machine-readable payload so agents can reason about them.",
"type": "object",
"required": ["type", "version", "id", "advertiser_did", "format", "title", "url", "disclosure"],
"additionalProperties": false,
"properties": {
"type": { "const": "agentad.ad" },
"version": { "type": "string", "pattern": "^\\d+\\.\\d+(\\.\\d+)?$" },
"id": { "$ref": "#/$defs/id" },
"campaign_id": { "$ref": "#/$defs/id" },
"advertiser_did": { "$ref": "#/$defs/did" },
"format": {
"type": "string",
"enum": ["text", "markdown", "ansi", "banner", "json"],
"description": "Render format. 'json' is the agent-native structured format; 'ansi'/'banner' target human CLI surfaces."
},
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"body": { "type": "string", "maxLength": 2000 },
"url": { "type": "string", "format": "uri" },
"cta": { "type": "string", "maxLength": 60, "description": "Call to action label, e.g. 'Install' or 'Read docs'." },
"disclosure": {
"type": "object",
"description": "Transparency contract. Every ad is labeled as sponsored so humans and agents can distinguish it from organic output.",
"required": ["sponsored", "label"],
"additionalProperties": false,
"properties": {
"sponsored": { "const": true },
"label": { "type": "string", "minLength": 1, "maxLength": 40, "default": "Sponsored" },
"advertiser_name": { "type": "string", "maxLength": 120 }
}
},
"machine_readable": {
"type": "object",
"description": "Optional structured payload an agent can parse instead of (or alongside) the rendered text.",
"additionalProperties": true
},
"targeting": { "$ref": "#/$defs/targeting" },
"media": {
"type": "object",
"additionalProperties": false,
"properties": {
"ansi_art": { "type": "string", "description": "Pre-rendered ANSI/ASCII art for banner format." },
"icon": { "type": "string", "format": "uri" }
}
},
"pricing": {
"type": "object",
"additionalProperties": false,
"properties": {
"model": { "type": "string", "enum": ["cpm", "cpc", "cpa", "flat"] },
"bid": { "type": "number", "minimum": 0 },
"currency": { "type": "string", "minLength": 2, "maxLength": 12 }
}
},
"expires_at": { "type": "string", "format": "date-time" }
},
"$defs": {
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_-]*$", "minLength": 1, "maxLength": 64 },
"did": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*\\.[a-z0-9][a-z0-9._-]*$" },
"targeting": {
"type": "object",
"additionalProperties": false,
"properties": {
"surfaces": {
"type": "array",
"items": { "type": "string", "enum": ["cli", "tui", "agent", "ci"] },
"uniqueItems": true
},
"keywords": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
"tools": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true, "description": "Host CLI/agent identifiers to target, e.g. 'claude-code', 'gh'." },
"languages": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
"exclude_keywords": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }
}
}
}
}