Model
a handle on an LLM
Internally, a Cortex.
A connection to a specific Model — Claude, OpenAI, or one of the Vertex variants — behind a uniform call. The rest of Luma doesn't hold a vendor SDK; switching provider is configuration.
Runway for intelligence.
A Resource wants describing — for search, for tagging, for accessibility. A Review's feedback wants summarising before sign-off. A Brief wants turning into a draft Plan. A derivative wants checking against its source. A vendor's PDF wants its line items pulled into an Order.
Without a shared abstraction, each one arrives in its own shape — its own provider config, its own auth handling, its own way of giving the Model access to data, its own audit trail. Each new feature, another patch of glue.
Catwalk is somewhere for that to live once instead of many times: Models, prompts, Runs, and a controlled view of the data.
The rest of Catwalk is built from them. They are Domain entities — tagged, ACL'd, portable.
a handle on an LLM
Internally, a Cortex.
A connection to a specific Model — Claude, OpenAI, or one of the Vertex variants — behind a uniform call. The rest of Luma doesn't hold a vendor SDK; switching provider is configuration.
a piece of intelligence
(Skill, of a Guild)
A named, versioned procedure. A custom prompt, a chosen Guild, and a list of which Models it can run on. Authoring a Skill is configuration; the Guild underneath determines what the Model is given to do.
one trip down the runway
Internally, a Sashay.
One execution of a Skill against one Model. A persistent record — durable, observable, restartable. The thing that gets queued, scheduled, and reaped if it stalls.
The Guild is the type. It decides what kind of work the Skill performs: what slice of Luma the Model sees, what inputs the Skill takes at start time, and the controller code that drives the LLM loop. A Guild is a small Java class — on the order of a hundred lines — declaring its slots, its inputs, and the body of its loop. Adding a new Guild is engineering work; configuring a Skill on top of an existing Guild is not.
A Skill is the configured part authored on top of a Guild: a name, a prompt, the Models it can run on, the tags and tunings that distinguish it. One Guild can host many Skills — each a different prompt, a different scope, a different audience.
Every invocation lives as a row from the moment it's queued. It carries state, a short status, progress from zero to one, an iteration index when applicable, an append-only log, and links to the entities it consumed or produced. A week later, the row still tells you what it touched and what it said.
The harder part of LLM work isn't the Model. It is giving the Model access to data — scoped to what the task needs, governed by the same access controls the calling user has.
Catwalk does this through MCP, the protocol the current generation of Models speak. The unit of access is a slot.
A slot is a named handle on a slice of Luma — a single record, a set of records, or a parameterised query, over one Domain entity type. Each Guild declares its slots when a Run starts, drawing on the Skill's configuration and the Run's per-call inputs to bind concrete data into each one. Together with a policy (read-only by default; mutation an explicit, audited opt-in), that bag is the Model's view of Luma for the duration of the Run.
Whatever sits inside a Skill's declared slots is presented to the Model as a small set of tools — listed, described, paginated, projected. The Model talks to a typed surface, projected through the same field rules a Luma client uses.
A small family of vision tools layers on top — eight Gemini operations, exposed over Luma's storage layer. A Skill that wants to look at an image, a video, or a PDF asks for it by reference; the rest is plumbed.
When a stored object lives in GCS, the vision Model pulls it directly using its own credentials — no signing, no egress. When it doesn't, a short-lived signed URL is minted on demand. Skills that don't need vision don't see the tools; installations without Vertex configured don't expose them at all.
Catwalk leans on Luma DOM — com.intrepia.luma.dom, the package that gives Luma a clean, navigable object graph over its persistent state. Assets, Projects, Folders, Plans, Orders, Accounts, Workflows, Reviews — each is a Luma DOM class wrapping a row, with lazy accessors that hydrate parents, references, and related entities on demand from a shared Context. Server-side scripts and JSP-driven notification templates already use Luma DOM to read Luma data without hand-rolling SQL or chasing IDs.
Building Catwalk's bridge on Luma DOM is the point, not an accident. An LLM working through MCP behaves the way a Luma DOM consumer already does: ask for a record, follow a reference, page through a collection, ask for more. Luma DOM's lazy hydration through a shared Context is exactly that pattern; the bridge exposes it over the wire. A Skill's slots hold Luma DOM objects, and the Model's reads run through the same accessors, the same caching, and the same access-control hooks a workflow script would. New entities reachable through Luma DOM become reachable through the bridge without a separate schema layer.
management state:
File — deployment-owned, read-only via the API.
Local — runtime-owned, authored through the UI or API.
External — owned by another system, synced from outside.
signature + uuid or uri), never as raw database IDs. The same envelope round-trips between installations.
Queue table other long-running work in Luma uses, and a worker drains them with the same agent-loop pattern. No new scheduler, no new pool.
Catwalk is the foundation. The shape is fixed; the plumbing is in place. What's reachable today and what would still take work are worth being plain about.
Two Guilds ship. One operates on a collection of Resource Assets, iterating per item with a bounded context. One operates within the scope of a single Project Asset. New Skills can be authored on either — prompt, Model bindings, tag scopes — without touching code.
Folders, Plans, Orders, reviews, briefs, structured documents — entities not covered by the shipped Guilds. Reaching them means writing a new Guild: a small Java class declaring its slots and its loop. Self-contained engineering work, but engineering work.
The Vertex vision tool family is in the box. A Guild that opts in gets the eight operations over Storables. The shipped Guilds opt in; new vision-driven Skills on those Guilds are a prompt edit away.
The current shape handles single-prompt loops with optional per-item iteration. Branching pipelines, persistent state across steps, streaming output — those want a richer Skill shape and a custom controller layered on top of what's here. The hooks are reserved; the controller isn't built yet.
The idea is not that Catwalk solves every AI problem in Luma today. It is that Luma now has a place to put the answers as they arrive.
The foundation is in place.