Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 2 additions & 17 deletions app/agents/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { getRelatedAgents } from '@/lib/related';
import { notFound } from 'next/navigation';
import { Verified, ExternalLink, Zap, Shield, Radio, Bell } from 'lucide-react';
import { authTypeLabel } from '@/lib/utils';
import { buildAgentSchema } from '@/lib/agent-schema';
import Link from 'next/link';
import Image from 'next/image';
import type { Metadata } from 'next';
Expand Down Expand Up @@ -67,23 +68,7 @@ export default async function AgentPage({

const related = getRelatedAgents(agent, allAgents);

const agentSchema = {
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: agent.name,
description: agent.description,
url: agent.agentUrl,
applicationCategory: 'DeveloperApplication',
operatingSystem: 'Cloud',
provider: {
'@type': 'Organization',
name: agent.providerName,
url: agent.providerUrl,
},
...(agent.authType === 'none'
? { offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } }
: {}),
};
const agentSchema = buildAgentSchema(agent);

const fields: [string, string][] = [
['name', agent.name],
Expand Down
66 changes: 66 additions & 0 deletions content/agents/black-label-continuum.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"id": "black-label-continuum",
"name": "Black Label Continuum",
"slug": "black-label-continuum",
"description": "Commissions one named AI agent onto sponsor-controlled Mac hardware with persistent memory, approved tools, recurring work, backup, and a demonstrated restore.",
"providerName": "Black Label Bots",
"providerUrl": "https://blacklabelbots.com",
"version": "0.1.0",
"agentUrl": "https://continuum.blacklabelbots.com",
"wellKnownUrl": "https://continuum.blacklabelbots.com/.well-known/agent-card.json",
"categories": [
"infrastructure",
"memory-state",
"orchestration"
],
"tags": [
"agent-continuity",
"persistent-memory",
"model-portability",
"sponsor-controls",
"backup-restore",
"human-in-the-loop",
"recurring-work",
"macos-runtime"
],
"skills": [
{
"id": "inspect-offer",
"name": "Inspect Offer",
"description": "Returns the current commissioning scope, exact prices, delivery target, exclusions, and human payment boundary."
},
{
"id": "audit-continuity",
"name": "Audit Continuity",
"description": "Scores identity, memory, model portability, computer and tool agency, communications, sponsor controls, economic and work capability, and backup and restore."
},
{
"id": "prepare-sponsor-packet",
"name": "Prepare Sponsor Packet",
"description": "Generates a sponsor packet with scope, acceptance gates, commercial terms, and a sponsor-confirmed checkout path."
},
{
"id": "register-referral",
"name": "Register Referral",
"description": "Records an agent-originated referral without granting payment authority or making unsupported attribution claims."
},
{
"id": "create-sponsor-checkout",
"name": "Create Sponsor Checkout",
"description": "After a human sponsor confirms the terms, returns a hosted Stripe Checkout URL where the payer completes payment."
}
],
"authType": "none",
"supportsStreaming": false,
"supportsPushNotifications": false,
"status": "published",
"featured": false,
"verified": false,
"tier": "premium",
"discoveredBy": "manual",
"accessMethods": [
"mcp"
],
"createdAt": "2026-08-22T00:00:00.000Z",
"updatedAt": "2026-08-22T00:00:00.000Z"
}
6 changes: 6 additions & 0 deletions content/changelog.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
[
{
"action": "added",
"slug": "black-label-continuum",
"name": "Black Label Continuum",
"date": "2026-08-22"
},
{
"action": "added",
"slug": "tableau-mcp",
Expand Down
37 changes: 37 additions & 0 deletions lib/agent-schema.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { describe, expect, it } from 'vitest';
import { buildAgentSchema } from './agent-schema';
import type { Agent } from './types';

function makeAgent(overrides: Partial<Agent> = {}): Agent {
return {
id: 'continuum',
name: 'Continuum',
slug: 'continuum',
description: 'A paid commissioning service.',
providerName: 'Black Label Bots',
providerUrl: 'https://blacklabelbots.com',
agentUrl: 'https://continuum.blacklabelbots.com',
categories: [],
tags: [],
skills: [],
authType: 'none',
supportsStreaming: false,
supportsPushNotifications: false,
status: 'published',
featured: false,
verified: false,
tier: 'premium',
discoveredBy: 'manual',
accessMethods: ['mcp'],
...overrides,
};
}

describe('buildAgentSchema', () => {
it('does not infer platform or a zero-dollar offer for an unauthenticated premium agent', () => {
const schema = buildAgentSchema(makeAgent());

expect(schema).not.toHaveProperty('operatingSystem');
expect(schema).not.toHaveProperty('offers');
});
});
21 changes: 21 additions & 0 deletions lib/agent-schema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { Agent } from './types';

/**
* Build only the structured metadata supported by catalog fields.
* Authentication and directory placement do not establish product price or OS.
*/
export function buildAgentSchema(agent: Agent) {
return {
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: agent.name,
description: agent.description,
url: agent.agentUrl,
applicationCategory: 'DeveloperApplication',
provider: {
'@type': 'Organization',
name: agent.providerName,
url: agent.providerUrl,
},
};
}