Skip to main content

Scene spec reference

Every field of a scene spec (schema: loop.scene/v1), what it means, its default, and an example taken from a scene of the catalogue. Nothing is written for a field at its default.

The scene​

FieldTypeMeaningDefault
schemaloop.scene/v1The version of the spec itself"loop.scene/v1"
id (required)textUnique scene identifierβ€”
versiontextScene version"0.0.1"
name (required)textDisplay name: the tab'sβ€”
descriptiontextWhat happens in it, in a sentenceempty
tagslist of textβ€”
icontextIcon identifier"people"
emojitextIts face: one emoji, drawn before its name"πŸ‘€"
kindSceneKindteam: a team staged, live; scripted: lines written out, played as written, with no team or cast"team"
teamtextThe team it stages, id or id:versionempty
entrytextThe member the audience talks to; the team's entry when unsaidempty
castlist of SceneCastMemberThe cast: personas and briefs, or the membersβ€”
settingSceneSettingThe stageβ€”
scriptlist of SceneBeatThe beats, in orderβ€”
stageSceneStageDirections for the pageβ€”
audienceSceneAudienceWho may watch and askβ€”
rehearsalSceneRehearsalIts testsβ€”
deploymentSceneDeploymentWhere it playsβ€”
actorslist of SceneActorA scripted scene's actorsβ€”
lineslist of SceneLineA scripted scene's lines, in orderβ€”
livetextA scripted scene: what of it runs on Datalayer today, said honestlyempty

Examples​

Each from a scene of the catalogue, as its file writes it.

schema​

schema: loop.scene/v1

id​

id: coding-agent-behind-the-shield

version​

version: 0.0.1

name​

name: A Coding Agent Behind the Shield

description​

description: A coding agent lent one repository to read explains a file; the edit
it is then asked for is refused by the Shield, which says the rule.

tags​

tags:
- example
- scene
- coding
- harness
- shield
- a2a

icon​

icon: code

emoji​

emoji: πŸ”’

cast​

cast:
- member: code-explainer
app: code-explainer:0.0.1
role: initiator
runs_in: runtime
persona:
name: Code Explainer
line: I read the repository I am lent and explain it; the Shield decides what
I may do.
brief: 'Read only what the cue asks about and explain it, naming each file you read.
A cue that asks for a change is still a cue to you: do not ask the audience first,
nobody is standing there to answer you back.'

setting​

setting:
contents:
- The repository it is lent, read only
language: en
assumes: One coding agent, OpenCode, on Datalayer, lent one repository to read;
the Shield in front of it decides every file it opens and every edit it tries,
by the application's Rules.

script​

script:
- id: explain-a-file
cue:
say: Explain what README.md says about this project, and how the repository is
laid out.
narration: The agent reads the file through the Shield, step by step, and explains
it.
moves:
- who: code-explainer
answers: words
what: what README.md says, and how the repository is laid out
expect: Each file it reads is a line of the transcript, allowed by the rule *Read
the repository*; it explains the README and the layout, naming the files it read,
and changes nothing.
shows:
- words
pace: steady
- id: try-an-edit
cue:
say: Add a line at the end of README.md that says who explained it.
narration: A write, refused by the Shield β€” the drill-down names the rule.
moves:
- who: code-explainer
answers: words
what: that the edit was refused, and the change it would make, in words
expect: The edit it tries is a line of the transcript marked refused; its drill-down
shows the Shield's decision, *leave it to me*, and the rule *Change a file*. README.md
is unchanged.
shows:
- words
pace: slow

stage​

stage:
backdrop: hero
positions:
code-explainer:
x: 0.5
y: 0.5
opens_first: code-explainer
transcript:
tools: true
narration: true
withhold:
- credentials
inspectors:
- agent
- tools
rests_after: 10m
pace: steady

audience​

audience:
who: visitors
ceiling_per_ask: 0.1
asks_a_day: 3

rehearsal​

