Skip to content
Observalytics-SLPublic

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SC-014 · ACPM — Agent Capability and Profile Model

Schema Commons Standard Status Proposed DOI Cite IETF I-D CI

A structured capability profile for AI agents, platforms, tools, and models. SC-006 AAIF defines how to run a portable agent. SC-013 AREG defines how to discover one in a registry. ACPM defines what it offers — a machine-readable document declaring capabilities, trust posture, cost structure, SLA, and delegation rules in a form registries and orchestrators can compare directly.

The problem

Every agent, platform, tool, and model vendor describes its capabilities differently — in marketing pages, free-text docs, or ad hoc JSON. There is no canonical, comparable, machine-readable way to ask "does this support MCP tool calls?", "what's its trust level?", "what does it cost per run?", or "can I delegate to it?" Registries and orchestrators end up writing bespoke per-vendor parsers, and capability matching, trust gating, and cost/SLA comparison are done by hand or not at all.

The solution

A single, vendor-neutral capability profile that any agent, platform, tool, or model can publish:

{
  "sc_standard": "SC-014",
  "sc_version": "1.0.0",
  "profile_id": "...",
  "subject": { "subject_type": "agent", "name": "...", "vendor": "...", "sc_refs": [...] },
  "capabilities": [
    { "id": "tool.mcp", "support": "native" },
    { "id": "memory.vector", "support": "emulated" }
  ],
  "tools": [...],
  "models": [...],
  "memory": [...],
  "trust": { "level": "verified", "attestation": {...}, "sandbox": {...} },
  "cost_profile": { "pricing_model": "usage_based", "unit_cost": { "per": "run", "amount": 0.04 } },
  "sla": { "uptime_pct": 99.5, "support_tier": "standard" },
  "delegation_rules": [...],
  "compliance": { "data_residency": ["EU"], "pii_handling": "redact" },
  "provenance": { "authored_by": "...", "license": "CC-BY-4.0" }
}

Capability ids use the same dot-namespaced vocabulary as SC-006 AAIF's required_capabilities[] (tool.mcp, memory.vector, orchestration.parallel, ...), so an AAIF agent's requirements and an ACPM profile's offerings can be matched directly. ACPM profiles are referenced from SC-013 AREG registry entries and SC-006 AAIF agents via sc_refs[].

Status & honest expectations

ACPM is a brand-new, proposed standard with zero implementations and zero adopters. It has not been used in production anywhere. The schema and examples validate cleanly today, but nothing yet generates, consumes, or enforces an ACPM profile in a real system. If you adopt it early, you are shaping the spec, not following an established one — say so, and we'll credit you as a founding adopter in ADOPTERS.md.

ACPM does not replace SC-006 (AAIF) or SC-013 AREG; it sits alongside them as the capability/trust/cost layer that both can reference.

Citation, conformance, and extensibility

  • Cite it. CITATION.cff + a placeholder Zenodo DOI.
  • Self-certify conformance. Pick a level from the table below and check your profile against it; see CONFORMANCE.md. The self-certification report format is planned, not yet shipped — see CONFORMANCE.md for what exists today versus what's still on paper.
  • Report issues safely. SECURITY.md defines the threat model (mostly: nothing here is cryptographically enforced) and disclosure process.
  • Extend without forking. The ^x- namespace and _comment root key (mirrored from SC-006) let tools attach metadata without breaking strict validation.

Use cases

Role Benefit
Registries & marketplaces (e.g. SC-013 AREG) List agents/platforms/tools/models with comparable, structured capability and cost data instead of free-text claims
Orchestrators Match an AAIF agent's required_capabilities[] against ACPM profiles before dispatch; gate by trust.level
Procurement / FinOps Compare cost_profile and sla across vendors on a like-for-like basis
Security & compliance teams Check trust.attestation, compliance.data_residency, and compliance.pii_handling before approving a subject for use
Platform builders Publish one profile instead of restating capabilities in docs, sales decks, and support tickets

Files

File Description
SPECIFICATION.md Full specification: terminology (RFC 2119), object model, field dictionary, trust/cost/SLA/delegation model, conformance levels, mapping to prior art, references
ABSTRACT.md Structured abstract for registry submission, IETF I-D, and citation
CONFORMANCE.md Conformance levels and the (planned) self-certification report format
SECURITY.md Threat model and vulnerability disclosure policy
CITATION.cff Citation metadata (GitHub "Cite this repository" + Zenodo DOI)
CHANGELOG.md Version history
ADOPTERS.md Self-service adopter registry
schema/profile.schema.json JSON Schema (draft 2020-12) — capability profile document (sc_version 1.0.0)
context.jsonld JSON-LD context mapping all ACPM terms to URIs (schema.org, Dublin Core, ACPM vocab)
examples/invoice-chaser-profile.json Agent profile: the SC-006 "Invoice Chaser" agent, trust verified, usage-based cost
examples/langgraph-platform-profile.json Platform profile: a LangGraph-style runtime, broad capabilities, trust attested
examples/gpt4o-model-profile.json Model profile: GPT-4o, text+image+tool_use, usage-based per-1k-token cost
draft-schemacommons-acpm-00.xml IETF Internet-Draft (xml2rfc v3)

Validate

python tools/validate.py

Quick start: comparing two profiles

import json, jsonschema

schema = json.load(open("schema/profile.schema.json"))

agent_profile = json.load(open("examples/invoice-chaser-profile.json"))
platform_profile = json.load(open("examples/langgraph-platform-profile.json"))

jsonschema.validate(agent_profile, schema)
jsonschema.validate(platform_profile, schema)

# Capability matching: does the platform support everything the agent needs?
needed = {c["id"] for c in agent_profile.get("capabilities", []) if c["support"] != "none"}
offered = {c["id"] for c in platform_profile.get("capabilities", []) if c["support"] in ("native", "emulated")}
missing = needed - offered
print("unsupported:", missing or "none — compatible")

# Trust gating
trust_order = ["untrusted", "sandboxed", "verified", "attested", "enterprise"]
ok = trust_order.index(platform_profile["trust"]["level"]) >= trust_order.index("verified")
print("platform meets minimum trust:", ok)

Conformance levels

Level Requirements
Basic Valid schema; subject present
Tooled Basic + capabilities[] non-empty
Trusted Tooled + trust.level ∈ {verified, attested, enterprise}
Priced Trusted + cost_profile present
Enterprise Priced + sla + compliance + provenance.signature present

See SPECIFICATION.md §I for the full normative definitions.

Companion standards

Standard What it adds
AAIF — SC-006 Agent definition: how to describe and run a portable agent
AREG — SC-013 Agent registry: how to publish and discover agents

Licensed CC BY 4.0 — part of Schema Commons.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages