{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=lgoyal6/tool-surface-reconcile@0.1.0","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/lgoyal6/tool-surface-reconcile@0.1.0","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/lgoyal6/tool-surface-reconcile@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/tool-surface-reconcile@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Answers one question about the agent running on this machine: do the three answers to \"what tools does this agent actually have\" agree. There are three, and every published inventory play reads only one of them. ADVERTISED is what a session offered the model, which Claude Code records structurally in its transcripts as the literal mcp__<server>__<tool> names the model was handed. CONFIGURED is what a config file declares, read from every readable site: Claude Code user, project and plugin scope, Claude Desktop and its INSTALLED EXTENSIONS (whose manifests are declarations, and skipping them is what makes an installed extension look like it came from nowhere), Cursor, Windsurf, VS Code, and a Codex config.toml, each attributed to its harness by PATH rather than by filename, because at least six tools use the name mcp.json and calling all of them Claude Code turns another harness's config into a fabricated finding. AUTHORIZED is what could actually have been called, from three on-disk witnesses: the harness's o","distribution":{"digest":"sha256:e2b4cabf915eb5b8ff13e00acc8a6dc7e795b702b859a934441a10e2e7923309","mediaType":"application/vnd.modiqo.rote-flow","size":39219,"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/lgoyal6/tool-surface-reconcile@0.1.0","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/lgoyal6/tool-surface-reconcile@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/lgoyal6/tool-surface-reconcile@0.1.0.json"},"name":"tool-surface-reconcile","owner":{"kind":"user","slug":"lgoyal6"},"parameters":[{"description":"Absolute directory to search for project-scoped MCP declarations (.mcp.json, .cursor/mcp.json). A process.exec step runs in rote's workspace, not your shell, so a relative path would scan rote's own workspace and report every project-scoped declaration as absent; a relative value is refused with exit 2.","example":"/Users/you/src","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":true,"type":"string"},{"description":"Absolute path to the home directory holding the harness config (.claude/, .claude.json, .codex/). Empty means \u0024HOME. Absolute for the same reason as root, and refused if relative.","example":"/Users/you","input":{"allowCustom":true,"choices":[],"label":"Agent home"},"name":"agent_home","required":false,"type":"string"},{"default":"4","description":"How many directory levels below root to search for project-scoped MCP declaration files","example":"3","input":{"allowCustom":true,"choices":[],"label":"Depth"},"name":"depth","required":false,"type":"string"},{"default":"0","description":"Only read session transcripts modified within this many days. 0 reads all of them, which is the honest default because the advertised set is a union over sessions and a narrow window would under-report it.","example":"30","input":{"allowCustom":true,"choices":[],"label":"Since days"},"name":"since_days","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/lgoyal6/tool-surface-reconcile@0.1.0 --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/lgoyal6/tool-surface-reconcile@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/lgoyal6/tool-surface-reconcile@0.1.0 <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.79.0"},"publishedAt":"2026-09-04T07:59:32.438628+00:00","reference":"lgoyal6/tool-surface-reconcile@0.1.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["bash","python3","find","wc","tr","mktemp","rm"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":2,"installs":0},"steps":{"count":3,"names":["analyze","discover","verify"]},"title":"tool-surface-reconcile","type":"play","version":"0.1.0","visibility":"public"}