{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=jaylabs/sweep-git-repos@0.6.2","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/jaylabs/sweep-git-repos@0.6.2","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/jaylabs/sweep-git-repos@0.6.2","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/jaylabs/sweep-git-repos@0.6.2 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"You have a folder of repos and no idea which hold work that exists only on your laptop. On the machine this was built on, one sweep found 83 repositories and 35 branches living only there. It walks every repo under one folder, reads unpushed commits, uncommitted changes, stashes and upstream-less branches, names any repository whose history carries a secret-shaped file, asks GitHub whether that work is on origin, compares with the last sweep and writes a digest. An unreadable repo is listed as unknown, not dropped. Without a GitHub token that leg is skipped with the fix named, and the sweep completes. Your repositories are only ever read from; it writes a baseline, drift record and digest outside them.","distribution":{"digest":"sha256:90ac55f51465c475f5639ffc5601ff31ce7145f9bf471432cc77e86ac6febce3","mediaType":"application/vnd.modiqo.rote-flow","size":79310,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[{"tool":"discover_repos"},{"tool":"sweep_repo"}],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/jaylabs/sweep-git-repos@0.6.2","inputPolicy":{"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/jaylabs/sweep-git-repos@0.6.2","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/jaylabs/sweep-git-repos@0.6.2.json"},"name":"sweep-git-repos","owner":{"kind":"org","slug":"jaylabs"},"parameters":[{"default":"~/Documents","description":"Folder to sweep. A tilde path like ~/code is expanded to your home folder. Give an absolute path otherwise. A relative one resolves against the run workspace rather than your shell, so it will usually not be found.","example":"~/Documents","input":{"allowCustom":true,"choices":[],"label":"Base dir"},"name":"base_dir","required":false,"type":"string"},{"default":"3","description":"How many folder levels below base_dir to search. Must be a whole number; clamped to 1..6. Anything else falls back to 3 and the run says so. Keep it small on big trees.","example":"3","input":{"allowCustom":true,"choices":[],"label":"Max depth"},"name":"max_depth","required":false,"type":"string"},{"description":"Where to keep the baseline this play compares against. Leave empty to use the play's own run workspace. Nothing is ever written inside a repository either way.","example":"~/.rote/sweep-git-repos-state","input":{"allowCustom":true,"choices":[],"label":"State dir"},"name":"state_dir","required":false,"type":"string"},{"description":"Extra addresses that count as yours, comma separated. Your repo-level and global git user.email already count; this is for the other addresses you commit under.","example":"you@work.com, you@users.noreply.github.com","input":{"allowCustom":true,"choices":[],"label":"Emails"},"name":"emails","required":false,"type":"string"},{"description":"Sweep only the repositories whose path under base_dir contains this text, case-insensitive. The baseline still records everything found, so a filtered run cannot make the next full run think the rest disappeared.","example":"api","input":{"allowCustom":true,"choices":[],"label":"Only"},"name":"only","required":false,"type":"string"},{"default":"0","description":"Stop after this many repositories, in path order. 0 means no cap. Must be a whole number; anything else is ignored as no cap and the run says so.","example":"20","input":{"allowCustom":true,"choices":[],"label":"Max repos"},"name":"max_repos","required":false,"type":"string"},{"default":"text","description":"How the briefing reads. The value text is the aligned terminal view, markdown a table you can paste into a document, json the same object the result view carries.","example":"markdown","input":{"allowCustom":false,"choices":[{"label":"text","value":"text"},{"label":"markdown","value":"markdown"},{"label":"json","value":"json"}],"label":"Format"},"name":"format","required":false,"type":"string","validValues":["text","markdown","json"]},{"default":"auto","description":"Which route checks unpushed and upstream-less branches. The value auto tries the gh CLI, then the rote github adapter, then skips and says why. The values gh and adapter each insist on one. The value never keeps the sweep local. No token is needed to run; without one the leg is skipped and the receipt prints the rote token set command that enables it. GET only.","example":"adapter","input":{"allowCustom":false,"choices":[{"label":"auto","value":"auto"},{"label":"gh","value":"gh"},{"label":"adapter","value":"adapter"},{"label":"never","value":"never"}],"label":"Github"},"name":"github","required":false,"type":"string","validValues":["auto","gh","adapter","never"]},{"description":"Where to post the run digest. Leave empty and no socket is opened at all. An https URL is posted to; plain http is refused unless it is loopback, which is how the packaged test proves delivery without leaving the machine. A webhook that is down is reported, never allowed to lose the sweep.","example":"https://hooks.slack.com/services/T000/B000/xxxx","input":{"allowCustom":true,"choices":[],"label":"Webhook url"},"name":"webhook_url","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/jaylabs/sweep-git-repos@0.6.2 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters"},{"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/jaylabs/sweep-git-repos@0.6.2","headlessCommandTemplate":"rote play run https://play.modiqo.ai/jaylabs/sweep-git-repos@0.6.2 <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.75.0"},"publishedAt":"2026-09-06T18:00:27.625102+00:00","reference":"jaylabs/sweep-git-repos@0.6.2","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"hostToolRequirements":[{"command":"python3","required":true,"versionRequirement":">=3.9"},{"command":"git","required":true,"versionRequirement":null}],"localTools":["python3","git"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":4,"installs":0},"steps":{"count":11,"names":["digest","discover_repos","drift","env_probe","github_branches","github_probe","github_status","github_targets","load_previous","sweep_repo","validate_base"]},"title":"sweep-git-repos","type":"play","version":"0.6.2","visibility":"public"}