Patterns
Noun-Based Patterns
CLI patterns for building systems with persistent state (CRM, ERP, CMS, databases)
Noun-Based CLI Patterns
Noun-based patterns are for building systems that manage entities with persistent state. Use these for CRM, ERP, CMS, databases, inventories, and other systems that store and manage data.
Pattern Structure
Domain: {service}.{mode}.{tld}
Semantic Triple: $.{Service}Service.provides.{Capability}
CLI Command: do service create {ServiceType} [options]
Core Concept
Noun-based patterns create service instances that provide capabilities for managing entities. The service persists state and supports CRUD operations across multiple entity types.
graph LR
Create[Create Service] --> Config[Configure Service]
Config --> Entities[Manage Entities]
Entities --> CRUD[CRUD Operations]
CRUD --> List[List Entities]
CRUD --> Get[Get Entity]
CRUD --> CreateE[Create Entity]
CRUD --> Update[Update Entity]
CRUD --> Delete[Delete Entity]
Entities --> Relations[Relationships]
Relations --> Link[Link Entities]
Relations --> Query[Query Related]
Relations --> Unlink[Unlink Entities]
CLI Commands
Create Service Instance
# Create a CRM service
do service create CRM --mode headless
# Create an ERP service with config
do service create ERP --mode headless --config '{"region": "us-east-1"}'
# Create a CMS with specific backend
do service create CMS --mode headless --backend payloadList Services
# List all service instances
do service list
# List specific service type
do service list CRM
# List with filters
do service list --mode headless --status activeGet Service Details
# Get service by ID
do service get crm-instance-123
# Get with full details
do service get crm-instance-123 --verbose
# Output as JSON
do service get crm-instance-123 --jsonUpdate Service
# Update service configuration
do service update crm-instance-123 --config '{"theme": "dark"}'
# Change service mode
do service update crm-instance-123 --mode studioDelete Service
# Delete service instance
do service delete crm-instance-123
# Force delete (skip confirmation)
do service delete crm-instance-123 --forceEntity Management
Once a service is created, manage entities within it:
Create Entities
# Create contact in CRM
do crm.entity create Contact '{"firstName": "John", "lastName": "Doe", "email": "[email protected]"}'
# Create deal in CRM
do crm.entity create Deal '{"name": "Acme Corp Deal", "value": 50000, "stage": "qualification"}'
# Create product in inventory
do inventory.entity create Product '{"sku": "LAPTOP-001", "name": "Laptop Pro", "quantity": 50}'Query Entities
# List all contacts
do crm.entity list Contact
# List with filters
do crm.entity list Contact --where '{"status": "active"}'
# List with pagination
do crm.entity list Contact --limit 50 --offset 100
# Complex query
do crm.entity query Contact --where '{"AND": [{"status": "active"}, {"createdAt": {"$gt": "2025-01-01"}}]}'Get Entity
# Get specific contact
do crm.entity get Contact contact-123
# Get with relationships
do crm.entity get Contact contact-123 --include deals,activities
# Output as JSON
do crm.entity get Contact contact-123 --json --prettyUpdate Entity
# Update contact
do crm.entity update Contact contact-123 '{"jobTitle": "CEO"}'
# Patch update (partial)
do crm.entity patch Contact contact-123 '{"status": "inactive"}'Delete Entity
# Delete contact
do crm.entity delete Contact contact-123
# Soft delete
do crm.entity delete Contact contact-123 --soft
# Hard delete (permanent)
do crm.entity delete Contact contact-123 --hardRelationship Management
# Create relationship between entities
do crm.relate Contact contact-123 worksFor Business business-456
# Query relationships
do crm.related Contact contact-123 deals
# Remove relationship
do crm.unrelate Contact contact-123 worksFor Business business-456Examples by Service Type
CRM (Customer Relationship Management)
# Create CRM service
do service create CRM --mode headless --name my-crm
# Add contacts
do crm.entity create Contact '{
"firstName": "Jane",
"lastName": "Smith",
"email": "[email protected]",
"company": "Acme Corp",
"jobTitle": "VP of Sales"
}'
# Create deal
do crm.entity create Deal '{
"name": "Enterprise License",
"value": 150000,
"stage": "proposal",
"probability": 60,
"closeDate": "2025-12-31"
}'
# Link contact to deal
do crm.relate Deal deal-789 contact Contact contact-123
# Query pipeline
do crm.entity query Deal --where '{"stage": "proposal"}' --sort value:desc
# Generate report
do crm.report pipeline --format json --output pipeline-2025-10.jsonERP (Enterprise Resource Planning)
# Create ERP service
do service create ERP --mode headless --industry manufacturing
# Add employee
do erp.entity create Employee '{
"employeeId": "EMP-001",
"firstName": "John",
"lastName": "Doe",
"department": "Engineering",
"salary": 120000,
"startDate": "2025-01-15"
}'
# Create purchase order
do erp.entity create PurchaseOrder '{
"poNumber": "PO-2025-001",
"vendor": "Supplier Co",
"items": [
{"sku": "PART-123", "quantity": 100, "unitPrice": 25.00}
],
"totalAmount": 2500,
"status": "pending"
}'
# Process payroll
do erp.process payroll --period 2025-10 --department all
# Generate financial report
do erp.report financials --year 2025 --quarter Q4CMS (Content Management System)
# Create CMS service
do service create CMS --mode headless --backend payload
# Create content type
do cms.schema create BlogPost '{
"fields": [
{"name": "title", "type": "text", "required": true},
{"name": "content", "type": "richText", "required": true},
{"name": "author", "type": "relationship", "relationTo": "authors"},
{"name": "publishedAt", "type": "date"}
]
}'
# Create blog post
do cms.entity create BlogPost '{
"title": "Introduction to Business-as-Code",
"content": "<p>Business-as-Code enables...</p>",
"author": "author-123",
"status": "draft"
}'
# Publish content
do cms.entity update BlogPost post-456 '{"status": "published", "publishedAt": "2025-10-25T10:00:00Z"}'
# Query published posts
do cms.entity query BlogPost --where '{"status": "published"}' --sort publishedAt:descInventory Management
# Create inventory service
do service create Inventory --mode headless
# Add product
do inventory.entity create Product '{
"sku": "LAPTOP-PRO-15",
"name": "Laptop Pro 15-inch",
"description": "High-performance laptop",
"category": "Electronics",
"quantity": 50,
"reorderPoint": 10,
"unitCost": 800,
"unitPrice": 1200
}'
# Record stock movement
do inventory.transaction create StockMovement '{
"productSku": "LAPTOP-PRO-15",
"type": "sale",
"quantity": -5,
"reference": "order-789",
"timestamp": "2025-10-25T14:30:00Z"
}'
# Check stock levels
do inventory.entity list Product --where '{"quantity": {"$lt": "reorderPoint"}}'
# Generate inventory report
do inventory.report stock --format csv --output inventory-2025-10.csvDatabase Management
# Create database service
do service create Database --backend neon --region us-east-1
# Create collection
do db.schema create users '{
"fields": [
{"name": "email", "type": "email", "unique": true},
{"name": "name", "type": "text"},
{"name": "role", "type": "select", "options": ["admin", "user", "guest"]}
]
}'
# Insert records
do db.entity create users '{
"email": "[email protected]",
"name": "Admin User",
"role": "admin"
}'
# Query with GraphDL
do db.query 'users { email, name, role } where { role = "admin" }'
# Create index
do db.index create users email
# Backup database
do db.backup create --name backup-2025-10-25 --compression gzipConfiguration Management
# Get service config
do service config get crm-instance-123
# Update config
do service config set crm-instance-123 theme dark
# Set multiple values
do service config update crm-instance-123 '{
"theme": "dark",
"language": "en",
"timezone": "America/New_York"
}'
# Export config
do service config export crm-instance-123 --output crm-config.json
# Import config
do service config import crm-instance-456 --input crm-config.jsonBulk Operations
# Bulk create entities from CSV
do crm.entity import Contact --file contacts.csv --format csv
# Bulk update
do crm.entity bulk-update Contact --where '{"status": "lead"}' --set '{"stage": "qualified"}'
# Bulk delete
do crm.entity bulk-delete Deal --where '{"status": "closed-lost", "closedAt": {"$lt": "2024-01-01"}}'
# Export entities
do crm.entity export Contact --format json --output contacts-backup.jsonWebhooks and Events
# Register webhook for entity changes
do crm.webhook create --entity Contact --event created --url https://api.example.com/webhooks/contact-created
# List webhooks
do crm.webhook list
# Test webhook
do crm.webhook test webhook-123 --sample-data '{"id": "test-contact"}'
# Delete webhook
do crm.webhook delete webhook-123SDK Equivalents
Every CLI command maps directly to SDK calls:
# CLI
do service create CRM --mode headless// SDK
const crm = await $.CRMService.create({ mode: 'headless' })# CLI
do crm.entity create Contact '{"name": "John Doe", "email": "[email protected]"}'// SDK
await crm.manages.Contacts({
name: 'John Doe',
email: '[email protected]',
})# CLI
do crm.entity query Contact --where '{"status": "active"}'// SDK
await crm.queries.Contacts({ where: { status: 'active' } })Use Cases
✅ Use Noun-Based Patterns When:
- Building a system with persistent state
- Managing multiple entity types (contacts, deals, products)
- Need CRUD operations across entities
- Require configuration and settings management
- Building relationships between entities
- Need audit trails and history
- Require multi-tenant architecture
❌ Don't Use When:
- Executing one-off actions → Use verb-based patterns
- Read-only transformations → Use view-based patterns
- Deploying autonomous agents → Use agent-based patterns
- Simple stateless operations → Use functions
Advanced Features
Migrations
# Create migration
do service migration create crm-instance-123 add-lead-score-field
# Run migrations
do service migration run crm-instance-123
# Rollback migration
do service migration rollback crm-instance-123
# List migrations
do service migration list crm-instance-123Backups and Restore
# Create backup
do service backup create crm-instance-123 --name daily-backup
# List backups
do service backup list crm-instance-123
# Restore from backup
do service restore crm-instance-123 --backup backup-20251025
# Schedule automated backups
do service backup schedule crm-instance-123 --frequency daily --time 02:00Access Control
# Create role
do service role create crm-instance-123 sales-rep '{
"permissions": ["read:contacts", "create:deals", "update:deals"]
}'
# Assign role to user
do service role assign crm-instance-123 sales-rep user-789
# List roles
do service role list crm-instance-123
# Check permissions
do service permission check crm-instance-123 user-789 update:contactsRelated Patterns
- Verb-Based Patterns - Execute actions on entities
- View-Based Patterns - Transform entity representations
- Agent-Based Patterns - Deploy autonomous entity managers