Reference
read_project
A project’s full current state — frame order, per-locale caption words, styling.
What it does
- Read-only
- Idempotent
- Account required
What the designer actually changed. This returns the project file itself: the frame order they settled on, the caption words they typed for each locale, the locale list and the styling. It also answers whether the project holds its own screenshots, which decides whether render_project needs anything attached at all. Read-only, and it never returns screenshot bytes.
You can ask: “Check whether the Tidebook project can render with nothing attached.”
Input
projectstringoptionalat least 1 characterWhich ShotOps project to target: its id (as returned by read_look/save_project), OR its NAME as the user says it — matched exactly, ignoring case and surrounding spaces. Omit = your most recently edited project. A name that matches none or several is refused with the account's projects listed, never resolved by guessing.
Result
savedbooleanoptionalprojectobjectoptionalidstringrequirednamestringrequired
messagestringoptionallayoutobjectoptionalWhich layout template this strip is composed on, DERIVED from the values it holds rather than stored — so it cannot go stale, and it reports the near miss when a template was nudged. Absent when there is nothing to derive it from.
layoutstring or nullrequiredThe layout template this composition is on ("standard" | "bleed" | "top-bleed"), or null when it matches none — including when a multi-device panel’s devices disagree, or the strip’s panels are on different templates (read
panelsthen).closestLayoutstring or nulloptionalOnly when
layoutis null: the nearest template by fewest differing fields, or null when even that is contested. Apply it with style.layout and re-apply your adjustment.differsobjectoptionalAlongside a
closestLayout: exactly which fields keep it from being an exact match.panelsobjectrequiredThe same answer per panel id, in strip order — a strip may mix compositions.
screenshotsobjectoptionalavailablebooleanrequiredTrue when render_project on THIS server can render the project with NO
screenshotsargument, from the screenshots the project already holds. Token-backed local stdio uses the Studio control plane; unsigned local mode cannot read account projects.countnumberrequiredHow many shot × device-family × locale cells resolve to a screenshot, including inherited cells.
totalnumberrequiredTotal shot × distinct target-family × project-locale cells in the project’s render grid.
namesarrayrequiredFilenames with a screenshot available in at least one project variant.
each item
string
missingarrayrequiredShots with no stored screenshot — supply these by
name, or have the user drop them into the project.each item
string
reachstring or nullrequiredHow far the project’s screenshots reach: "account" (readable here), "device", "shared", or null.
cellsarrayrequiredOne row per shot × target-family × locale.
resolvedAtnames the manifest cell used;inheritedsays which requested axes fell back. This is the authoritative coverage report.each item
object
namestringrequiredvariantobjectrequiredWhich screenshot cell this image belongs to. Empty {} is the project's base device family + base locale; a missing cell inherits through ShotOps' pixel fallback rules.
familystringoptionalat least 1 characterat most 80 charactersDevice screenshot family (for example "android"). Omit for the project's base family; the two currently advertised iPhone outputs share that base family.
localestringoptionalat least 1 characterat most 80 charactersApp Store locale for these pixels. Omit for the project's base locale.
availablebooleanrequiredresolvedAtone of 2 shapesrequiredWhich screenshot cell this image belongs to. Empty {} is the project's base device family + base locale; a missing cell inherits through ShotOps' pixel fallback rules.
1
objectWhich screenshot cell this image belongs to. Empty {} is the project's base device family + base locale; a missing cell inherits through ShotOps' pixel fallback rules.
familystringoptionalat least 1 characterat most 80 charactersDevice screenshot family (for example "android"). Omit for the project's base family; the two currently advertised iPhone outputs share that base family.
localestringoptionalat least 1 characterat most 80 charactersApp Store locale for these pixels. Omit for the project's base locale.
2
nullinheritedarrayrequiredeach item
string
one of
familylocale
historyobjectoptionalStructured access decision for retained Look history. When unavailable, versions and heldVersion are omitted while the current saved Look remains readable.
availablebooleanrequiredcapabilitystringrequiredreasonstringoptionalrequiredPlanstringoptional
okbooleanoptional
Example
That request maps to this call:
{
"name": "read_project",
"arguments": {
"project": "Tidebook 2.4 launch"
}
}The project file, its updatedAt stamp, and a screenshots block whose available flag tells you whether render_project can run with no screenshots argument.
Access and cost
- Needs an account. Not available to an anonymous hosted caller.
- Free. Reading spends no cloud credits.
When it refuses
- You want to know whether the strip changed since last time.
- Remember
updatedAtand compare on the next read. A newer value means somebody edited it. - You were about to ask the user to re-upload their screenshots.
- Check the screenshots block first. If it says they are available, render_project needs nothing from the conversation.
Where this fits
What the agent is told
The title and description the server publishes on tools/list — this is the copy a model chooses between, reproduced verbatim.
Read full project
Find out what the designer changed in a strip: returns a project's FULL current state — the frame order they settled on (panels), the caption words they typed for each locale (captionText), the locale list, and the styling — as an opaque ProjectFile, not just the look. To answer a recurring "any updates?", remember the returned `updatedAt` and re-read later; a newer value means the strip was edited since. It ALSO answers whether the project already holds its own screenshots: `screenshots.available` true means render_project can render it with NO `screenshots` argument and nothing attached — check that before concluding you need the files. Read-only, never returns screenshot bytes, no store credential.