このページは、エージェントが読む skill「livlive」の本文です。
livlive-core first for the contract (the 構成表 shape, the words, the boundary).
Which work, which skill
Find the work, then open its skill (skills/<name>/SKILL.md). Each work skill says what to read (the craft skills it uses), the instruction,
the procedure, the shape to return and the checks. The staff and their titles are listed in livlive-core.
Talking with the person and running the room (mone) is not published as a work skill: this entry skill carries its procedure.
Designing the character’s body (katachi) is out of scope. The stage (hako): the stage page’s documents; stages and games are made on your own PC (the CLI / MCP) and the browser only registers and checks them — a stage is checked against the engine reference (
reference/engine.json, also the MCP resource livlive://reference/engine) and handed in with livlive stage push. A person who wants a stage or a game made: read stage-lead first — it leads them and hands the build to stage-package. To build or change a stage package: read stage-package first.
A craft skill names its staff in its frontmatter (staff: [ids]). Skills with reading: always are read at the start of the work;
reading: needed skills are opened when their description fits.
The preparation road (from outside)
How the creator’s own agent prepares a first content in a new room. You think and write; livlive keeps and checks. Nothing on this road is paid (each op leaves a work record with runneroutside and 0 credits). Run the ops with livlive-cli; each step names the op and its
input.
room.openwith{"title":"<the room's name>"}— answersdata.project. (When the person gives a project id, start at step 2.)room.read(--project <id>) — readdata.choices(the ids you may pick:cast [{id,name}],forms [{id,label}],channels [{id,label}]),data.carries,data.currentanddata.structure(both null while the room has no content).desk.pickwith{"cast":["<choices.cast id>", …], "channels":["<choices.channels id>"]}(the lead first, at most 4). Thenroom.readagain:choices.formsnow lists the forms that fit that cast and channel.desk.pickwith{"form":"<choices.forms id>"}, or"planned"when no form fits (you then decide the form yourself in step 7).request.writewith{"memo":"<the 要望, in Markdown>", "proposals":[]}— the 要望 comes first: what the person wants, in their words, under##headings of your choosing (概要 ・ 対象 ・ 目的 ・ 雰囲気 ・ 要件 as a guide, not a form).script.firstwaits for it (request). With no person to answer, write it with noproposals: it is answered at once. A proposal ({"heading":"<a ## heading of the memo>", "others":["…"]}, up to three other words) waits for the person’s answer in the room before the first version is kept. Write it again to add to it; a section the person settled stays as it is —room.read’sdata.requestshows the 要望 as it stands (settled,open).request.editchanges one thing when the person asks —{"take":"<heading>"},{"section":"<heading>","words":"…"},{"memo":"…"},{"bring":"<asset id>"}(a 参考資料) or{"drop":"<asset id>"}.- Bring what you found and wrote:
research.bringwith{"title", "purpose", "claims":[{"text", "source":"https://…", "confidence":"true"|"unverified"}]}— at most 12 facts, each with an http(s) source;"true"only for a fact you checked at its source. Answersmade.research.asset.bringwith{"kind":"text"|"markdown", "title", "text", "use":"intro"|"setting"|"memo"|"quote"}— answersmade.asset. When you wrote it from the room’s own material, add"from":["<id>", …](at most 6): amade.researchabove, a 構成表 version, or a 素材 of the room. The room keeps what it was made from; an id it does not hold refuses the bring, naming it.
pitch.putwith{"title", "doc":"<the 企画書, in Markdown>", "answers":[{"to":"<a 要望 heading or a 参考資料 id>","section":"<the doc's heading that answers it>","how":"<a few words>"}], "research":["<made.research>", …]}— the 企画書 comes after the 要望 and before the first version (script.firstwaits for it:pitch). Write it asdon-room-pitchsays (why the show, what it is, what is worth watching, for whom, roughly how it runs, what to watch for; facts only from what you brought); each##heading once. It is free; nothing is written for you.room.read’sdata.pitchshows it as it stands —currentfalse while it waits to be rewritten (stale,changes: the 要望 or the 形 moved); put it again after such a change.- Write the 構成表 with your own model: open
tsuzuri-plan(its 指示 says what to decide; its 検査 what is checked) and the 構成表 section oflivlive-core(the shape). On this road:meta.titleandmeta.castcome fromscript.first’stitleandcast(step 9): leave them out or write the same — a different one is refused (meta).meta.topicshort.- Each stretch’s
goalsays what is done when it is met (200 characters at most, 30 for atitle, 20 stretches at most). refstake the full ids from step 5 (made.research,made.asset) — the stretch’s performer reads them; the short[key]s intsuzuri-plan’s 指示 are the inside writer’s.- Put a brought document on
shelf.docsas{"id":"<made.asset>","label":"<its title>"}; setlengthas{"minutes":N}. - Facts only from what you brought (step 5) — the same rule as
tsuzuri-plan’s 事実の出どころ.
script.checkwith{"structure": <the 構成表>}—okwhen it would be kept; else eachleft[]says what to fix (why= the check:shape,camera,limits,dropped) anddata.problemslists every finding. Fix and check again.droppednames a field written in a shape the sheet does not read (「length は { minutes: 数 } の形で書きます(いま 5)」) — keep to the shape inlivlive-core.script.firstwith{"title", "structure", "cast":[…the ids from step 3], "form":"<the form id from step 3, if any>", "research":["<made.research>", …], "requestId":"<a uuid you make>"}— answersmade.version.research(optional, at most 8) = the room’s research the version was written from; an id the room does not hold is refused (research). A retry with the samerequestIdanswers the same version; any other call on a room that has a content is refused (already). From here on each next version isscript.savewith{"base":"<room.read current>", "requestId":"<a new uuid>", "structure"}— start it fromroom.read’sstructure.room.read—versions(each with theresearchit holds),currentandstructureshow the saved version;recentshows one record per op you ran.- For a content performed on one of the person’s stages: after
script.first,script.stagewith{"stage":"<id>"}, the id fromstage.list(livlive stage list). The next version then says the stage and the content gets its episode there; the answer’smade.episodeis the id the studio takes. Never beforescript.first: a stage set before the first version is not carried onto one written here, and no episode is made. A content on no stage has no episode and cannot be rehearsed. In step 3 choose a channel other thanmeetfor it: ameetcontent is performed in the app delivery room, not the studio. - Tell the person, in their words, how to rehearse. Performing, rehearsal and 本番 are livlive’s; this road ends at the saved 構成表. Every run uses
their credits, so say that first (with none, the start is refused in words). On a PC (a phone only says 「スタジオはパソコンで開いてください。」)
they open
<livlive's address>/studio/<made.episode>, the address being the onelivlive loginused; from コンテンツ, the content’s page leads there too, by 「リハで見る」 or 「スタジオへ」. There:
- They press 「リハを準備する →」. When it cannot be pressed, the line beside it says what holds the cast back (a character with no voice, soul or body, or not yet debuted) and where to fix it.
- They keep 「動く」 ticked, or the character does not move on the stage (it starts ticked when the sheet says this stage and the stage’s space is measured), and press 「▶ リハを開始」. The tab that started the run draws the stage, so it stays open.
- When 「リハ本編を開始 ▶」 can be pressed (the cast has arrived and the picture is going out), they press it.
- The run ends by itself or with 「完了 ✓」; 「中断(長押し) ■」 stops it. 「↻ もう一度(準備へ)」 runs it again.
The ops
Uselivlive-cli for the ops (livlive <op> --json ..., or the MCP tools). Think, write and revise on your side; hand the draft to livlive
to check and keep. Nothing in the CLI/MCP is written by hand per op: the list comes from the app.