Version: 1.0.0 Date: 2026-01-29 Status: Guide
This guide explains how the Grounded Agency Capability Ontology handles different modalities -- text, image, audio, video, and multi-modal inputs -- through domain parameters on atomic capabilities rather than creating separate modality-specific capabilities. This design keeps the ontology minimal (36 atomic capabilities) while supporting the full range of modality-aware agent tasks.
Traditional AI capability frameworks treat each modality as a separate skill category. The Open Agentic Schema Framework (OASF), for example, devotes distinct categories to Natural Language Processing (Category 1), Computer Vision (Category 2), Audio (Category 3), and Multi-modal (Category 7). This leads to taxonomic explosion: object detection, image segmentation, scene classification, and image generation all become independent top-level skills.
Grounded Agency takes a different approach. We observe that the cognitive operation is the same regardless of modality. Detecting a pattern in text, detecting an object in an image, and detecting an anomaly in an audio stream all perform the same fundamental operation: find occurrences of a pattern in data. What changes is the domain, not the verb.
This insight drives our domain parameterization model:
capability(domain: modality) instead of capability-modality
Concrete examples:
| Modality-Specific (Avoided) | Domain-Parameterized (Preferred) |
|---|---|
detect-object |
detect with domain: image.object |
classify-audio |
classify with domain: audio.genre |
generate-image |
generate with domain: image |
transcribe-speech |
transform with source_format: audio.speech, target_format: text.transcript |
Note that transform uses its native source_format/target_format input parameters rather than the domain annotation convention, since the modality is inherent to the transformation definition itself.
A note on the domain parameter: The domain parameter used throughout this guide is a workflow-level annotation convention. It is not a formal property defined in the capability ontology schema -- rather, it serves as a hint to implementations about which modality-specific processing pipeline to invoke. Workflow authors use domain to specialize generic capabilities (e.g., detect with domain: visual vs domain: audio) without requiring separate ontology entries per modality.
Cross-reference: Domain profiles (e.g., schemas/profiles/vision.yaml) use profile-level domain names (e.g., domain: vision) that differ from the capability-level domain parameters used in this guide (e.g., domain: image.object). Profile domain names identify the agent specialization; capability domain parameters specify the processing pipeline.
-
Ontology stability. Adding support for a new modality (e.g., 3D point clouds, haptic data) requires zero changes to the capability ontology. The existing 36 capabilities already cover it.
-
Consistent safety model. Every modality invocation inherits the same safety properties: evidence anchors, confidence scores, checkpoint requirements for mutations, and audit trails. There is no risk of a new modality bypassing safety because it was added outside the core framework.
-
Composability preserved. Workflow patterns composed from atomic capabilities work across modalities. A workflow that runs
detect -> classify -> explainfunctions identically whether the input is text, an image, or a video frame -- only the domain parameter changes. -
Reduced cognitive load. Developers learn 36 capabilities once, then apply them to any modality. There is no need to discover and memorize separate APIs for each modality.
When a workflow specifies a domain parameter for a modality that the target implementation does not support, the implementation should return a clear error indicating the unsupported domain value. For example:
error:
code: unsupported_domain
domain: "haptic.pressure"
message: "No processing pipeline available for domain 'haptic.pressure'"This allows workflow authors to detect modality gaps at design time rather than encountering silent failures at runtime.
Domain parameters do not erase modality -- they parameterize it. The modality affects:
- Input encoding. An image domain expects a pixel buffer or URI reference; a text domain expects a string or document reference.
- Evidence anchors. Image evidence uses bounding boxes and pixel coordinates; audio evidence uses time segments; text evidence uses character offsets or line numbers. See Section 4 for details.
- Tool selection. The runtime maps
detectwithdomain: image.objectto a vision model or API, whiledetectwithdomain: text.entitymaps to an NER model. This mapping is an implementation concern, not an ontology concern. - Confidence calibration. Different modalities have different uncertainty profiles. Image classification confidence may be calibrated differently from text classification confidence.
The following matrix shows how key capabilities operate across modalities. Each cell describes the domain parameter value and what the capability does in that modality.
| Capability | Text | Image | Audio | Video | Multi-Modal |
|---|---|---|---|---|---|
| detect | domain: text.entity, domain: text.pattern, domain: text.anomaly -- Find named entities, regex patterns, or anomalous passages |
domain: image.object, domain: image.face, domain: image.anomaly -- Find objects, faces, or visual anomalies via bounding boxes |
domain: audio.event, domain: audio.speech, domain: audio.anomaly -- Detect sound events, speech segments, or audio anomalies via time ranges |
domain: video.object, domain: video.scene_change, domain: video.action -- Track objects, detect scene transitions, or identify actions across frames |
domain: multimodal.alignment, domain: multimodal.inconsistency -- Detect alignment or inconsistency between modalities |
| classify | domain: text.sentiment, domain: text.topic, domain: text.intent -- Assign sentiment, topic, or intent labels to text |
domain: image.scene, domain: image.content, domain: image.style -- Classify scenes, content categories, or artistic styles |
domain: audio.genre, domain: audio.speaker, domain: audio.emotion -- Classify audio genre, speaker identity, or emotional tone |
domain: video.genre, domain: video.activity, domain: video.quality -- Classify video genre, depicted activity, or production quality |
domain: multimodal.category -- Classify based on combined signals from multiple modalities |
| measure | domain: text.readability, domain: text.similarity, domain: text.length -- Quantify readability score, semantic similarity, or document length |
domain: image.resolution, domain: image.quality, domain: image.similarity -- Measure resolution, perceptual quality (SSIM, LPIPS), or visual similarity |
domain: audio.loudness, domain: audio.snr, domain: audio.duration -- Measure loudness (LUFS), signal-to-noise ratio, or segment duration |
domain: video.fps, domain: video.bitrate, domain: video.stability -- Measure frame rate, encoding bitrate, or camera stability |
domain: multimodal.coherence -- Measure cross-modal coherence (e.g., audio-visual sync score) |
| predict | domain: text.completion, domain: text.next_event -- Predict likely text continuation or next event in a log stream |
domain: image.depth, domain: image.segmentation_mask -- Predict depth maps or segmentation masks from images |
domain: audio.next_segment, domain: audio.speaker_turn -- Predict upcoming audio content or next speaker turn |
domain: video.trajectory, domain: video.next_frame -- Predict object trajectories or synthesize next frames |
domain: multimodal.outcome -- Predict outcomes using combined text, image, and audio signals |
The remaining UNDERSTAND capabilities (compare and discover) are typically modality-agnostic and are not shown in this matrix. They operate on abstract data comparisons and pattern discovery regardless of the input modality.
| Capability | Text | Image | Audio | Video | Multi-Modal |
|---|---|---|---|---|---|
| generate | domain: text, format: markdown or format: code -- Generate prose, documentation, or source code |
domain: image, format: png or format: svg -- Generate images from text prompts or specifications |
domain: audio, format: wav or format: mp3 -- Generate speech, music, or sound effects |
domain: video, format: mp4 -- Generate video clips from descriptions or scripts |
domain: multimodal, format: presentation -- Generate presentations combining text, images, and audio |
| transform | source_format: text.markdown, target_format: text.html -- Convert between text formats, summarize, or translate |
source_format: image.png, target_format: image.svg -- Convert image formats, resize, apply style transfer |
source_format: audio.speech, target_format: text.transcript (transcription) or source_format: text, target_format: audio.speech (TTS) |
source_format: video.mp4, target_format: video.gif -- Convert formats, extract frames, change resolution |
source_format: text, target_format: image (text-to-image) or source_format: image, target_format: text (captioning) |
The integrate capability merges outputs from multiple sources regardless of modality. See Appendix B, Step 7 for a multi-modal integration example.
| Capability | Text | Image | Audio | Video | Multi-Modal |
|---|---|---|---|---|---|
| retrieve | format: text -- Fetch documents, articles, or code by URI or path |
format: image -- Fetch images by URI, asset ID, or path |
format: audio -- Fetch audio files by URI, track ID, or path |
format: video -- Fetch video files by URI, stream ID, or path |
format: mixed -- Fetch resources containing multiple modalities |
| search | scope: text -- Search text corpora, databases, or code repositories |
scope: image -- Search image databases by visual similarity or tags |
scope: audio -- Search audio libraries by content, metadata, or fingerprint |
scope: video -- Search video archives by content, transcript, or visual features |
scope: multimodal -- Search across modalities using cross-modal embeddings |
The observe and receive capabilities accept any data type and do not use modality-specific format or scope parameters. They are modality-agnostic by design.
- 6 capabilities are most commonly parameterized by modality:
detect,classify,measure,predict,generate,transform - 2 additional capabilities support modality through format/scope parameters:
retrieve,search - 28 remaining capabilities are modality-agnostic (e.g.,
plan,checkpoint,verify,auditoperate on any data type)
Example 1: Named Entity Recognition
- capability: detect
domain: text.entity
purpose: Extract named entities from the document.
store_as: entity_out
input_bindings:
data: ${retrieve_out.data}
pattern: "PERSON | ORGANIZATION | LOCATION | DATE"
threshold: 0.8Output:
detected: true
matches:
- text: "Anthropic"
label: ORGANIZATION
span: [42, 51]
- text: "January 2026"
label: DATE
span: [120, 132]
evidence_anchors:
- ref: "document:report.pdf:page:3:char:42-51"
kind: text_span
- ref: "document:report.pdf:page:3:char:120-132"
kind: text_span
confidence: 0.92Example 2: Sentiment Classification
- capability: classify
domain: text.sentiment
purpose: Determine the sentiment of customer feedback.
store_as: sentiment_out
input_bindings:
item: ${retrieve_out.data}
taxonomy: ["positive", "negative", "neutral", "mixed"]
multi_label: falseOutput:
labels: ["negative"]
probabilities:
positive: 0.05
negative: 0.88
neutral: 0.04
mixed: 0.03
evidence_anchors:
- ref: "document:feedback.txt:line:3-7"
kind: text_span
excerpt: "The response time was unacceptable and..."
confidence: 0.88Example 3: Text-to-Text Translation
- capability: transform
purpose: Translate the user manual from English to Portuguese.
store_as: translation_out
input_bindings:
input: ${retrieve_out.data}
source_format: "text.en"
target_format: "text.pt-BR"
options:
preserve_formatting: true
domain: "technical"Example 1: Object Detection in Images
- capability: detect
domain: image.object
purpose: Detect all vehicles in the surveillance frame.
store_as: vehicle_out
input_bindings:
data: ${retrieve_out.data}
pattern: "vehicle"
threshold: 0.7Output:
detected: true
matches:
- label: "car"
bounding_box: { x: 120, y: 340, width: 200, height: 150 }
confidence: 0.95
- label: "truck"
bounding_box: { x: 450, y: 280, width: 300, height: 220 }
confidence: 0.89
locations:
- region: { x: 120, y: 340, width: 200, height: 150 }
- region: { x: 450, y: 280, width: 300, height: 220 }
evidence_anchors:
- ref: "image:frame_20260129_143022.jpg:bbox:120,340,200,150"
kind: bounding_box
- ref: "image:frame_20260129_143022.jpg:bbox:450,280,300,220"
kind: bounding_box
confidence: 0.92Example 2: Image Quality Measurement
- capability: measure
domain: image.quality
purpose: Assess the perceptual quality of the uploaded photograph.
store_as: quality_out
input_bindings:
target: ${retrieve_out.data}
metric: "perceptual_quality"
unit: "SSIM"Output:
value: 0.87
uncertainty:
lower: 0.85
upper: 0.89
unit: "SSIM"
evidence_anchors:
- ref: "image:upload_001.jpg:full_frame"
kind: image_reference
excerpt: "SSIM computed against reference at 1920x1080"
confidence: 0.95Example 3: Image Generation
- capability: generate
domain: image
purpose: Create an architectural diagram of the system.
store_as: diagram_out
input_bindings:
specification:
description: "Microservices architecture with API gateway, three services, and a shared database"
style: "technical diagram"
format: "svg"
constraints:
max_resolution: "4096x4096"
color_palette: "monochrome"Example 1: Speech Detection and Transcription
# Step 1: Detect speech segments in the audio file
- capability: detect
domain: audio.speech
purpose: Identify speech segments in the meeting recording.
store_as: speech_segments_out
input_bindings:
data: ${retrieve_out.data}
pattern: "human_speech"
threshold: 0.6
# Step 2: Transform speech to text
- capability: transform
purpose: Transcribe detected speech segments to text.
store_as: transcript_out
input_bindings:
input: ${speech_segments_out.matches}
source_format: "audio.speech"
target_format: "text.transcript"
options:
language: "en"
speaker_diarization: trueOutput for detect step:
detected: true
matches:
- speaker_id: "speaker_1"
time_range: { start: "00:00:02.300", end: "00:00:15.800" }
confidence: 0.94
- speaker_id: "speaker_2"
time_range: { start: "00:00:16.100", end: "00:00:28.500" }
confidence: 0.91
locations:
- segment: { start_ms: 2300, end_ms: 15800 }
- segment: { start_ms: 16100, end_ms: 28500 }
evidence_anchors:
- ref: "audio:meeting_2026-01-29.wav:segment:2300-15800"
kind: time_segment
- ref: "audio:meeting_2026-01-29.wav:segment:16100-28500"
kind: time_segment
confidence: 0.92Example 2: Audio Classification
- capability: classify
domain: audio.emotion
purpose: Classify the emotional tone in the customer service call.
store_as: emotion_out
input_bindings:
item: ${retrieve_out.data}
taxonomy: ["calm", "frustrated", "angry", "satisfied", "confused"]
multi_label: trueExample 3: Audio Anomaly Detection
- capability: detect
domain: audio.anomaly
purpose: Detect unusual sounds in the factory floor recording.
store_as: anomaly_out
input_bindings:
data: ${retrieve_out.data}
pattern: "mechanical_anomaly"
threshold: 0.75Output:
detected: true
matches:
- label: "bearing_grinding"
time_range: { start: "00:12:33.400", end: "00:12:35.100" }
severity: "high"
evidence_anchors:
- ref: "audio:factory_line3_20260129.wav:segment:753400-755100"
kind: time_segment
excerpt: "1700ms segment with frequency peak at 3.2kHz consistent with bearing wear"
confidence: 0.84Example 1: Action Detection in Video
- capability: detect
domain: video.action
purpose: Detect safety violations in the warehouse footage.
store_as: violation_out
input_bindings:
data: ${retrieve_out.data}
pattern: "safety_violation"
threshold: 0.8Output:
detected: true
matches:
- label: "no_hard_hat"
frame_range: { start_frame: 1200, end_frame: 1450 }
time_range: { start: "00:00:40.000", end: "00:00:48.333" }
bounding_box: { x: 300, y: 150, width: 80, height: 120 }
confidence: 0.91
evidence_anchors:
- ref: "video:warehouse_cam2.mp4:frames:1200-1450:bbox:300,150,80,120"
kind: video_region
excerpt: "Person without hard hat detected in Zone B, frames 1200-1450"
confidence: 0.91Example 2: Video Quality Measurement
- capability: measure
domain: video.stability
purpose: Measure camera stability of the drone footage.
store_as: stability_out
input_bindings:
target: ${retrieve_out.data}
metric: "optical_flow_variance"
unit: "pixels_per_frame"Example 3: Video Scene Classification
- capability: classify
domain: video.activity
purpose: Classify the activity depicted in each video segment.
store_as: activity_out
input_bindings:
item: ${retrieve_out.data}
taxonomy: ["manufacturing", "assembly", "inspection", "maintenance", "idle"]
multi_label: falseExample 1: Cross-Modal Consistency Check
# A workflow that checks whether a product listing's text description
# matches its accompanying images.
- capability: detect
domain: multimodal.inconsistency
purpose: Detect mismatches between product text and images.
store_as: mismatch_out
input_bindings:
data:
text: ${retrieve_text_out.data}
images: ${retrieve_images_out.data}
pattern: "text_image_inconsistency"
threshold: 0.7Output:
detected: true
matches:
- inconsistency: "Text says 'blue exterior' but image shows red car"
text_span: { start: 45, end: 60 }
image_region: { ref: "image:product_001.jpg:bbox:100,200,400,300" }
severity: "high"
evidence_anchors:
- ref: "text:listing.txt:char:45-60"
kind: text_span
excerpt: "features a sleek blue exterior"
- ref: "image:product_001.jpg:bbox:100,200,400,300"
kind: bounding_box
excerpt: "Dominant color in region: RGB(180, 30, 25) -- red"
confidence: 0.89Example 2: Multi-Modal Search
- capability: search
scope: multimodal
purpose: Find all assets matching the concept 'solar panel installation'.
store_as: search_out
input_bindings:
query:
text: "solar panel installation on residential rooftop"
visual_reference: ${reference_image_out.data}
collection: "asset_library"
limit: 20Example 3: Cross-Modal Transformation
# Generate an image caption, then use it to produce audio narration
- capability: transform
purpose: Generate a descriptive caption for the image.
store_as: caption_out
input_bindings:
input: ${retrieve_out.data}
source_format: "image.jpg"
target_format: "text.caption"
options:
detail_level: "comprehensive"
max_length: 200
- capability: generate
domain: audio
purpose: Create audio narration from the caption.
store_as: narration_out
input_bindings:
specification: ${caption_out.output}
format: "wav"
constraints:
voice: "neutral"
speed: 1.0Every capability invocation in the Grounded Agency framework must produce evidence_anchors -- references that ground the output in verifiable sources. Different modalities require different anchor types to maintain this grounding guarantee.
| Modality | Anchor Kind | Reference Format | Description |
|---|---|---|---|
| Text | text_span |
document:<path>:line:<N> or document:<path>:char:<start>-<end> |
Character offset or line reference within a text document |
| Image | bounding_box |
image:<path>:bbox:<x>,<y>,<w>,<h> |
Rectangular region in pixel coordinates |
| Image | image_reference |
image:<path>:full_frame |
Reference to the entire image |
| Image | pixel_mask |
image:<path>:mask:<mask_id> |
Binary or probability mask over image pixels |
| Audio | time_segment |
audio:<path>:segment:<start_ms>-<end_ms> |
Time range in milliseconds within an audio file |
| Audio | frequency_band |
audio:<path>:freq:<low_hz>-<high_hz>:time:<start_ms>-<end_ms> |
Spectrogram region defined by frequency and time |
| Video | video_region |
video:<path>:frames:<start>-<end>:bbox:<x>,<y>,<w>,<h> |
Spatio-temporal region: frame range and bounding box |
| Video | frame_reference |
video:<path>:frame:<N> |
Reference to a single video frame |
| Video | temporal_segment |
video:<path>:time:<start>-<end> |
Time range within a video file |
| Multi-Modal | composite |
Contains nested anchors from multiple modalities | Combines anchors from different modalities |
All evidence anchors follow a common schema, regardless of modality:
evidence_anchor:
type: object
required: [ref, kind]
properties:
ref:
type: string
description: URI-style reference to the evidence source
kind:
type: string
enum:
- text_span
- bounding_box
- image_reference
- pixel_mask
- time_segment
- frequency_band
- video_region
- frame_reference
- temporal_segment
- composite
- file
- url
- tool_output
- sensor_reading
# The `file`, `url`, `tool_output`, and `sensor_reading` kinds are generic
# evidence anchors not specific to any modality. They are included for
# completeness alongside the modality-specific kinds defined in Section 4.1.
excerpt:
type: string
description: Human-readable description of what the evidence shows
nested_anchors:
type: array
description: For composite anchors, contains sub-anchors from each modalityText grounding rules:
- Entity references MUST include character offsets or line numbers.
- Classification evidence MUST include the excerpt that supports the label assignment.
- When text is too long to excerpt, provide a document hash and section reference.
Image grounding rules:
- Object detections MUST include bounding box coordinates
(x, y, width, height)in pixel space. - Full-image classifications MAY use
full_framereferences but SHOULD note the dominant region that influenced the decision. - Segmentation results MUST reference a mask identifier.
Audio grounding rules:
- Speech detections MUST include time segment boundaries in milliseconds.
- Audio classifications SHOULD include the time range analyzed.
- Frequency-domain detections (e.g., anomalous harmonics) SHOULD include both time and frequency bounds.
Video grounding rules:
- Object detections MUST include both the frame range and the bounding box within those frames.
- Scene-level classifications MUST include the temporal segment (frame range or time range).
- Action detections SHOULD include representative keyframe references.
Multi-modal grounding rules:
- Cross-modal claims MUST include anchors from each contributing modality.
- Composite anchors MUST use
nested_anchorsto reference the individual modality evidence. - When modalities disagree, ALL modality-specific evidence MUST be included, not just the one that supports the conclusion.
A claim that a product listing is inconsistent requires evidence from both text and image:
evidence_anchors:
- ref: "multimodal:listing_001:text+image"
kind: composite
excerpt: "Text describes 'blue exterior' but image shows red vehicle"
nested_anchors:
- ref: "text:listing_001.txt:char:45-60"
kind: text_span
excerpt: "features a sleek blue exterior"
- ref: "image:product_001.jpg:bbox:100,200,400,300"
kind: bounding_box
excerpt: "Vehicle body region with dominant RGB(180,30,25)"The Open Agentic Schema Framework (OASF) by Cisco/Outshift organizes AI agent skills into 15 categories. Three of these categories are modality-specific and map directly to Grounded Agency's domain-parameterized capabilities.
| OASF Category | ID | OASF Approach | Grounded Agency Approach |
|---|---|---|---|
| Computer Vision | 2 | Dedicated skill category with subcategories for object detection, image segmentation, image classification, OCR, etc. | detect(domain: image.*), classify(domain: image.*), measure(domain: image.*), predict(domain: image.*), generate(domain: image), transform(source_format: image.*, ...) |
| Audio | 3 | Dedicated skill category with subcategories for audio classification, speech recognition, text-to-speech, etc. | detect(domain: audio.*), classify(domain: audio.*), measure(domain: audio.*), predict(domain: audio.*), generate(domain: audio), transform(source_format: audio.*, ...) |
| Multi-modal | 7 | Dedicated skill category for cross-modality tasks like image-to-text, text-to-image, visual question answering | detect(domain: multimodal.*), classify(domain: multimodal.*), measure(domain: multimodal.*), predict(domain: multimodal.*), generate(domain: multimodal.*), transform(source_format: <modality_A>, target_format: <modality_B>), search(scope: multimodal) |
Selected OASF skills and their Grounded Agency equivalents:
| OASF Skill | OASF Category | Grounded Agency Equivalent |
|---|---|---|
| Object Detection | Computer Vision [2] | detect with domain: image.object |
| Image Segmentation | Computer Vision [2] | detect with domain: image.segment + predict with domain: image.segmentation_mask |
| Image Classification | Computer Vision [2] | classify with domain: image.scene or domain: image.content |
| OCR | Computer Vision [2] | transform with source_format: image, target_format: text.ocr |
| Depth Estimation | Computer Vision [2] | predict with domain: image.depth |
| Image Generation | Computer Vision [2] | generate with domain: image |
| Audio Classification | Audio [3] | classify with domain: audio.genre or domain: audio.speaker |
| Speech Recognition | Audio [3] | transform with source_format: audio.speech, target_format: text.transcript |
| Text-to-Speech | Audio [3] | generate with domain: audio or transform with source_format: text, target_format: audio.speech |
| Image Captioning | Multi-modal [7] | transform with source_format: image, target_format: text.caption |
| Text-to-Image | Multi-modal [7] | generate with domain: image or transform with source_format: text.prompt, target_format: image |
| Visual QA | Multi-modal [7] | Workflow: detect(domain: image.*) -> ground -> generate(domain: text) |
| Image-to-3D | Multi-modal [7] | Workflow: detect(domain: image.*) -> transform -> generate(domain: 3d) |
These workflow patterns will be formally defined in the workflow catalog. See the catalog for currently available patterns.
-
Taxonomy vs. parameterization. OASF lists modality skills as separate entries in a flat catalog. Grounded Agency parameterizes the same atomic capabilities, reducing the number of concepts to learn while maintaining the same expressiveness.
-
Safety integration. OASF modality skills do not carry built-in safety properties. In Grounded Agency, every modality invocation inherits evidence anchors, confidence scores, and (where applicable) checkpoint requirements. An
image.objectdetection returns grounded bounding boxes and confidence just as atext.entitydetection returns grounded character spans and confidence. -
Evidence grounding. OASF does not define how to anchor evidence for non-text modalities. Grounded Agency defines modality-specific evidence anchor types (see Section 4) that provide verifiable references into the source data regardless of modality.
For more information on OASF:
- OASF Skill Categories: https://schema.oasf.outshift.com/skill_categories (as of OASF v0.8.0, January 2026)
- Full comparison: docs/research/analysis/OASF_comparison.md
Domain parameters follow a hierarchical dot notation:
<modality>.<specialization>
Examples:
text.entity-- named entity detection in textimage.object-- object detection in imagesaudio.speech-- speech detection in audiovideo.action-- action recognition in videomultimodal.alignment-- cross-modal alignment checking3d.mesh-- 3D mesh operations3d.point_cloud-- 3D point cloud operations
When no specialization is needed, the modality alone suffices:
image-- general image domain (e.g., forgenerate)audio-- general audio domaintext-- general text domain
- Use lowercase for all domain parameter values.
- Use dot notation for hierarchy (e.g.,
image.object, notimage-objectorimage/object). - Keep specializations to two levels maximum (e.g.,
audio.speechnotaudio.speech.en.formal). Use theoptionsfield for deeper configuration. - Use the capability's native parameters for non-domain concerns. For example, use
thresholdfor detection sensitivity, notdomain: image.object.high_sensitivity.
This appendix demonstrates a full workflow that uses domain parameters across multiple modalities.
# Standard version: 1.0.0
content_moderation:
goal: Analyze user-submitted content across text, image, and audio for policy violations.
risk: medium
steps:
# 1. Retrieve the submitted content
- capability: retrieve
purpose: Fetch the user submission containing text, images, and audio.
store_as: content_out
# 2. Analyze text content
- capability: classify
domain: text.toxicity
purpose: Classify text for toxic or harmful content.
store_as: text_moderation_out
input_bindings:
item: ${content_out.data.text}
taxonomy: ["safe", "mild", "moderate", "severe"]
parallel_group: modality_analysis
# 3. Analyze image content
- capability: classify
domain: image.content
purpose: Classify images for policy-violating content.
store_as: image_moderation_out
input_bindings:
item: ${content_out.data.images}
taxonomy: ["safe", "suggestive", "explicit", "violent"]
parallel_group: modality_analysis
# 4. Analyze audio content
- capability: detect
domain: audio.speech
purpose: Detect speech in audio for transcription and analysis.
store_as: audio_detection_out
input_bindings:
data: ${content_out.data.audio}
pattern: "human_speech"
parallel_group: modality_analysis
join: all_complete
# 5. Transcribe any detected speech
- capability: transform
purpose: Transcribe detected speech to text for policy review.
store_as: transcript_out
input_bindings:
input: ${audio_detection_out.matches}
source_format: "audio.speech"
target_format: "text.transcript"
# 6. Check cross-modal consistency
- capability: detect
domain: multimodal.inconsistency
purpose: Detect attempts to evade moderation via cross-modal tricks.
store_as: evasion_out
input_bindings:
data:
text: ${content_out.data.text}
images: ${content_out.data.images}
audio_transcript: ${transcript_out.output}
# 7. Integrate all moderation signals
- capability: integrate
purpose: Merge moderation results from all modalities.
store_as: integrated_out
input_bindings:
sources:
- ${text_moderation_out}
- ${image_moderation_out}
- ${evasion_out}
strategy: "most_restrictive"
conflict_resolution: "escalate"
# 8. Make final moderation decision
- capability: classify
domain: moderation.decision # domain here specializes the task, not the modality
purpose: Produce final moderation verdict from integrated signals.
store_as: verdict_out
input_bindings:
item: ${integrated_out.merged}
taxonomy: ["approve", "flag_for_review", "reject"]
# 9. Explain the decision
- capability: explain
purpose: Generate human-readable explanation of the moderation decision.
store_as: explanation_out
input_bindings:
conclusion: ${verdict_out}
audience: "content_moderator"
depth: "detailed"
# 10. Audit the decision
# Note: audit writes to the audit log (mutation: true in ontology) but does
# not require a checkpoint — the mutation is append-only and non-destructive.
- capability: audit
purpose: Record the moderation decision with full evidence trail.
store_as: audit_out
input_bindings:
event:
action: "content_moderation"
verdict: ${verdict_out.labels}
explanation: ${explanation_out.explanation}
context:
content_id: ${content_out.data.id}
all_signals: ${integrated_out}
success:
- All modalities analyzed
- Cross-modal evasion checked
- Moderation verdict produced with explanation
- Decision audited with full evidence trailFor the full capability ontology, see schemas/capability_ontology.yaml. For workflow composition patterns, see docs/WORKFLOW_PATTERNS.md. For the tutorial on building workflows, see docs/TUTORIAL.md.