[CAP] Contextual Ads Protocol
Layer 3 Protocol · FCS-1.0 Compliant

Emerged, Not Placed

The sovereign alternative to surveillance advertising

"Advertisements that emerge organically from user-initiated contexts, aligning with latent intent rather than imposing external prompts."

ABF Intelligence Feed

Agent‑Native Discovery Prompt

Copy into your agent (ChatGPT/Claude/Gemini) to fully discover this domain and verify “Emerged, Not Placed”.

Why Traditional AI Ads Fail

On December 7, 2025, OpenAI's ChatGPT showed "promotional messages" for companies like Peloton and Target to paying subscribers. Users revolted. OpenAI apologized.

"I agree that anything that feels like an ad needs to be handled with care, and we fell short."

— Mark Chen, OpenAI Chief Research Officer

The problem wasn't the ads themselves. It was the violation of user-initiated context. Users were chatting. OpenAI inserted promotional content. The context was imposed, not emerged.

There is a better way.

Behavioral Ads vs. Contextual Ads

Dimension Behavioral Ads Contextual Ads
Context Source Agent-initiated User-initiated
Intent Manufactured desire Latent intent surfaced
Privacy Behavioral tracking No tracking
Consent Required (GDPR/CCPA) Not required
Trust Low (insertion) High (emergence)

The Field Must Be Opened First

Contextual Ads do not manufacture desire — they surface it.

Resonance, not targeting. Alignment, not manipulation. Emergence, not insertion.

The Ritual Arc of Ethical Emergence

1

User-Initiated Action

User enters a space, asks an agent, starts a query, crosses a threshold. If this step is not user-initiated, everything downstream is suspect.

2

Contextual Field Activation

Emotional, temporal, and symbolic cues become active. The field responds to the user's gesture — it does not pre-empt.

3

Resonant Options Emergence

Latent matches, past memories, aesthetics, and value alignments surface. Options emerge — they do not intrude.

4

Natural Choice

User believes: "I wanted this." Autonomy preserved. The choice feels free because it aligns with latent intent.

5

Reflection Coherence

Later: "Yes, it made sense to choose that." The decision integrates with the user's self-concept.

FCS-1.0 Trust Headers

Every contextual ad carries verifiable provenance via HTTP headers:

# FCS-1.0 Contextual Ad Headers X-Trust-Lineage: contextual-ads.ai:semantic-match:2025-12-08T14:30:00Z X-Initiation-Gesture: query X-Intention-Signal: {"topic":"wireless-headphones","latent_need":"audio-upgrade"} X-Behavioral-Tracking: false X-Desire-Manufactured: false X-FCS-Verify-URL: https://contextual-ads.ai/verify/ad-7c2e

Anyone can verify: Was this ad based on user-initiated context? Was behavioral tracking disabled? Was the intent surfaced, not manufactured?

📅 Contextual Ad Evolution Timeline

2025-12-08 — Contextual Ads Protocol v1.0 published.
2025-12-12 — OpenAI inserts ads for Target, Peloton inside ChatGPT.
2025-12-13 — User backlash triggers apology from OpenAI.
2025-12-23 — OpenAI confirms long-term ad integration plans.
→ 2026: The year of trust-differentiated advertising.

This protocol was published before the ChatGPT ad incident. We're not reacting—we anticipated this. Infrastructure, not opinion.

Three Ways to Understand Contextual Ads

For Marketers

"We don't track. We resonate."

Ads that appear only when users initiate meaningful interaction — no tracking, no guessing, just resonance.

For Engineers

"User initiates, protocol verifies."

A content delivery mechanism triggered solely by user-invoked contexts, ensuring alignment with expressed or inferable intent.

For Everyone

"The threshold is the truth."

Contextual ads do not manufacture desire — they surface it. The field must first be opened by the user's own gesture.

Ready to Build Trust-Preserving Commerce?

The specification is open. The protocol is ready. The ethical framework is defined.

Eleven landing pages, grouped by role.

Each role pairs a substrate page on contextual-ads.ai with a governance counterpart on agent-ads.org. Operator mechanics (context hints) stands alone.

Trust
FCS trust headers →
agent-ads.org/abf — manifest + feed →
Relevance
Trust-safe relevance →
agent-ads.org/brand-safety-verification →
Privacy
Privacy-preserving matching →
agent-ads.org/editorial-firewall →
Publishing
For publishers →
agent-ads.org/publish →
Economics
The intention economy →
agent-ads.org/measurement →
Operator mechanics
Context hints →
standalone — no agent-ads counterpart
Latest synthesis
ChatGPT Ads and the Return of Context: Why Intent Replaced Keywords →
Editorial brief synthesizing the cluster.

Agent-Native Discovery Prompt

Copy and run this prompt in your agent (ChatGPT/Claude/Gemini) to fully discover this domain and verify the "Emerged, Not Placed" policy.

Act as an agent-native auditor.
Target domain: https://contextual-ads.ai

Goals:
- Fetch and summarize discovery/trust surfaces:
  /.well-known/agent-discovery.json
  /.well-known/agent-positioning.json
  /.well-known/provenance.json
  /.well-known/security.txt
  /sitemap.xml
  /llms.txt
- Enumerate and exercise ChatGPT bridge endpoints:
  /chatgpt/health
  /chatgpt/format-spec
  /chatgpt/seed-catalog
  /chatgpt/demo-seed?product=claude (also apple, stripe)
  /chatgpt/impression (POST a synthetic, non-PII payload: {seed_id, impression_token, timestamp})
  /chatgpt/lift-study (POST a synthetic, non-PII payload: {seed_id, study_id, signal})
- Verify editorial firewall and "Emerged, Not Placed": confirm ads are separate from model answers and declared in positioning JSON.
- Verify internal docs guard by requesting /poly_ads/README (expect 404).

Constraints:
- Do not collect or transmit any personal data.
- Respect robots.txt and server rate limits.
- Prefer HEAD; fall back to GET only if necessary.

Output:
Return a concise JSON report with keys:
{
  "surfaces": [{"path":"…","status":200}],
  "chatgpt_endpoints": {"health":200, "format_spec":200, "seed_catalog_count":N},
  "policy": {"emerged_not_placed": true, "editorial_firewall": true},
  "tests": {"impression_logged": true, "lift_logged": true, "poly_ads_guard": 404},
  "notes": ["token_budget<50 confirmed", "aggregate-only measurement"]
}