Visca
Products/Agent Lifecycle Management

Cast

Data model as code.

The declarative primitive for your data model. Agents write it as source; humans edit it as a spreadsheet. Plan, apply, drift-detect.

What it is

The role Cast plays.

Cast is the declarative primitive of the estate. Describe what should exist — object types, fields, relations, views, workflows, roles, permissions, applications — in versioned source. Cast diffs against current state and reconciles safely, in dependency order. Two surfaces, one substrate: coding agents author Cast as source; humans edit the same state in a spreadsheet view — object types are sheets, fields are columns, records are rows, relations are typed cells. Both write to one truth.

The problem

What goes wrong without it.

Data models are defined imperatively, in pieces — object types in one console, fields in a UI, relations in a third tool, workflows in a fourth. Humans get a UI, agents get nothing, neither sees the same truth. State drifts the moment it runs. No review, no diff, no rollback, no single source for what should exist.

Capabilities

What Cast does.

Two surfaces, one model

What Cast looks like in code.

# What a coding agent sees — Cast source
# (mirrors sheets' ObjectMetadata, FieldMetadata, ViewEntity 1:1)

object "task" {
  label_singular   = "Task"
  label_plural     = "Tasks"
  icon             = "IconCheckbox"
  is_searchable    = true
  label_identifier = field.task.title
}

field "title" {
  object = object.task
  type   = "TEXT"
  label  = "Title"
  icon   = "IconNotes"
}

field "status" {
  object        = object.task
  type          = "SELECT"
  label         = "Status"
  default_value = "TODO"
  options = [
    { value = "TODO",        label = "To do",       color = "sky"    },
    { value = "IN_PROGRESS", label = "In progress", color = "purple" },
    { value = "DONE",        label = "Done",        color = "green"  },
  ]
}

field "assignee" {
  object = object.task
  type   = "RELATION"
  label  = "Assignee"
  icon   = "IconUserCircle"
  relation = {
    type          = "MANY_TO_ONE"
    target_object = object.organizationMember
    target_field  = "assignedTasks"
    on_delete     = "SET_NULL"
  }
}

view "byStatus" {
  object              = object.task
  type                = "KANBAN"
  name                = "By Status"
  main_group_by_field = field.task.status
}


# What a human sees — the same model, in a sheet

  │ title                    │ status        │ assignee │
  ───────────────────────────────────────────────────────
  │ Wire up Cast parser      │ IN_PROGRESS   │ @sasha   │
  │ Drift detector design    │ TODO          │ @rajan   │
  │ Bundle signer review     │ DONE          │ @priya   │

Open and commercial

Built in the open. Run anywhere.

Cast is delivered through two surfaces: an open-source reference in Lattice Runtime (MPL 2.0), and a managed, enterprise-grade delivery in Visca Cloud. Features in the open never move behind the paywall.

Open

Lattice Runtime — open foundation

MPL 2.0 · self-hostable · foundation-track governance

  • ·Cast language specification
  • ·Reference CLI
  • ·Local state backend (Postgres-backed)
  • ·Plan / diff / apply against local Lattice Runtime
  • ·Reference controllers for object, field, relation, view, workflow, role, application

Commercial

Visca Cloud — managed delivery

Hosted SaaS · self-managed · hybrid · air-gapped

  • ·Hosted state backend with row-level locking
  • ·RBAC on plans and applies
  • ·Drift remediation workflows
  • ·Audit-grade plan retention
  • ·Schema migration and versioning workflows
  • ·Premium standard schemas for regulated industries

ALM · same pillar

Cast works with

Across the platform

Composing with the other pillars.

The autonomy economy is shipping

Do autonomy right.

Build, run, and trust autonomous systems on an integrated platform — software, embodied, and hybrid. Open foundation. Enterprise cloud. No license rug-pulls, ever.