{"id":95546,"plugin_id":"plugin_asdk_app_6ae189f951708191920e9f41269c8cde","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-13T18:12:13.724Z","digest":"ac26858e18434b387c77d50d5eac83a93e095e3b1b5c8ae087afef17c7ddd526","against":null,"payload":{"description":"Use when the user wants something to happen automatically through Corsair, on a schedule (\"every Monday at 9am, add a CRM task for each deal still in Lead\") or when an event happens in a connected app, or asks whether an automation ran or why it failed, or wants to list, change, pause or switch off an automation. Covers update_routine and view_routines.","included_files":[],"name":"corsair-automations","skill_md_contents":"---\nname: corsair-automations\ndescription: Use when the user wants something to happen automatically through Corsair, on a schedule (\"every Monday at 9am, add a CRM task for each deal still in Lead\") or when an event happens in a connected app, or asks whether an automation ran or why it failed, or wants to list, change, pause or switch off an automation. Covers update_routine and view_routines.\n---\n\n# Build and check Corsair automations\n\nCorsair calls an automation a routine: a trigger (an app event or a clock) plus the steps that run when it fires. You describe it in plain words, and Corsair writes and tests the steps. You never pass code.\n\nSaving one is half the job. The other half is confirming it fires and works, because a routine can save cleanly and still fail on its first real event.\n\n## Before you add one\n\n- Call `view_routines`. If something already watches the same event and does the same thing, tell the user instead of adding a second one.\n- If there's no `update_routine` tool, this connection can't create or change routines. Tell the user. Don't do the routine's work yourself with `run_script` instead.\n- Every app the routine uses has to be connected. If one isn't, connect it first (see the corsair-connect-apps skill).\n\n## Create one\n\nCall `update_routine` with only `intent`, written the way the user would say it, with the specifics: which app, which records, what it should create or change, and for a schedule, when and in which timezone.\n\n```json\n{ \"intent\": \"Every Friday at 5pm UTC, file a PM issue titled Pipeline review that lists my open CRM deals with their stage and value.\" }\n```\n\nCorsair builds it in the background, so it doesn't exist yet when the call returns.\n\n1. Wait briefly, then call `view_routines`. The build appears as \"one you described is still being built\" (`kind: \"pending_build\"`, `status` `queued` or `running`). Check a couple of times; if it's still building, tell the user and check later instead of polling in a loop.\n2. If it \"needs one question answered\" (`status: \"waiting_for_input\"`), give the user its `question` and `options`. Send their choice back with `{\"routine\": \"<the build's id>\", \"answer\": \"<the option exactly as listed>\"}` and nothing else in the call. The build's id starts with `aj_`.\n3. If it \"could not be built\" (`status: \"failed\"`), tell the user what its `error` says and offer to describe it differently.\n4. Once it's built, read it back from `view_routines` and check it matches what the user meant.\n\n## Change, pause or switch one off\n\n`view_routines` gives each routine's id. A routine id starts with `wf_` (\"Routine id wf_…\"); an event routine also has a trigger id starting with `wft_`, and either one works below.\n\n- **Change it:** call `update_routine` with that `routine` id and an `intent` describing the change. Corsair changes that routine instead of adding a second one.\n- **Pause or resume it:** `{\"routine\": \"<id>\", \"action\": \"pause\"}`, or `\"resume\"`.\n- **Switch it off:** `{\"routine\": \"<id>\", \"action\": \"remove\"}`. What it did stays saved in Corsair.\n\nIf two routines look alike, confirm which one with the user first.\n\n## Check that it works\n\n1. Ask the user to make the event happen, or tell them what to watch for. For a schedule, tell the user when the first run is due.\n2. Call `view_routines` with `routine` to see its recent runs. Each has an id and a status: succeeded (`successful`), failed (`error`), still running (`running`), or needs approval before it can run (`awaiting_approval`, see corsair-approvals).\n3. For a failed run, call `view_routines` with `run` to see its steps and the error. Describe the fix with `update_routine` (`routine` and `intent`), then check again.\n   - Some errors aren't the routine's fault, such as a limit on the user's Corsair account or a fault on Corsair's side. Rewriting the routine won't fix those, and Corsair doesn't try to. Tell the user what the error says instead.\n4. No run at all means the trigger didn't match. Ask the user what happened in the app and describe the event more precisely.\n5. If `view_routines` says nothing narrows a routine down, so it fires on every event of that kind, pass that warning on.\n\nDon't tell the user a routine works until a run has succeeded.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}