Platform
ScaiWave ScaiGrid ScaiCore ScaiBot ScaiDrive ScaiKey Models Tools & Services
Solutions
Organisations Developers Internet Service Providers Managed Service Providers AI-in-a-Box
Resources
Support Documentation Blog Downloads
Company
About Research Careers Investment Opportunities Contact
Log in

Syntax fundamentals

2.1 RULE: : for Types, = for Everything Else#

This is the single most important syntax rule. No exceptions.

scaicore
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// `:` ONLY appears in type positions:

type Invoice = {
    vendor: string,              // field type annotation
    amount: money,               // field type annotation
    items: array[LineItem]       // parameterized type
}

@flow process(invoice: Invoice): Result {   // parameter and return types
    ...
}

variable: ExplicitType = expression         // explicit variable type (optional)
scaicore
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// `=` for ALL value assignments and field settings:

@core InvoiceProcessor {
    version = "1.0"                          // core metadata
    description = "Processes invoices"       // core metadata
}

@flexible {
    goal = "analyze intent"                  // block field
    input = message                          // block field
    output = { intent: string }              // block field (note: `:` inside is a type)
}

@rigid {
    total = invoice.items.sum(i => i.amount) // variable assignment
    status = "processed"                     // variable assignment
}

@config {
    @param threshold: float = 0.7            // default value
}

2.2 RULE: Block Output via Assignment#

All blocks produce output through assignment. No -> arrows.

scaicore
1
2
3
4
5
6
7
8
9
// ✅ CORRECT — assignment capture
result = @flexible {
    goal = "analyze document"
    input = document
    output = { summary: string }
}

// ❌ WRONG — arrow capture (removed from language)
@flexible { ... } -> result

2.3 RULE: No any Type#

Everything must be explicitly typed. No escape hatches.

scaicore
1
2
3
4
5
// ✅ CORRECT
output = { data: map[string, string] }

// ❌ WRONG
output = { data: any }

Updated 2026-05-17 08:59:17 View source (.md) rev 1