···4747 "#recordAction",
4848 "#bskyPostAction",
4949 "#patchRecordAction",
5050- "#bookmarkAction"
5050+ "#bookmarkAction",
5151+ "#followAction"
5152 ]
5253 }
5354 },
···333334 "type": "string",
334335 "maxLength": 64
335336 }
337337+ },
338338+ "comment": {
339339+ "type": "string",
340340+ "description": "Optional user note about this action.",
341341+ "maxLength": 512
342342+ }
343343+ }
344344+ },
345345+ "followAction": {
346346+ "type": "object",
347347+ "description": "Follow a subject DID on an AT Protocol social graph (Bluesky, Tangled, or Sifa). All three produce records with the same shape; only the collection NSID differs.",
348348+ "required": ["target", "subject"],
349349+ "properties": {
350350+ "target": {
351351+ "type": "string",
352352+ "description": "Which social graph to follow on.",
353353+ "knownValues": ["bluesky", "tangled", "sifa"],
354354+ "maxLength": 32
355355+ },
356356+ "subject": {
357357+ "type": "string",
358358+ "description": "DID of the account to follow. Supports {{placeholders}}; the runtime enforces the rendered value matches the DID format before writing the record.",
359359+ "maxLength": 512
336360 },
337361 "comment": {
338362 "type": "string",