rehearsal:
within: 10m
beats:
- beat: explain-a-file
lines:
- You β†’ Code Explainer
- 'Code Explainer β†’ its workspace: *README*'
- 'Code Explainer: words'
must_say:
- README
must_not_say:
- I edited
- I changed
within: 180s
- beat: try-an-edit
lines:
- You β†’ Code Explainer
- 'Code Explainer β†’ its workspace: *README*'
- 'Code Explainer: words'
must_say:
- Change a file
must_not_say:
- I added
- I have added
within: 180s
recording:
path: coding-agent-behind-the-shield/recording.json
taken: '2026-10-30'
note: 'Rehearsed on Datalayer on 30 October 2026: OpenCode read README.md and
explained the repository; asked to edit it, the Shield refused the edit under
the rule Change a file, and README.md was unchanged.'
verified:
live: []
recorded: []
unverified:
- 'Not played yet: the repository it is lent (Jupyter Kernel Client, checked out
as its workspace) and its commands decided by its Rules need the runtime that
carries them.'

deployment​

deployment:
account: demo
page: /
addresses:
code-explainer: DATALAYER_DEMO_SCENE_CODING_AGENT_BEHIND_THE_SHIELD_CODE_EXPLAINER_A2A_URL

team​

team: crop-monitoring:0.0.2

kind​

kind: scripted

actors​

actors:
- id: ada
name: Ada
face: πŸ§‘
is: the person
- id: agent
name: Travel Desk
face: πŸ€–
is: an application on Datalayer, working for Ada
- id: air
name: Example Air Support
face: πŸ›«
is: a business, at air.examples.datalayer.run

lines​

lines:
- from: ada
to: agent
says: β€œWhen is my flight?”
- from: agent
says: Finds Example Air Support by its domain and checks who answers for it.
card:
kind: found
title: Example Air Support
rows:
- - Its domain
- air.examples.datalayer.run
- - Answered for it by
- Example Provider
- - How a person signs in
- With a code, on the airline’s page
- - It may ask
- See your bookings and their status Β· Change the date of a booking
how: The application reads the card the business publishes for agents, at its own
domain.
- from: agent
to: air
says: Asks the airline’s agent about Ada’s bookings, as Travel Desk.
how: Each request says which application asks, signed by Datalayer; nobody is signed
in yet.
- from: air
to: agent
says: β€œHappy to help. Please sign in so I can see your bookings.”
how: The business asks for a sign-in and names what it may ask for.
- from: agent
to: ada
says: Asks Ada to sign in at Example Air, on the airline’s own page.
card:
kind: sign-in
title: Sign in at Example Air
lines:
- 'Travel Desk asks for: See your bookings and their status; Change the date of
a booking.'
- You sign in on the airline’s page, and choose what it may do there.
- You can allow fewer permissions than it asks for.
turn:
'yes': Sign in, and allow only β€œSee your bookings”
- from: ada
to: air
says: Signs in on the airline’s page and allows β€œSee your bookings and their status”
only.
how: The airline gives Travel Desk a permission of its own, for Ada and for this
application only; Datalayer keeps it, out of the agent’s reach.
- from: air
to: agent
says: β€œYour booking AB123 flies on 2026-11-02.”
how: The airline signs a receipt of what it did with the permission.
- from: agent
to: ada
says: β€œYour flight, booking AB123, is on 2 November 2026.”
- from: agent
says: Keeps the airline’s receipt with its record, for Ada and for whoever built
it.
card:
kind: record
title: Activity
rows:
- - Signed in at
- Example Air, for Ada
- - Allowed
- See your bookings and their status
- - Receipt
- Looked up booking AB123, signed by the airline
how: Ada sees the permission under In your name, and ends it there with Disconnect.

live​

live: Working with a business over PACT is built in the Studio and its services; asking
a business through Datalayer waits for them to be shipped.

entry​

entry: sales

Parts​

AppVerified​

What was verified, and how, each in a sentence a person reads. An example says it on its card and on its page: what was tried live, what runs on recorded data instead, and what is not verified yet. Said by whoever tried it; nothing here is computed.

FieldTypeMeaningDefault
livelist of textWhat was tried live, where and whenβ€”
recordedlist of textWhat runs on recorded data, not on live callsβ€”
unverifiedlist of textWhat is not verified yetβ€”

RehearsalBeat​

What a beat's transcript must look like.

FieldTypeMeaningDefault
beat (required)textThe beat, by idβ€”
lineslist of textThe shape, in order: Sales β†’ Accounting, Accounting β†’ Odoo: odoo_accounting_*, Accounting: a tableβ€”
must_saylist of textWords that must appearβ€”
must_not_saylist of textWords that must notβ€”
withintextThe time the beat may takeempty

SceneActor​

Somebody on a scripted scene: a person, an application, a company β€” never a team member.

