{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=rajkaria/spent@0.1.1","method":"GET","rel":"https://rote.dev/rels/bootstrap-and-run","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"inspect":{"command":"rote play inspect https://play.modiqo.ai/rajkaria/spent@0.1.1","effect":"read-only"},"installCliOnly":{"effect":"installs the rote CLI, nothing else","href":"https://play.modiqo.ai/install","method":"GET","rel":"https://rote.dev/rels/install-cli","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"run":{"command":"rote play run https://play.modiqo.ai/rajkaria/spent@0.1.1","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/rajkaria/spent@0.1.1 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"\u0060entry='320 lunch #food'\u0060. That is the interaction. Three or four of those a day and you have a spend log that owes nothing to a bank, an app, a login or an export. It reads an amount with or without a currency symbol, a label, and an optional #tag, and it keeps money in decimal arithmetic from end to end — never a float, because a float is how a total quietly becomes 4907.999999999999. The report gives you today, this month, the top categories with their share, the daily average, and — if you set a budget — where the month lands at the current rate. Currencies are totalled apart and never converted. A made-up exchange rate would make one clean number out of two honest ones, so a month with rupees and dollars in it reports both. - Reads: only its own log, at \u0060state_dir/spent.jsonl\u0060. It does not read your bank, your mail, your receipts or your files. - Never reads: any credential, keychain or token file. This Play needs no account and has no login step, and it could not connect to a bank if it wanted to. - Nev","distribution":{"digest":"sha256:b80eb97934f3c244a77c4308f10fd64e9a4416f313a9784b857e81a47e115e34","mediaType":"application/vnd.modiqo.rote-flow","size":45454,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/rajkaria/spent@0.1.1","inputPolicy":{"omittedValues":"inspect_full_parameters_before_collecting_values_or_consent","optionalWithDefault":"show_default_and_accept_override","optionalWithoutDefault":"omit_unless_supplied","required":"ask","secrets":"collect_locally_outside_conversation"},"links":{"docs":"https://rote.dev","page":"https://play.modiqo.ai/rajkaria/spent@0.1.1","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/rajkaria/spent@0.1.1.json"},"name":"spent","owner":{"kind":"user","slug":"rajkaria"},"parameters":[{"default":"","description":"Amount first, then what it was for, and an optional #tag. A leading symbol sets the currency. Leave it empty to read the month back without adding to it.","example":"320 lunch #food","input":{"allowCustom":true,"choices":[],"label":"Entry"},"name":"entry","required":false,"type":"string"},{"default":"USD","description":"Used when the entry carries no symbol. Currencies are totalled apart, never converted, because a made-up exchange rate is worse than two honest numbers.","example":"INR","input":{"allowCustom":true,"choices":[],"label":"Currency"},"name":"currency","required":false,"type":"string"},{"default":"0","description":"Optional. When set, the report projects the month at the current rate and says whether that lands over.","example":"6000","input":{"allowCustom":true,"choices":[],"label":"Budget"},"name":"budget","required":false,"type":"string"},{"default":"~/.rote-micro","description":"The one directory this Play writes to. One append-only JSONL file per stream; nothing is ever deleted or rewritten in place.","example":"~/.rote-micro","input":{"allowCustom":true,"choices":[],"label":"State dir"},"name":"state_dir","required":false,"type":"string"},{"default":"","description":"Empty uses the machine's zone. A day boundary is a place, not a fact: this decides when today starts.","example":"Asia/Kolkata","input":{"allowCustom":true,"choices":[],"label":"Tz"},"name":"tz","required":false,"type":"string"},{"default":"false","description":"true runs the whole Play against bundled synthetic input, so a first run needs nothing configured and touches nothing of yours.","example":"false","input":{"allowCustom":true,"choices":[],"label":"Demo"},"name":"demo","required":false,"type":"string"},{"default":"","description":"Empty reads the real clock. An ISO-8601 instant makes the run reproducible, which is how the tests and the demo produce the same bytes on every machine.","example":"2026-09-05T14:22:03Z","input":{"allowCustom":true,"choices":[],"label":"Now"},"name":"now","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/rajkaria/spent@0.1.1 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters","whenValuesOmitted":"Run step 1 before collecting inputs or showing defaults; omittedFields are unknown values, not absent defaults or exhaustive choices."},{"references":["/parameters","/requirements","/effects"],"step":3,"type":"review"},{"consentBoundary":"the user approves the exact play and parameter values","references":["/parameters","/requirements","/effects"],"step":4,"type":"obtain_run_consent"},{"action":{"command":"rote play run https://play.modiqo.ai/rajkaria/spent@0.1.1","headlessCommandTemplate":"rote play run https://play.modiqo.ai/rajkaria/spent@0.1.1 <name=value...> --yes"},"preservesAcquisitionBoundaries":["adapter_selection","oauth_dcr","google_discovery","static_token_setup","runtime_security_checks"],"requiresConsent":true,"step":5,"type":"run"}],"producedBy":{"roteVersion":"0.80.0"},"publishedAt":"2026-09-05T17:50:05.68345+00:00","reference":"rajkaria/spent@0.1.1","requested":"rajkaria/spent","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"hostToolRequirements":[{"command":"python3","required":true,"versionRequirement":null}],"localTools":["python3"],"roteCli":{"minimumVersion":"0.91.0"},"sessions":false},"resolution":"latest","schema":"rote.play.v1","stats":{"downloads":1,"installs":0},"steps":{"count":2,"names":["record","report"]},"title":"spent","type":"play","version":"0.1.1","visibility":"public"}