Capabilities

Define what actions visitors and agents can perform using simple string-based syntax.

Overview

Capabilities in Aexol are defined using either unquoted identifiers (single word) or quoted strings (multi-word). This flexible approach makes it easy to specify what actors can do in your system.

Syntax

// Unquoted capabilities (single word, camelCase recommended)
visitor {
    browse
    search
    viewDetails
}

// Quoted capabilities (multi-word or with spaces)
visitor {
    "browse products"
    "view product details"
    "add to cart"
}

// Mixed syntax (recommended)
visitor {
    browse                    // unquoted for single word
    search
    "view product details"    // quoted for multi-word
    "add to cart"
}

agent AgentName {
    processOrder
    validateItems
    "send confirmation email"
}
✨ Edit in Studio

For Visitors

Visitors use capabilities to define user journeys and available actions.

Basic Capabilities

visitor {
    browseProducts
    viewProductDetails
    searchCatalog
}
✨ Edit in Studio

Nested Capabilities

Capabilities can be nested to show hierarchical relationships:

visitor {
    login {
        logged_in {
            viewDashboard
            manageProfile
            logout
        }
    }
}
✨ Edit in Studio

State Transitions

Nested blocks represent state changes in user journeys:

visitor {
    browse {
        browsing {
            searchProducts
            filterResults
            viewDetails {
                viewing_product {
                    addToCart
                    readReviews
                }
            }
        }
    }
}
✨ Edit in Studio

For Agents

Agents use capabilities to define their autonomous actions.

Basic Agent Capabilities

agent OrderProcessor {
    fetchOrder
    validateItems
    processPayment
    sendConfirmation
}
✨ Edit in Studio

Agent with Role Inheritance

agent AdminAgent: AdminRole {
    manageUsers
    viewAnalytics
    configureSystem
}
✨ Edit in Studio

Capability Naming Best Practices

Use Clear, Descriptive Actions

Good:

  • browseProductCatalog or "browse product catalog"
  • submitOrderForProcessing or "submit order for processing"
  • updateUserProfile or "update user profile"

Avoid:

  • doThing
  • action1
  • x

Use Verb-First Naming

Start capabilities with action verbs:

visitor {
    viewProducts           // verb: view
    addToCart              // verb: add
    completeCheckout       // verb: complete
    trackOrder             // verb: track
}
✨ Edit in Studio

Group Related Actions

visitor {
    # Shopping actions
    browseProducts
    searchCatalog
    viewProductDetails
    
    # Cart actions
    addToCart
    updateCart
    removeFromCart
    
    # Checkout actions
    startCheckout
    enterPayment
    confirmOrder
}
✨ Edit in Studio

Real-World Examples

E-Commerce Platform

visitor {
    viewLandingPage
    browseProducts
    searchCatalog
    viewProductDetails
    
    register {
        registering {
            fillRegistrationForm
            verifyEmail
        }
    }
    
    login {
        logged_in {
            addToCart
            viewCart
            checkout {
                checking_out {
                    enterShippingInfo
                    selectPaymentMethod
                    applyCoupon
                    placeOrder
                }
            }
            
            viewOrders
            trackShipments
            manageProfile
            logout
        }
    }
}
✨ Edit in Studio

Content Management System

visitor {
    readArticles
    browseCategories
    searchContent
    
    login {
        logged_in {
            createArticle {
                editing {
                    writeContent
                    addImages
                    preview
                    publish
                }
            }
            
            manageArticles
            viewAnalytics
        }
    }
}

agent ContentModerator {
    reviewSubmittedContent
    approveContent
    rejectViolations
    notifyAuthors
}
✨ Edit in Studio

SaaS Application

visitor {
    viewLandingPage
    exploreFeatures
    viewPricing
    
    signup {
        onboarding {
            choosePlan
            createAccount
            completeSetup
        }
    }
    
    login {
        authenticated {
            accessDashboard
            useCoreFeatures
            manageSettings
            viewUsageStats
            upgradePlan
            logout
        }
    }
}
✨ Edit in Studio

Integration with Other Constructs

With Roles

Roles define permissions, while capabilities define actions:

role EditorRole {
    permission articles {
        create,
        read,
        update
    }
}

visitor {
    login {
        logged_in {
            createArticle    // Uses EditorRole permissions
            editArticle
            viewArticles
        }
    }
}
✨ Edit in Studio

With Workflows

Capabilities can map to workflow state transitions:

workflow ArticleFlow {
    state draft -> review
    state review -> published, draft
    state published -> archived
}

visitor {
    login {
        logged_in {
            createDraft          // -> draft state
            submitForReview      // draft -> review
            publishArticle       // review -> published
            archiveArticle       // published -> archived
        }
    }
}
✨ Edit in Studio

Summary

  • Use unquoted identifiers for single-word capabilities (e.g., browse, login)
  • Use quoted strings for multi-word capabilities (e.g., "add to cart")
  • Nest capabilities for hierarchical structures
  • Use named blocks for state transitions
  • Start with action verbs for clarity
  • Group related actions together

Related Keywords

  • visitor - Define visitor capabilities
  • agent - Define agent capabilities
  • workflow - Model state transitions
  • role - Define permissions

Next Steps