Skip to main content

The deterministic value set

These are the values every Sense program can use with zero AI involvement and zero network access — the deterministic core is a complete, ordinary programming language on its own. See Non-Goals for why that’s a deliberate design commitment, not an implementation detail.

Values that extend the model

As you move into Sense’s AI-native and safety features, a few more value kinds appear — each documented in depth on its own page:

Model

A runtime reasoning resource — never a raw API handle.

Answer

The result of ask(...): a value, a confidence, and a source — never silently just “a string.”

Agent

A runtime entity with identity, persistent state, and a lifecycle.

Action

A prepared-but-not-yet-executed world-changing operation.

Truthiness

nil, false, 0, 0.0, "", and [] are falsy. Everything else — including any non-empty string or array — is truthy:

Operators

+ - * / % — standard precedence. / is always true (float) division; there’s no separate integer-division operator yet.

Type annotations are a runtime check, not static inference

Annotations are checked with values.matches_type() at the point of assignment, call, and return — a shallow, honest runtime check, not a real type system. Array<T> checks element types recursively; Any accepts anything; an unrecognized type name is currently unenforced.
Real static type checking — including how the type system should represent Answer<T>’s reliability — is an open research question in Sense’s design log, deliberately deferred rather than bolted on twice. See Roadmap.

Continue

Variables & scope

The one assignment rule, and how local gives you intentional shadowing.

Functions

def/-> — the one concept shaped just like Python’s own.