---
title: "tool si.act.keep_play"
description: "a play for a brand, written once by the platform as an original or by the tenant: its goal, its condition as a predicate over its population, its class, its tactic, the move it proposes, its measure, its window, its forecast rule, its comparison, when it stops, and its graph of moves as edges (`KeepPlayInput`); the…"
section: reference
address: /reference/tools/si-act-keep_play
contract: 0476e35e6e275db5
---

# tool si.act.keep_play

a play for a brand, written once by the platform as an original or by the tenant: its goal, its condition as a predicate over its population, its class, its tactic, the move it proposes, its measure, its window, its forecast rule, its comparison, when it stops, and its graph of moves as edges (`KeepPlayInput`); the…

[figure: Over MCP, si.act.keep_play takes KeepPlayInput and returns a card whose body is Play.]

the play as the next version of its name under the brand, ready, or not ready with the first reason: *the condition does not compile*, *the graph has a cycle* naming the edge, *an edge cannot be evaluated* naming the edge and the population, *an edge is neither always nor guarded*. The call needs the act grant at the brand rung.



| | |
|---|---|
| input | [KeepPlayInput](/concepts/keepplayinput) |
| result | a card whose body is [Play](/concepts/play) |
| read-only | no |
| destructive | yes |
| card address | `ui://scale-intelligence/cards/Play` |
| HTTP route | [`/v1/act/keep_play`](/reference/act/keep_play) |





| field | type | required | note |
|---|---|---|---|
| `play` | [Play](/concepts/play) | yes | its condition and its edges carry their predicates by hash; a predicate given in full under `predicates` is kept first |
| `predicates` | [Predicate](/concepts/predicate) | no | the condition's and the edges' predicates in full, kept by their hashes before the play |
