Channel Tagging System
Configure services for deployment channels (voice, text, async) with LLM preset validation.
Channel tags tell Concurrence how your service will be used: over voice, over text, or asynchronously. Those tags drive validation and pick LLM presets suited to each channel's latency and capability profile.
Overview
Different deployment channels have distinct requirements:
Voice channels need ultra-low latency and restrict which state types you can use.
Text channels support the full feature set at moderate latency.
Async channels (email, API) have relaxed latency requirements and the largest capability surface.
The channel tagging system helps you configure services appropriately and validates configurations before sync.
Channels
phone
voice
Telephony: PSTN (public switched telephone network) or VoIP (Voice over IP)
web_voice
voice
Browser WebRTC
mobile_voice
voice
Mobile app voice
sms
text
SMS messaging
whatsapp
text
web_chat
text
Web chat widget
mobile_chat
text
Mobile app chat
email
async
api
async
Direct API integration
Channel Profiles
Each channel type has a profile that defines its constraints.
Voice Channels
Max states: 5
Allowed state types: action, annotation, tool-call
Memory retrieval: disabled
Dynamic behaviors: not supported
Recommendation: configure
keytermsfor transcription accuracy
Text Channels
Max states: unlimited
Allowed state types: all
Memory retrieval: supported
Dynamic behaviors: supported
Async Channels
Max states: unlimited
Allowed state types: all
Memory retrieval: supported
Dynamic behaviors: supported
Maximum capabilities with relaxed latency requirements
Version Set Presets
Presets configure LLM models optimized for each channel type.
Standard
voice
text
async
Premium
voice_premium
text_premium
async_premium
Economy
voice_economy
text_economy
async_economy
Ultra-Low
voice_ultra_low
-
-
Ultra-Low Premium
voice_ultra_low_premium
-
-
Regional Availability
Some presets use LLMs that are not available in all regions. See LLM Regional Availability for the full availability matrix.
Ultra-Low Latency Presets
The voice_ultra_low and voice_ultra_low_premium presets require single-state context graphs.
Tag Format
Services support two tag formats in local JSON files.
Simple String Format (Recommended)
Object Format
Tags encode two things:
Channel (e.g.,
phone,web_chat): which deployment channel the service runs on.Preset (e.g.,
voice_premium,text): which LLM configuration to apply.
Service Environment Tags
Services can be tagged with dev or production to enforce different validation rules for version set pinning.
Environment Tag Options
dev
Development/sandbox services
No version pinning required. Can push directly to release.
production
Production services
Must have preview defined. release must match preview. All version sets must be pinned.
Adding Environment Tags
Add an environment tag alongside your channel tags:
Use "dev" instead of "production" for development or sandbox services.
Production Service Requirements
When a service is tagged production, the following rules are enforced during forge sync-to-remote:
Preview version set required: a
previewversion set must be defined.Release matches preview: the
releaseconfiguration must exactly matchpreview(agent version, context graph version, LLM preferences).Versions pinned: all version sets (except
edge) must have explicit pinned version numbers. Nolatest.
Example validation error:
Dev Service Flexibility
Services tagged dev have no version set restrictions:
Can use unpinned versions (
latest) in any version set.No
previewrequirement.Can push directly to
releasewithout going through a promotion workflow.
Validation
Services with channel tags are validated against channel constraints before every sync. Service tags determine which rules apply: LLM preferences must match the channel and cost expectations for those tags, presets must be compatible with their channels, and linked context graphs must fit the channel profile. Errors block sync. Warnings prompt for confirmation.
Validation Rules
Voice channel (phone, web_voice, mobile_voice)
Non-voice-optimized LLMs
ERROR
Voice preset (voice, voice_premium, etc.)
Non-voice-optimized LLMs
ERROR
Preset-channel mismatch
Voice presets only work with voice channels
ERROR
Regional availability
Preset LLMs must be available in the target region
ERROR
Economy preset (*_economy)
Premium-tier LLMs
ERROR
Premium preset (*_premium)
Only economy-tier LLMs
ERROR
Production environment
release LLM prefs != preview
ERROR
Channel constraints
Context graph checked against channel profile limits (see Dependency Validation below)
ERROR / WARNING
Voice service without keyterms
Transcription accuracy may suffer
WARNING
Empty llm_model_preferences (voice)
System defaults may not be voice-optimized
WARNING
No channel/preset tags
LLM preferences cannot be validated
WARNING
Voice-Optimized LLMs
Voice channels need a low Time-To-First-Token (TTFT) for real-time conversation, so only a subset of available LLMs meet the latency bar. Run forge channel llm-info --channel phone to see the current list of voice-optimized models.
Cost Tier Classifications
LLMs are classified into cost tiers for validation against preset expectations.
Economy
Lightweight, lowest-cost models optimized for speed
Standard
Balanced cost and capability
Premium
Highest capability models at the highest cost
Run forge channel llm-info to see the current model-to-tier mapping and pricing.
System Defaults vs Preset Defaults
Example Validation Output
Standalone Validation
Use forge validate to check services locally before syncing.
This catches issues early without making any changes to the remote.
Dependency Validation (--check-dependencies)
The --check-dependencies flag validates that a service's linked assets are compatible with its channel constraints. It's essential for voice services, which have strict latency requirements.
What gets validated:
Context graph state count of 5 or fewer
✓
Warning
No decision/reflection/recall states
✓
Error
No active memory retrieval
✓
Warning
No dynamic behaviors applied
✓
Error
Single-state for ultra-low presets
✓
Error
Example output:
Validation Flow
CLI Commands
Use forge channel commands to explore and validate configurations.
List Channels
Shows all supported channels with their profiles.
List Presets
Show Channel Profile
Displays constraints and recommendations for a specific channel.
Show Tags
Outputs the JSON tags to add to your service.
Validate Preset
Checks whether a preset is compatible with a channel, and optionally validates regional LLM availability.
Validate Context Graph
Validates context graph characteristics against channel constraints.
LLM Info
Shows the LLM catalog with voice-optimized recommendations.
Best Practices
Example: Configuring a Voice Service
Check channel constraints:
Get tags for your preset:
Add tags to your service in
local/<env>/entity_data/service/<service>.json:Validate locally (catches issues without touching remote):
Validate dependencies (makes sure the context graph is compatible):
Preview sync changes:
Apply changes:
Related Documentation
Version Sets & PromotionLast updated
Was this helpful?