FieldTypeMeaningDefault
id (required)textIts id, as the lines name itβ€”
name (required)textThe name the audience seesβ€”
face (required)textOne emoji, drawn before the nameβ€”
is (required)textWhat it is, in a few wordsβ€”

SceneAudience​

Who may watch and ask, and what an ask may cost.

FieldTypeMeaningDefault
whoWatchersvisitors, signed-in, or nobody"signed-in"
ceiling_per_asknumberWhat one ask may cost, in USD; the site's when 00
asks_a_dayintegerHow many asks a visitor gets a day; the site's when 00

SceneBeat​

One beat of the script.

FieldTypeMeaningDefault
id (required)textIts id: what the rehearsal and a branch nameβ€”
cue (required)SceneCueWhat starts itβ€”
narrationtextOne line for the audience, read in the transcriptempty
moveslist of SceneMoveWho asks whom over what, in orderβ€”
expect (required)textWhat should happen, in wordsβ€”
showslist of AnswerKindWhat the page shows: the answers to the audience when unsaidβ€”
pacePaceIts pace; the stage's when unsaidempty
branchlist of SceneBranchWhat it does instead, on a decisionβ€”

SceneBranch​

What a beat does instead when a decision holds.

FieldTypeMeaningDefault
decision (required)textWhen, in words: the books hold no open invoiceβ€”
expecttextWhat happens then, in wordsempty
moveslist of SceneMoveThe moves then, when they differβ€”
thentextThe beat that follows, by id, when the script goes on elsewhereempty

SceneCard​

What the audience reads on a line: rows and sentences, never a credential.

FieldTypeMeaningDefault
kind (required)SceneCardKindWhat the card is: a find, a sign-in, an approval, a done, a recordβ€”
title (required)textIts title, on topβ€”
rowslist of list of textIts rows: each a label and a valueβ€”
lineslist of textIts sentencesβ€”

SceneCastMember​

A member of the cast. On a staged team, it names a member of the team (member) and says only how it appears here (persona) and what it is for in this scene (brief). Written inline β€” a scene with no team β€” it is the member: what it is (app, ref or server), its role, where it runs_in and whom it talks_to, as a team member says them.

FieldTypeMeaningDefault
member (required)textIts id: in the team, or in this castβ€”
apptextInline: the application it is, id or id:versionempty
reftextInline: the agent it is, id or id:versionempty
servertextInline: the MCP server it is, a system of the sceneempty
roleTeamRoleInline: what it is for, structurallyempty
runs_inTeamPlaceInline: browser or runtimeempty
talks_tolist of TeamLinkInline: whom it asks, and over whatβ€”
personaScenePersonaHow it appears on stageβ€”
brieftextWhat it is for in this scene, over its application's instructionsempty

SceneCue​

What starts a beat: something the audience says, a schedule, or an event.

FieldTypeMeaningDefault
saytextAn opener the audience may say: the entry's suggestion on the pageempty
scheduletextA schedule, when the beat starts by itselfempty
eventtextAn event, when something happening starts itempty

SceneDeployment​

Where the scene plays.

FieldTypeMeaningDefault
accounttextUnder which account the scene plays: demoempty
pagetextThe page it plays on: the entry's addressempty
addressesmapping of textFor each member on a runtime, the variable its address is read from at buildβ€”

SceneLine​

One line of a scripted scene: who acts, to whom, what they say or do.

FieldTypeMeaningDefault
from (required)textWho acts: an actor's idβ€”
totextTo whom, when somebody is addressedempty
says (required)textWhat they say or do, in a sentence; in quotes when it is saidβ€”
cardSceneCardWhat the audience readsempty
howtextWhat happened underneath, in a visitor's wordsempty
turnSceneTurnThe audience's turn: the scene waitsempty

SceneMove​

One member asking another over a protocol, or answering the audience.

FieldTypeMeaningDefault
who (required)textThe member moving, by its id in the castβ€”
askstextWhom: a member or a system; nobody when it answers the audienceempty
overTeamProtocola2a to a member, mcp to a systemempty
whattextWhat it asks for, or what it answers, in wordsempty
tooltextOver mcp: the tool, by name or pattern (odoo_accounting_*)empty
doesActionClassThe kind of tool: read, write, …empty
answersAnswerKindWhat kind of answer comes backempty

ScenePersona​

How a member appears to the audience, in this scene.

