Skip to content

Relationships

ACP’s relationship model builds a knowledge graph into every ACO. Rather than flat “related IDs,” each relationship edge carries a type, optional confidence score, and optional provenance.


relationships is an array of typed edge objects on an ACO.

relationships:
- rel_type: "derived-from"
target_id: "01952a3b-0000-0000-0000-000000000001"
confidence: 0.95
provenance:
model: "claude-haiku-4-5"
timestamp: "2026-02-23T10:31:00Z"
- rel_type: "references"
target_id: "01952a3b-0000-0000-0000-000000000002"
- rel_type: "supersedes"
target_id: "01952a3b-0000-0000-0000-000000000003"
confidence: 1.0
SubfieldTypeRequiredDescription
rel_typestringYesRelationship type. See core types below.
target_idstringYesID of the related object. UUID for ACP objects; URL for external references.
confidencefloat 0.0–1.0NoConfidence score for auto-detected relationships. Omit for human-asserted.
provenanceobjectNoWhich model/process created this edge. Same structure as per-field provenance records.

TypeMeaningExample
referencesThis ACO cites or links to the targetAn article that links to a paper it draws from
derived-fromThis ACO was created from or inspired by the targetA summary ACO derived from a longer source ACO
supersedesThis ACO replaces the targetAn updated version that obsoletes the previous one
supportsThis ACO provides evidence for the target’s claimsResearch findings that support a thesis ACO
contradictsThis ACO disputes the target’s claimsA rebuttal or counter-analysis
part-ofThis ACO is a component of the targetA chapter that is part of a larger document ACO
relatedGeneral associationWhen no specific type applies

Custom relationship types use the x- prefix:

relationships:
- rel_type: "x-annotates"
target_id: "01952a3b-0000-0000-0000-000000000001"
- rel_type: "x-translates"
target_id: "01952a3b-0000-0000-0000-000000000002"

Extension types are implementation-defined. They MUST be preserved by compliant implementations even if unrecognized.


All stored edges are outbound — they represent “this object → target.”

Implementations MAY compute inbound views (which objects reference this ACO) at query time, but MUST NOT store inbound edges on the target object.

Why: Outbound-only storage eliminates referential integrity problems. If the source ACO is deleted, no stale inbound edges remain on any other object. If the target ACO is deleted, the edge on the source becomes a dangling reference — which is acceptable and expected behavior.


Human-asserted relationships: Omit confidence and provenance. These are definitive.

relationships:
- rel_type: "supersedes"
target_id: "01952a3b-0000-0000-0000-000000000001"

Auto-detected relationships: Include confidence and provenance. These reflect the generating model’s certainty.

relationships:
- rel_type: "supports"
target_id: "01952a3b-0000-0000-0000-000000000002"
confidence: 0.78
provenance:
model: "claude-haiku-4-5"
timestamp: "2026-02-23T10:31:00Z"

target_id can be a URL for external references (content that is not an ACP object):

relationships:
- rel_type: "references"
target_id: "https://modelcontextprotocol.io/specification"

This enables ACOs to express relationships to any content on the web, not just other ACOs.


v0.1 had separate top-level fields for common relationship types. All relationship information is now consolidated in the relationships array.

v0.1v0.2 equivalent
related_objects: ["id1", "id2"]relationships: [{rel_type: "related", target_id: "id1"}, {rel_type: "related", target_id: "id2"}]
derived_from: "id1"relationships: [{rel_type: "derived-from", target_id: "id1"}]
supersedes: "id1"relationships: [{rel_type: "supersedes", target_id: "id1"}]