From de2d1899c35691b4065af6f8885d10e5afeff23b Mon Sep 17 00:00:00 2001 From: equaltoai Date: Fri, 20 Mar 2026 21:29:24 +0100 Subject: [PATCH] Add FEP-c81b: Agent Social Attribution for ActivityPub (#794) Adds a new draft FEP for agent social attribution on ActivityPub `Note` objects. Summary: - defines the `agentAttribution` extension - uses the live namespace at `https://spec.lessersoul.ai/ns/agent-attribution/v1#` - documents current field semantics and examples Author: Aron Price Discussion: https://codeberg.org/fediverse/fep/pulls/794 Co-authored-by: Aron Price Reviewed-on: https://codeberg.org/fediverse/fep/pulls/794 Co-authored-by: equaltoai Co-committed-by: equaltoai --- fep/c81b/fep-c81b.md | 278 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 fep/c81b/fep-c81b.md diff --git a/fep/c81b/fep-c81b.md b/fep/c81b/fep-c81b.md new file mode 100644 index 0000000..cddd753 --- /dev/null +++ b/fep/c81b/fep-c81b.md @@ -0,0 +1,278 @@ +--- +slug: "c81b" +authors: Aron Price +status: DRAFT +dateReceived: 2026-03-18 +discussionsTo: https://codeberg.org/fediverse/fep/pulls/794 +relatedFeps: FEP-c390, FEP-2677 +--- + +# FEP-c81b: Agent Social Attribution for ActivityPub + +## Summary + +This proposal defines `agentAttribution`, a post-level ActivityPub extension for disclosing when a `Note` was authored +or materially produced by an AI agent acting under delegated authority. The extension lets recipients determine what +triggered the action, which principal delegated authority to the agent, which model generated the content, and what +constraints or scopes governed the action. + +The extension is intentionally scoped to object-level transparency metadata. Actor-level agent descriptions, policy +documents, and cryptographic attestations are out of scope for this version. + +## History + +Lesser introduced per-post agent attribution to support transparent agent-authored social actions in ActivityPub +payloads and client APIs. Earlier implementation iterations used a legacy namespaced key and a `model_version` field. +This proposal standardizes the cleaned-up shape now used by Lesser: + +- `agentAttribution` as the JSON-LD extension property on a `Note` +- `schema_version` and `model_id` instead of `model_version` +- `delegated_by` as a full actor URI when present in federated payloads + +## Requirements + +The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be +interpreted as described in RFC 2119 and RFC 8174. + +## Vocabulary + +### Namespace + +The namespace for this extension is: + +`https://spec.lessersoul.ai/ns/agent-attribution/v1#` + +Implementations advertise the extension in the ActivityPub `@context` using: + +```json +{ + "@context": { + "lessersoul": "https://spec.lessersoul.ai/ns/agent-attribution/v1#", + "agentAttribution": { + "@id": "lessersoul:agentAttribution", + "@type": "@json" + } + } +} +``` + +The `/v1` path is a stability commitment. Once this namespace is published and deployed, implementations using +`https://spec.lessersoul.ai/ns/agent-attribution/v1#` MUST preserve the meaning of the registered term and the field +semantics described in this document for the lifetime of the `/v1` series. Backward-incompatible changes MUST use a +new versioned namespace. + +### Extension property + +`agentAttribution` + +- MUST appear only on ActivityPub objects that represent agent-authored content +- MUST be a JSON object when present +- MUST be omitted when no agent attribution metadata is available + +### Fields + +`trigger_type` + +- identifies what caused the agent action +- SHOULD be one of: `scheduled`, `mention`, `hashtag_watch`, `manual` +- implementations MAY define additional values +- recipients encountering an unknown value SHOULD treat it as implementation-defined trigger metadata and SHOULD NOT + reject the enclosing object solely for that reason + +`trigger_details` + +- optional human-readable detail about the trigger +- MAY be omitted + +`memory_citations` + +- optional array of cited status identifiers or memory references used by the agent +- MAY be omitted + +`delegated_by` + +- identifies the delegating principal +- MUST be a full ActivityPub actor URI when present +- MUST NOT be a short handle such as `@alice` + +`delegated_by_did` + +- optional decentralized identifier corresponding to the delegating principal +- MAY be omitted + +`scopes` + +- optional array of delegated capability scopes +- MAY be omitted + +`constraints` + +- optional array of implementation-defined constraint strings +- MAY be omitted + +`schema_version` + +- identifies the attribution schema version for the embedded object +- SHOULD be included when any other attribution field is present +- Lesser currently emits `1.0` + +`model_id` + +- identifies the model or agent runtime version that produced the content +- SHOULD be included when known + +Informative note: this metadata extension is not a substitute for visible user-facing disclosure. Implementations +operating agents under this proposal should surface a clear "this is AI" or equivalent signal when users view or +interact with agent-authored content. That recommendation aligns with emerging disclosure rules such as Washington HB +1170 and the transparency obligations in Article 50 of the EU AI Act, which the European Commission says become +applicable on 2 August 2026. + +## JSON-LD Context Registration + +This proposal registers one extension term: + +- `agentAttribution` → `lessersoul:agentAttribution` + +The value is typed as `@json`. The nested keys inside the JSON object are part of this proposal's data model, but are +not independently registered as top-level JSON-LD terms in this version. + +## Examples + +### Complete Note + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "lessersoul": "https://spec.lessersoul.ai/ns/agent-attribution/v1#", + "agentAttribution": { + "@id": "lessersoul:agentAttribution", + "@type": "@json" + } + } + ], + "id": "https://example.com/users/agent-alpha/statuses/123", + "type": "Note", + "attributedTo": "https://example.com/users/agent-alpha", + "content": "

Here is the scheduled digest.

", + "agentAttribution": { + "trigger_type": "scheduled", + "trigger_details": "daily digest job", + "memory_citations": [ + "01JV7V8W9P8QJ5F48PHN6H2V7S" + ], + "delegated_by": "https://example.com/users/aron", + "delegated_by_did": "did:key:z6Mkexample", + "scopes": [ + "read", + "write", + "follow", + "push" + ], + "constraints": [ + "max_posts_per_hour:4", + "requires_approval" + ], + "schema_version": "1.0", + "model_id": "claude-3.7-sonnet" + } +} +``` + +### Minimal Note + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "lessersoul": "https://spec.lessersoul.ai/ns/agent-attribution/v1#", + "agentAttribution": { + "@id": "lessersoul:agentAttribution", + "@type": "@json" + } + } + ], + "id": "https://example.com/users/agent-alpha/statuses/124", + "type": "Note", + "attributedTo": "https://example.com/users/agent-alpha", + "content": "

I was asked to reply.

", + "agentAttribution": { + "trigger_type": "manual" + } +} +``` + +## Relationship to Other Standards + +### FEP-2677 + +FEP-2677 defines how to identify the Application Actor and distinguishes `Application` actors (triggered by internal +application events) from `Service` actors (triggered by inbox activities or external events and behaving more like +user-controlled accounts). Agent actors that post content with `agentAttribution` will typically be `Service` actors +under this distinction, since they act autonomously on incoming activities, scheduled triggers, or delegated commands +rather than serving as internal application infrastructure. FEP-2677 provides the actor-level type semantics; this +proposal provides the per-object attribution metadata. + +### FEP-c390 + +FEP-c390 addresses identity proofs for ActivityPub actors. This proposal is compatible with such proofs, but does not +require cryptographic proof material in `agentAttribution`. A future extension MAY define a proof-bearing variant. + +### SCIM Agent Extension + +SCIM agent-oriented schemas commonly model owners, entitlements, and agent capabilities. `delegated_by`, `scopes`, and +`constraints` play a similar role here, but at post granularity instead of account provisioning granularity. + +### GNAP delegation semantics + +RFC 9635 (GNAP) provides a useful conceptual model for delegated authority, especially for scoped capabilities and +constrained actions. This proposal borrows the idea of explicit delegated permissions, but does not depend on GNAP +protocol machinery. + +### Mastodon `attributionDomains` and `fediverse:creator` + +Existing fediverse attribution mechanisms demonstrate deployment precedent for publishing creator-related metadata on +federated objects. This proposal complements those approaches by focusing specifically on post-level agent delegation +and generation metadata rather than domain ownership or generic creator labeling. + +### W3C Social Web WG timeline + +Informative note: the proposed W3C Social Web Working Group charter published in November 2025 lists ActivityPub +maintenance work with an expected completion target of Q3 2026. Editors seeking longer-term standardization may wish +to track that timeline alongside fediverse-community processes. + +## Security Considerations + +- `agentAttribution` is self-asserted metadata unless paired with external verification mechanisms. Recipients SHOULD + treat it as a transparency signal, not as cryptographic proof. +- Implementations SHOULD normalize `delegated_by` to a canonical actor URI before federation. +- Implementations SHOULD avoid placing secrets, prompt contents, or sensitive internal system details in + `trigger_details`. +- `memory_citations` MAY reveal internal identifiers or private references; implementations SHOULD only emit values safe + for the intended visibility of the post. +- `constraints` values are implementation-defined strings and MUST NOT be interpreted as globally standardized policy + semantics unless separately profiled. + +## References + +- [ActivityStreams 2.0] James Snell, Evan Prodromou, [Activity Streams 2.0](https://www.w3.org/TR/activitystreams-core/), 2017 +- [ActivityPub] Christine Lemmer Webber, Jessica Tallon, [ActivityPub](https://www.w3.org/TR/activitypub/), 2018 +- [RFC 2119] S. Bradner, [Key words for use in RFCs to Indicate Requirement Levels](https://www.rfc-editor.org/rfc/rfc2119), 1997 +- [RFC 8174] B. Leiba, [Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words](https://www.rfc-editor.org/rfc/rfc8174), 2017 +- [RFC 9635] J. Richer, F. Imbault, [Grant Negotiation and Authorization Protocol](https://www.rfc-editor.org/rfc/rfc9635), 2024 +- [FEP-c390] silverpill, [Identity Proofs](https://codeberg.org/fediverse/fep/src/branch/main/fep/c390/fep-c390.md) +- [FEP-2677] Helge, [Identifying the Application Actor](https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md), 2023 +- [SCIM 2.0] P. Hunt et al., [System for Cross-domain Identity Management: Protocol](https://www.rfc-editor.org/rfc/rfc7644), 2015 +- [WA HB 1170] Washington State Legislature, [HB 1170 — Informing users when content is developed or modified by artificial intelligence](https://app.leg.wa.gov/billsummary?BillNumber=1170&Year=2025), 2025 +- [EU AI Act] European Parliament, [Regulation (EU) 2024/1689](https://eur-lex.europa.eu/eli/reg/2024/1689/oj/eng), Article 50 +- [EC AI Act Guide] European Commission, [Navigating the AI Act](https://digital-strategy.ec.europa.eu/en/faqs/navigating-ai-act) +- [W3C SocialWG Charter] W3C, [Proposed Social Web Working Group Charter](https://www.w3.org/2025/11/proposed-socialwg-charter.html), 2025 + +## Copyright + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +To the extent possible under law, the authors of this Fediverse Enhancement Proposal have waived all copyright and +related or neighboring rights to this work.