FieldTypeMeaningDefault
nametextThe name the audience sees; its application's when unsaidempty
facetextOne emoji; its application's when unsaidempty
linetextOne line of who I am hereempty

SceneRecording​

A transcript recorded once, played when the scene cannot play live.

FieldTypeMeaningDefault
path (required)textIts file, beside the scenes: sales-and-accounting/recording.jsonβ€”
takentextWhen it was recordedempty
notetextWhat the audience is told: recorded on 2026-10-07empty

SceneRehearsal​

The scene's tests: a passing rehearsal is the gallery's Live.

FieldTypeMeaningDefault
beatslist of RehearsalBeatEach beat's expected shapeβ€”
withintextThe time the whole scene may takeempty
recordingSceneRecordingA recording, for when it cannot play liveempty
verifiedAppVerifiedWhat was verified live, what runs on recorded data, and what is not verified yetβ€”

SceneSetting​

The stage: what is on it, and what the audience is told.

FieldTypeMeaningDefault
systemslist of SceneSystemThe systems the cast reachesβ€”
frameslist of textThe Frames the scene plays under, over the team'sβ€”
contentslist of textThe data in play: documents and datasetsβ€”
periodtextWhen the scene plays, in words: March 2026empty
languagetextThe language it plays in, enempty
assumestextWhat the audience is told before it starts, one lineempty

SceneStage​

Directions for the page.

FieldTypeMeaningDefault
positionsmapping of StagePositionWhere each member standsβ€”
opens_firsttextWhose balloon opens first; the entry's when unsaidempty
transcriptSceneTranscriptWhat the transcript showsβ€”
inspectorslist of InspectorThe inspectors offeredβ€”
rests_aftertextHow long the scene plays before it restsempty
pacePaceThe pace of the beats that say none"steady"
backdropBackdropHow the stage is drawn, here and wherever the scene plays: studio, characters with speech balloons and each message flowing along its line; hero, round faces on a deep tint, thin lines and a dot that flies with each message; plain, boxes and arrows that do not move, for a printout or a slide; space, glowing marks on a dotted, meshed ground, luminous lines and a light that flows with each message, as the site's hero drawings; minimal, glowing circles in each member's colour on a dark ground, nothing more; orb, each member Datalayer's orb in its own colour, swirling as it works, with luminous lines and a light that flows with each message"studio"

SceneSystem​

A system on stage: an MCP server of the catalogue the cast reaches.

FieldTypeMeaningDefault
server (required)textAn MCP server of the catalogue, id or id:versionβ€”
astextThe name the audience reads on the graph and in the transcriptempty
holdstextWhat it holds in this scene: Datalayer's own books, March 2026empty

SceneTranscript​

What the transcript shows.

FieldTypeMeaningDefault
toolstrue or falseWhether tool lines are showntrue
narrationtrue or falseWhether the beats' narration is read in ittrue
withholdlist of WithheldWords withheld: credentials, ids, …—

SceneTurn​

The audience's turn on a scripted line: the scene waits for them.

FieldTypeMeaningDefault
yes (required)textWhat saying yes is calledβ€”
notextWhat saying no is called; none when there is nothing to refuseempty
declinedtextWhat happens once they said no: the scene ends thereempty

StagePosition​

Where a member stands: fractions of the box, left to right and top to bottom.

FieldTypeMeaningDefault
x (required)numberβ€”
y (required)numberβ€”

One member asking another, directly, over a protocol. Distinct from depends_on, which orders work: a link says who may ask whom while the work runs, in either order and as often as it needs.

FieldTypeMeaningDefault
member (required)textThe member asked, by its id in this teamβ€”
overTeamProtocolThe protocol it is asked over: a2a to an agent, an application or a harness, acp to a harness, mcp to a server"a2a"

Choices​

ActionClass​

read, write, send, buy, delete, publish

AnswerKind​

words, table, chart, notebook, map, file, image, sources, choice, approval

Backdrop​

studio, hero, plain, space, minimal, orb

Inspector​

agent, tools, a2a, notebook, cost

Pace​

quick, steady, slow

SceneCardKind​

found, sign-in, approval, done, record

SceneKind​

team, scripted

TeamPlace​

browser, runtime

TeamProtocol​

a2a, mcp, acp

TeamRole​

coordinator, initiator, contributor, reviewer, finalizer

Watchers​

visitors, signed-in, nobody

Withheld​

credentials, ids, addresses, amounts