Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.
In about 10 minutes you’ll have an automation that checks yesterday’s cloud spend every morning and alerts a Slack channel when a service jumps. It only reads billing data, and any write it attempts later still goes through your approvals.
A Team plan or above. Automations and Slack delivery both need it. See Pricing.
The workspace Admin role. Only admins can create and edit automations.
A cloud connection that can read billing data, with at least 14 days of history:
AWS: Cost Explorer turned on, and ce:GetCostAndUsage (in ReadOnlyAccess)
Google Cloud: a Standard usage cost billing export to BigQuery, in the same project as the connection’s service account, plus the BigQuery Data Viewer and BigQuery Job User roles. You’ll name the dataset in the instructions in step 2.
Azure: the Cost Management Reader role on the subscription
Slack connected to CloudThinker. If your Slack workspace uses app approval, a Slack Workspace Owner or app manager has to approve CloudThinker first. See Slack integration.
Agents can raise an alert with a severity as a built-in action, and this automation reports through one. CloudThinker sends those alerts to the channels on the Agent alerts row of Notifications. Route them to a channel first, so the first test reaches you.
1
Pick a Slack channel
Go to More → Workspace settings → Notifications. Under Delivery channels, find the Slack card (it reads Pick a channel until one is set). Click its settings icon (Change Slack channel), then search for and select the channel your team watches under Slack Notification Channel.For a private channel, run /invite @CloudThinker in it first, or it won’t show in the list.
2
Turn on agent alerts for Slack
Under What to notify me about, open Alerts and turn on Slack for Agent alerts. Set the severity threshold to High or lower. This automation raises High alerts.Success state: the Slack toggle on the Agent alerts row is on, with a threshold of Low, Medium, or High.
Open Automations in the sidebar and select New automation. Under Or start from a template, select Daily cost anomaly alert.The form opens with the name, the instructions, and a Schedule trigger for every day at 08:00 already filled in.
New automation: describe the job in plain words, or start from a template
2
Tell it to alert
What should the agent do? already reads:
Compare yesterday's spend per service against its trailing 14-day average. Report only the services more than 20% above it, with the most likely cause for each.
Append this sentence at the end, so a spike becomes a Slack alert:
If any service is more than 20% above its average, raise a high-severity alert that names the service, the increase, and the likely cause.
On Google Cloud, also add this sentence, with your own project and dataset:
The billing export is in dataset <project>.<dataset>.
If the workspace has more than one cloud connection, type # to pick the one to check. Without a # mention, the agent picks from the workspace’s connections itself.
3
Check the schedule
On the Schedule card, confirm Daily at 08:00, or change the time. Times are in your local time zone. In a daylight-saving zone the run lands an hour off for part of the year (why).
4
Leave the approval picker on its default
Leave Approval (beside the model picker) on its Default option. This automation only reads, so approvals don’t come into play (see below).
5
Create it
Select Create automation.Success state: the automation opens on its own page. Its Next run field shows the next 08:00, in your local time with the time zone named.
Don’t wait for 08:00. Select Run now at the top of the automation’s page.Success state: a run appears under Past runs on the automation’s page as Running, then Succeeded. Open it to read the agent’s comparison in the run’s conversation. If any service was more than 20% above its average, an alert also posts in your Slack channel. To see the credits the run used, open Usage.
Cloud billing data for yesterday can still be incomplete early in the morning, so a test right after setup may report lower spend than the final bill. If the numbers look off, run it again later in the day.
A quiet day produces no Slack message, which is the point. To check the Slack path without touching the real automation:
Open its … menu in the Automations list and select Duplicate. The form opens with a copy, 08:00 schedule included. The copy counts toward your plan’s automation limit until you delete it.
Change its instructions to “Raise a high-severity test alert with yesterday’s total spend”. Remove the schedule with the trash icon on the Schedule card, then select Create automation. With no trigger, the copy runs only on Run now.
This automation only reads, so no write ever reaches approvals. If you later extend it, for example “tag the resource that caused the spike”, approvals decide each write before it runs. To check which mode the automation uses, open Approvals > Approval mode and find Automations under Run types. Common choices (the full list has five):
Approval choice for this automation
A write no Rule covers
Auto · Rules + AI · Refuse (default)
AI judgment can allow a write that matches what you asked for and stays in scope. A destructive write, or one with an unclear effect, is refused, and the run continues.
Auto · Rules + AI · Ask me
Same, but the rest waits. The run shows Required Approval until someone selects Approve or Decline in its conversation.
Manual
Waits for a person
In the Auto choices, a matching Rule decides before any of this, but only once CloudThinker turns on Rule enforcement for your workspace (details). In Manual, every write waits for a person, even one an Allow Rule covers.For a write the automation makes every day, add an AllowRule on Approvals > Rules, scoped to Automations under Runs from. While the Rules step says In preview, that Rule is only recorded, so AI judgment still decides the write. Once CloudThinker turns on Rule enforcement for your workspace, the Rule runs the write and the run no longer depends on AI judgment or on someone being online. To write one from scratch, type /create-policy in a chat (it proposes a Rule that an Admin then accepts) and describe the write. See the steps.
Either no service crossed 20%, or alerts aren’t routed. Read the run’s conversation first. If it says it raised an alert, check that Slack is on for Agent alerts in More → Workspace settings → Notifications, that its threshold is High or lower, and that the CloudThinker bot is in the channel.
Too many alerts
A noisy service crosses 20% most days. Edit the instructions: raise the percentage, add a minimum dollar increase (for example “and at least $50 above its average”), or name services to skip.
The run failed or says it has no cost data
Open the run’s conversation for the error. Most often the cloud connection lacks billing permissions. Check the required permissions on your connection’s page, such as AWS.
The run shows Required Approval
The agent attempted a write and your approval choice asks a person. Open the run’s conversation and select Approve or Decline. If you didn’t expect a write, tighten the instructions.
The run stays on Pending
It’s queued, or its conversation is busy with another turn. It starts once the conversation is free. If Run now says “A run is already in progress for this task”, wait for that run to finish.
You can't use Run now or New automation
Only workspace Admins can create, edit, and run automations. Developers and Viewers can read them and their runs. Ask an Admin, or ask for the Admin role.
The automation turned itself off
Ten runs in a row failed. Fix the cause using Run now, which still works, then turn the automation back on.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CloudThinker","colors":{"primary":"#0c93c0","light":"#2897c1","dark":"#0c93c0"},"logo":{"light":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f","dark":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/dark.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=4252f33496bbaa527e5408338963a31e"},"favicon":"https://mintcdn.com/cloudthinker/PoYnb4baZ54aMMQW/favicon.ico?fit=max\u0026auto=format\u0026n=PoYnb4baZ54aMMQW\u0026q=85\u0026s=6570e99ed2a763d9632c8f933fe9c164","background":{"color":{"light":"#eef0f3","dark":"#000000"}},"navbar":{"links":[{"href":"https://discord.com/invite/sRBWRWtaNR","label":"Community"},{"href":"https://cloudthinker.io/blogs","label":"Blog"},{"href":"https://cloudthinker.io/contact","label":"Contact us"}],"primary":{"type":"button","label":"Open app","href":"https://app.cloudthinker.io"}},"footer":{"socials":{"x":"https://x.com/cloudthinkerio?s=21","linkedin":"https://www.linkedin.com/company/cloud-thinker","github":"https://github.com/cloudthinker-ai","discord":"https://discord.com/invite/sRBWRWtaNR","youtube":"https://www.youtube.com/@cloudthinkerai"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Poppins"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"vi","href":""},{"language":"ja","href":""},{"language":"ko","href":""}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cloudthinker","hasAudioNarration":false,"actualSubdomain":"cloudthinker","customDomains":["docs.cloudthinker.io"],"gitSource":{"type":"github","owner":"nhat-tranvan","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adc97ae50e173ef2b635382","collectionId":"650886af-e070-4acf-932c-2411f5f8761a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adc97ae50e173ef2b635382"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{},"buildId":"6adddcaa087fb564296de741","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Platform","count":67},{"language":"vi","tag":"Nền tảng","count":64},{"language":"en","tag":"Platform","count":63},{"language":"ja","tag":"プラットフォーム","count":63},{"language":"ko","tag":"플랫폼","count":63},{"language":"default","tag":"Connections","count":52},{"language":"vi","tag":"Kết nối","count":49},{"language":"en","tag":"Connections","count":48},{"language":"ja","tag":"接続","count":48},{"language":"ko","tag":"연결","count":48},{"language":"en","tag":"Products","count":29},{"language":"ja","tag":"プロダクト","count":29},{"language":"ko","tag":"제품","count":29},{"language":"vi","tag":"Sản phẩm","count":29},{"language":"default","tag":"Resources","count":26},{"language":"default","tag":"Products","count":24},{"language":"default","tag":"Learn","count":18},{"language":"default","tag":"Agentic Infrastructure Operations - Engineer Edition","count":18},{"language":"default","tag":"Get started","count":13},{"language":"en","tag":"Get started","count":13},{"language":"en","tag":"Resources","count":13},{"language":"ja","tag":"はじめに","count":13},{"language":"ja","tag":"リソース","count":13},{"language":"ko","tag":"시작하기","count":13},{"language":"ko","tag":"리소스","count":13},{"language":"vi","tag":"Bắt đầu","count":13},{"language":"vi","tag":"Tài nguyên","count":13},{"language":"en","tag":"Learn","count":12},{"language":"en","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ja","tag":"Observability \u0026 Monitoring","count":12},{"language":"ja","tag":"学ぶ","count":12},{"language":"ja","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ko","tag":"Observability \u0026 Monitoring","count":12},{"language":"ko","tag":"배우기","count":12},{"language":"ko","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"vi","tag":"Observability \u0026 Monitoring","count":12},{"language":"vi","tag":"Học","count":12},{"language":"vi","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"en","tag":"Monitoring","count":11},{"language":"en","tag":"Resolve","count":11},{"language":"ja","tag":"Resolve","count":11},{"language":"ko","tag":"Resolve","count":11},{"language":"vi","tag":"Resolve","count":11},{"language":"default","tag":"Resolve","count":9},{"language":"vi","tag":"Databases","count":9},{"language":"ja","tag":"Databases","count":8},{"language":"ko","tag":"Databases","count":8},{"language":"en","tag":"Work where you are","count":7},{"language":"default","tag":"Review","count":6},{"language":"default","tag":"Set up","count":6}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".ct-landing a,a.ct-featured{text-decoration:none!important}a.ct-featured{display:block;margin:1.25rem 0 1rem;padding:1.75rem 1.75rem 1.5rem;border:1px solid rgba(12,147,192,.45)!important;border-radius:16px;background:radial-gradient(120% 160% at 0 0,rgba(12,147,192,.14),transparent 55%),#fff;box-shadow:0 12px 32px -16px rgba(12,147,192,.45);transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease}a.ct-featured:hover{border-color:#0c93c0!important;transform:translateY(-1px);box-shadow:0 16px 40px -16px rgba(12,147,192,.6)}.dark a.ct-featured{border-color:rgba(40,151,193,.45)!important;background:radial-gradient(120% 160% at 0 0,rgba(40,151,193,.16),transparent 55%),#05070a;box-shadow:0 12px 32px -16px rgba(40,151,193,.35)}.dark a.ct-featured:hover{border-color:#2897c1!important}.ct-featured-head{display:flex;align-items:center;gap:.75rem;margin-bottom:.875rem}.ct-featured-icon{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:999px;background:rgba(12,147,192,.12);color:#0a7aa0}.dark .ct-featured-icon{background:rgba(40,151,193,.14);color:#5bb8e0}.ct-eyebrow{font-size:.75rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#0a7aa0}.dark .ct-eyebrow{color:#5bb8e0}.ct-hero h1,.ct-title{font-weight:600;color:#0b1a2b}.ct-title{font-size:1.375rem;line-height:1.3}.dark .ct-card .ct-card-head span,.dark .ct-card h3,.dark .ct-hero h1,.dark .ct-section>h2,.dark .ct-step h3,.dark .ct-title{color:#f5f5f7}.ct-body{margin:.5rem 0 0!important;font-weight:400!important;font-size:1rem;max-width:46rem;color:#5b6577;line-height:1.6}.dark .ct-body,.dark .ct-hero .ct-promise,.dark .ct-hero p.ct-lead,.dark .ct-section>p.ct-section-lead{color:#a1a1a6}.ct-cta{display:inline-block;margin-top:1rem;font-weight:600;color:#0a7aa0}.dark .ct-cta{color:#5bb8e0}.ct-illustration{margin:1.5rem 0}.ct-illustration img{max-width:720px;margin:0 auto}.ct-iso-scene{margin:1.5rem 0 2rem;border:1px solid rgba(12,147,192,.18);border-radius:16px;background:#fff;overflow:hidden}.dark .ct-iso-scene{border-color:rgba(40,151,193,.22);background:#000}.ct-illustration img,.ct-iso-scene .ct-iso-svg{display:block;width:100%;height:auto}.ct-landing{max-width:1120px;margin:0 auto;padding:3rem 1.5rem 5rem}.ct-landing a{border-bottom-width:0}.ct-kicker{font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#0c93c0}.dark .ct-card .ct-tagline,.dark .ct-hero .ct-promise strong,.dark .ct-kicker{color:#2897c1}.ct-hero{text-align:center;padding:1.5rem 0 1rem}.ct-hero h1{margin:.75rem 0 0;font-size:clamp(2.25rem,5vw,3.75rem);line-height:1.05;letter-spacing:-.03em;-webkit-text-fill-color:currentColor;background:0 0}.ct-hero .ct-promise{margin:1rem auto 0;font-size:clamp(1.125rem,2.2vw,1.5rem);color:#5b6577}.ct-hero .ct-promise strong,.ct-section>h2{color:#0c93c0;font-weight:600}.ct-hero p.ct-lead{max-width:44rem;margin:1rem auto 0;font-size:1.0625rem;line-height:1.65;color:#5b6577}.ct-actions{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;margin-top:1.75rem}.ct-btn{display:inline-flex;align-items:center;gap:.5rem;padding:.7rem 1.25rem;border-radius:999px;font-weight:600;font-size:.95rem;transition:transform .15s ease,background .15s ease}.ct-btn:hover{transform:translateY(-1px)}.ct-btn-primary{background:#0c93c0;color:#fff!important}.ct-btn-primary:hover{background:#0a7aa0}.ct-btn-ghost{border:1px solid rgba(12,147,192,.35)!important;color:#0b1a2b!important}.dark .ct-btn-ghost{color:#f5f5f7!important;border-color:rgba(40,151,193,.4)!important}.ct-landing .ct-iso-scene{margin-top:2.5rem}.ct-section{margin-top:4.5rem}.ct-section>h2{margin:.4rem 0 0;font-size:1.75rem;letter-spacing:-.02em;color:#0b1a2b;-webkit-text-fill-color:currentColor;background:0 0}.ct-section>p.ct-section-lead{margin:.5rem 0 0;color:#5b6577;max-width:46rem}.ct-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-top:1.5rem}.ct-step{display:block;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18)!important;background:#fff;transition:border-color .15s ease,transform .15s ease}.dark .ct-step{background:#05070a;border-color:rgba(40,151,193,.22)!important}.ct-step:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-step-num{display:inline-flex;width:1.75rem;height:1.75rem;border-radius:999px;align-items:center;justify-content:center;font-size:.85rem;font-weight:700;color:#fff;background:#0c93c0}.ct-card h3,.ct-step h3{margin:.75rem 0 .25rem;font-size:1.05rem}.ct-card p,.ct-step p{margin:0;font-size:.925rem;line-height:1.55;color:#5b6577}.dark .ct-card p,.dark .ct-landing td,.dark .ct-step p{color:#a1a1a6}.ct-grid{display:grid;gap:1rem;margin-top:1.5rem}.ct-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ct-grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ct-card{display:flex;flex-direction:column;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18);background:#fff}.dark .ct-card{background:#05070a;border-color:rgba(40,151,193,.22)}.ct-card .ct-card-head{display:flex;align-items:center;gap:.6rem}.ct-card .ct-card-head span,.ct-card h3,.ct-step h3{font-weight:600;color:#0b1a2b}.ct-card .ct-tagline{margin-top:.75rem;font-size:1.05rem;font-weight:600;line-height:1.35;color:#0c93c0}.ct-card .ct-links{margin-top:auto;padding-top:1rem;display:flex;gap:1rem;font-size:.9rem;font-weight:600}.ct-card .ct-links a{color:#0c93c0!important}.dark .ct-card .ct-links a,.dark .ct-card-head .ct-arrow,.dark .ct-landing td a{color:#2897c1!important}a.ct-card{transition:border-color .15s ease,transform .15s ease}a.ct-card:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-strip{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.25rem}.ct-strip a{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem .95rem;border-radius:999px;border:1px solid rgba(12,147,192,.25)!important;font-size:.9rem;font-weight:500;color:#0b1a2b!important}.dark .ct-strip a{color:#f5f5f7!important;border-color:rgba(40,151,193,.3)!important}.ct-strip a:hover{border-color:#0c93c0!important}@media (max-width:900px){.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.ct-landing{padding:2rem 1rem 4rem}.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:minmax(0,1fr)}}.ct-landing table{width:100%;margin-top:1.25rem;border-collapse:collapse;font-size:.925rem}.ct-landing th{text-align:left;font-weight:600;padding:.7rem .9rem;border-bottom:1px solid rgba(12,147,192,.3)}.ct-landing td{vertical-align:top;padding:.8rem .9rem;border-bottom:1px solid rgba(12,147,192,.12);color:#5b6577;line-height:1.55}.ct-landing td:first-child{font-weight:600;color:#0b1a2b;width:22%}.dark .ct-landing td:first-child{color:#f5f5f7}.ct-landing td a{color:#0c93c0!important;font-weight:600}.ct-product{padding:1.1rem 1.2rem}.ct-product .ct-tagline{margin-top:.55rem;font-size:1rem}.ct-product p{margin-top:.3rem}.ct-card-head .ct-arrow{margin-left:auto;font-weight:500!important;color:#0c93c0!important;transition:transform .15s ease}a.ct-product:hover .ct-arrow{transform:translateX(3px)}html:not(.dark) .ct-card,html:not(.dark) .ct-iso-scene,html:not(.dark) .ct-step{background:#f6f7f9}html:not(.dark) .ct-iso-scene{border-color:rgba(12,147,192,.12)}html:not(.dark) #content-area,html:not(.dark) .prose,html:not(.dark) body{color:#2b3240}html:not(.dark) .prose :where(h1, h2, h3, h4, strong){color:#1c2230}html:not(.dark) .ct-card .ct-card-head span,html:not(.dark) .ct-card h3,html:not(.dark) .ct-hero h1,html:not(.dark) .ct-section>h2,html:not(.dark) .ct-step h3{color:#1c2230}"}],"page":{"pagePath":"guide/automation/quickstart","slug":"/guide/automation/quickstart","pageMetadata":{"title":"Automation Quickstart","description":"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.","icon":"rocket","href":"/guide/automation/quickstart"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`In about 10 minutes you’ll have an automation that checks yesterday’s cloud spend every morning and alerts a Slack channel when a service jumps. It only reads billing data, and any write it attempts later still goes through your approvals.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A Team plan or above. Automations and Slack delivery both need it. See `,_jsx(_components.a,{href:`/guide/billing/pricing`,children:`Pricing`}),`.`]}),`\n`,_jsx(_components.li,{children:`The workspace Admin role. Only admins can create and edit automations.`}),`\n`,_jsxs(_components.li,{children:[`A cloud connection that can read billing data, with at least 14 days of history:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guide/connections/aws#required-permissions`,children:`AWS`}),`: Cost Explorer turned on, and `,_jsx(_components.code,{children:`ce:GetCostAndUsage`}),` (in `,_jsx(_components.code,{children:`ReadOnlyAccess`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guide/connections/gcp#required-permissions`,children:`Google Cloud`}),`: a `,_jsx(_components.strong,{children:`Standard usage cost`}),` billing export to BigQuery, in the same project as the connection’s service account, plus the BigQuery Data Viewer and BigQuery Job User roles. You’ll name the dataset in the instructions in step 2.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guide/connections/azure#required-permissions`,children:`Azure`}),`: the Cost Management Reader role on the subscription`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Slack connected to CloudThinker. If your Slack workspace uses app approval, a Slack Workspace Owner or app manager has to approve CloudThinker first. See `,_jsx(_components.a,{href:`/guide/slack-integration`,children:`Slack integration`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`send-agent-alerts-to-slack`,children:`Send agent alerts to Slack`}),`\n`,_jsxs(_components.p,{children:[`Agents can raise an alert with a severity as a built-in action, and this automation reports through one. CloudThinker sends those alerts to the channels on the `,_jsx(_components.strong,{children:`Agent alerts`}),` row of `,_jsx(_components.a,{href:`/guide/notifications`,children:`Notifications`}),`. Route them to a channel first, so the first test reaches you.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Pick a Slack channel`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`More → Workspace settings → Notifications`}),`. Under `,_jsx(_components.strong,{children:`Delivery channels`}),`, find the Slack card (it reads `,_jsx(_components.strong,{children:`Pick a channel`}),` until one is set). Click its settings icon (`,_jsx(_components.strong,{children:`Change Slack channel`}),`), then search for and select the channel your team watches under `,_jsx(_components.strong,{children:`Slack Notification Channel`}),`.`]}),_jsxs(_components.p,{children:[`For a private channel, run `,_jsx(_components.code,{children:`/invite @CloudThinker`}),` in it first, or it won’t show in the list.`]})]}),_jsxs(Step,{title:`Turn on agent alerts for Slack`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`What to notify me about`}),`, open `,_jsx(_components.strong,{children:`Alerts`}),` and turn on Slack for `,_jsx(_components.strong,{children:`Agent alerts`}),`. Set the severity threshold to `,_jsx(_components.strong,{children:`High`}),` or lower. This automation raises High alerts.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` the Slack toggle on the `,_jsx(_components.strong,{children:`Agent alerts`}),` row is on, with a threshold of `,_jsx(_components.strong,{children:`Low`}),`, `,_jsx(_components.strong,{children:`Medium`}),`, or `,_jsx(_components.strong,{children:`High`}),`.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`create-the-automation`,children:`Create the automation`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open the template`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Automations`}),` in the sidebar and select `,_jsx(_components.strong,{children:`New automation`}),`. Under `,_jsx(_components.strong,{children:`Or start from a template`}),`, select `,_jsx(_components.strong,{children:`Daily cost anomaly alert`}),`.`]}),_jsxs(_components.p,{children:[`The form opens with the name, the instructions, and a `,_jsx(_components.strong,{children:`Schedule`}),` trigger for every day at 08:00 already filled in.`]}),_jsx(Frame,{caption:`New automation: describe the job in plain words, or start from a template`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=6ae975f7321426093e16e25700e337be`,alt:`New automation page with a chat box and a grid of templates, including Daily cost anomaly alert`,\"data-og-width\":`2176`,width:`2176`,\"data-og-height\":`1250`,height:`1250`,\"data-path\":`images/v2/automation-new.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=280\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=1f8593ec9cf5c774813e30f6f1472d4b 280w, https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=560\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=2d4d3517cc78ccd162af4b3276f00c30 560w, https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=840\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=02a6919b86dc187fbec781d279391d9d 840w, https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=50c8e8ab5d07e7beeec8781dba87e5de 1100w, https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=11d34541321347d3b95632a3c477d74e 1650w, https://mintcdn.com/cloudthinker/7N5Axt6gSxkmeWiW/images/v2/automation-new.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=7N5Axt6gSxkmeWiW\u0026q=85\u0026s=7a3a928eccf028ea69ee514e547b163d 2500w`})})]}),_jsxs(Step,{title:`Tell it to alert`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What should the agent do?`}),` already reads:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Compare yesterday's spend per service against its trailing 14-day average. Report only the services more than 20% above it, with the most likely cause for each.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Append this sentence at the end, so a spike becomes a Slack alert:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`If any service is more than 20% above its average, raise a high-severity alert that names the service, the increase, and the likely cause.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`On Google Cloud, also add this sentence, with your own project and dataset:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`The billing export is in dataset \u003cproject>.\u003cdataset>.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`If the workspace has more than one cloud connection, type `,_jsx(_components.code,{children:`#`}),` to pick the one to check. Without a `,_jsx(_components.code,{children:`#`}),` mention, the agent picks from the workspace’s connections itself.`]})]}),_jsx(Step,{title:`Check the schedule`,children:_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Schedule`}),` card, confirm `,_jsx(_components.strong,{children:`Daily`}),` at 08:00, or change the time. Times are in your local time zone. In a daylight-saving zone the run lands an hour off for part of the year (`,_jsx(_components.a,{href:`/guide/automation/automations#schedule`,children:`why`}),`).`]})}),_jsx(Step,{title:`Leave the approval picker on its default`,children:_jsxs(_components.p,{children:[`Leave `,_jsx(_components.strong,{children:`Approval`}),` (beside the model picker) on its `,_jsx(_components.strong,{children:`Default`}),` option. This automation only reads, so approvals don’t come into play (`,_jsx(_components.a,{href:`#what-happens-if-the-agent-tries-a-write`,children:`see below`}),`).`]})}),_jsxs(Step,{title:`Create it`,children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Create automation`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` the automation opens on its own page. Its `,_jsx(_components.strong,{children:`Next run`}),` field shows the next 08:00, in your local time with the time zone named.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`test-it-now`,children:`Test it now`}),`\n`,_jsxs(_components.p,{children:[`Don’t wait for 08:00. Select `,_jsx(_components.strong,{children:`Run now`}),` at the top of the automation’s page.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` a run appears under `,_jsx(_components.strong,{children:`Past runs`}),` on the automation’s page as `,_jsx(_components.strong,{children:`Running`}),`, then `,_jsx(_components.strong,{children:`Succeeded`}),`. Open it to read the agent’s comparison in the run’s conversation. If any service was more than 20% above its average, an alert also posts in your Slack channel. To see the credits the run used, open `,_jsx(_components.a,{href:`/guide/billing/usage`,children:`Usage`}),`.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Cloud billing data for yesterday can still be incomplete early in the morning, so a test right after setup may report lower spend than the final bill. If the numbers look off, run it again later in the day.`})}),`\n`,_jsx(_components.p,{children:`A quiet day produces no Slack message, which is the point. To check the Slack path without touching the real automation:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open its `,_jsx(_components.strong,{children:`…`}),` menu in the `,_jsx(_components.strong,{children:`Automations`}),` list and select `,_jsx(_components.strong,{children:`Duplicate`}),`. The form opens with a copy, 08:00 schedule included. The copy counts toward your plan’s automation limit until you delete it.`]}),`\n`,_jsxs(_components.li,{children:[`Change its instructions to “Raise a high-severity test alert with yesterday’s total spend”. Remove the schedule with the trash icon on the `,_jsx(_components.strong,{children:`Schedule`}),` card, then select `,_jsx(_components.strong,{children:`Create automation`}),`. With no trigger, the copy runs only on `,_jsx(_components.strong,{children:`Run now`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Run now`}),` on the copy.`]}),`\n`,_jsx(_components.li,{children:`Delete the copy once the alert arrives.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-if-the-agent-tries-a-write`,children:`What happens if the agent tries a write`}),`\n`,_jsxs(_components.p,{children:[`This automation only reads, so no write ever reaches approvals. If you later extend it, for example “tag the resource that caused the spike”, approvals decide each write before it runs. To check which mode the automation uses, open `,_jsx(_components.strong,{children:`Approvals`}),` > `,_jsx(_components.strong,{children:`Approval mode`}),` and find `,_jsx(_components.strong,{children:`Automations`}),` under `,_jsx(_components.strong,{children:`Run types`}),`. Common choices (the `,_jsx(_components.a,{href:`/guide/automation/autonomous-agents#how-a-write-is-decided`,children:`full list`}),` has five):`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Approval choice for this automation`}),_jsx(_components.th,{children:`A write no Rule covers`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Auto · Rules + AI · Refuse`}),` (default)`]}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/guide/approvals/approval-mode#the-two-modes`,children:`AI judgment`}),` can allow a write that matches what you asked for and stays in scope. A destructive write, or one with an unclear effect, is refused, and the run continues.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto · Rules + AI · Ask me`})}),_jsxs(_components.td,{children:[`Same, but the rest waits. The run shows `,_jsx(_components.strong,{children:`Required Approval`}),` until someone selects `,_jsx(_components.strong,{children:`Approve`}),` or `,_jsx(_components.strong,{children:`Decline`}),` in its conversation.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manual`})}),_jsx(_components.td,{children:`Waits for a person`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`In the Auto choices, a matching Rule decides before any of this, but only once CloudThinker turns on Rule enforcement for your workspace (`,_jsx(_components.a,{href:`/guide/approvals/rules#troubleshooting`,children:`details`}),`). In `,_jsx(_components.strong,{children:`Manual`}),`, every write waits for a person, even one an Allow Rule covers.`]}),`\n`,_jsxs(_components.p,{children:[`For a write the automation makes every day, add an `,_jsx(_components.strong,{children:`Allow`}),` `,_jsx(_components.a,{href:`/guide/approvals/rules`,children:`Rule`}),` on `,_jsx(_components.strong,{children:`Approvals`}),` > `,_jsx(_components.strong,{children:`Rules`}),`, scoped to `,_jsx(_components.strong,{children:`Automations`}),` under `,_jsx(_components.strong,{children:`Runs from`}),`. While the `,_jsx(_components.strong,{children:`Rules`}),` step says `,_jsx(_components.strong,{children:`In preview`}),`, that Rule is only recorded, so AI judgment still decides the write. Once CloudThinker turns on Rule enforcement for your workspace, the Rule runs the write and the run no longer depends on AI judgment or on someone being online. To write one from scratch, type `,_jsx(_components.code,{children:`/create-policy`}),` in a chat (it proposes a Rule that an Admin then accepts) and describe the write. See the `,_jsx(_components.a,{href:`/guide/approvals/rules#ask-for-one-rule-in-chat`,children:`steps`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The run succeeded but nothing posted in Slack`,id:`the-run-succeeded-but-nothing-posted-in-slack`,children:_jsxs(_components.p,{children:[`Either no service crossed 20%, or alerts aren’t routed. Read the run’s conversation first. If it says it raised an alert, check that Slack is on for `,_jsx(_components.strong,{children:`Agent alerts`}),` in `,_jsx(_components.strong,{children:`More → Workspace settings → Notifications`}),`, that its threshold is `,_jsx(_components.strong,{children:`High`}),` or lower, and that the CloudThinker bot is in the channel.`]})}),_jsx(Accordion,{title:`Too many alerts`,id:`too-many-alerts`,children:_jsx(_components.p,{children:`A noisy service crosses 20% most days. Edit the instructions: raise the percentage, add a minimum dollar increase (for example “and at least $50 above its average”), or name services to skip.`})}),_jsx(Accordion,{title:`The run failed or says it has no cost data`,id:`the-run-failed-or-says-it-has-no-cost-data`,children:_jsxs(_components.p,{children:[`Open the run’s conversation for the error. Most often the cloud connection lacks billing permissions. Check the required permissions on your connection’s page, such as `,_jsx(_components.a,{href:`/guide/connections/aws`,children:`AWS`}),`.`]})}),_jsx(Accordion,{title:`The run shows Required Approval`,id:`the-run-shows-required-approval`,children:_jsxs(_components.p,{children:[`The agent attempted a write and your approval choice asks a person. Open the run’s conversation and select `,_jsx(_components.strong,{children:`Approve`}),` or `,_jsx(_components.strong,{children:`Decline`}),`. If you didn’t expect a write, tighten the instructions.`]})}),_jsx(Accordion,{title:`The run stays on Pending`,id:`the-run-stays-on-pending`,children:_jsxs(_components.p,{children:[`It’s queued, or its conversation is busy with another turn. It starts once the conversation is free. If `,_jsx(_components.strong,{children:`Run now`}),` says “A run is already in progress for this task”, wait for that run to finish.`]})}),_jsx(Accordion,{title:`You can't use Run now or New automation`,id:`you-cant-use-run-now-or-new-automation`,children:_jsx(_components.p,{children:`Only workspace Admins can create, edit, and run automations. Developers and Viewers can read them and their runs. Ask an Admin, or ask for the Admin role.`})}),_jsx(Accordion,{title:`The automation turned itself off`,id:`the-automation-turned-itself-off`,children:_jsxs(_components.p,{children:[`Ten runs in a row failed. Fix the cause using `,_jsx(_components.strong,{children:`Run now`}),`, which still works, then turn the automation back on.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Automations`,icon:`calendar-check`,href:`/guide/automation/automations`,children:_jsx(_components.p,{children:`Add webhook, repository, and probe triggers to the same automation`})}),_jsx(Card,{title:`Autonomous operations`,icon:`robot`,href:`/guide/automation/autonomous-agents`,children:_jsx(_components.p,{children:`Set limits for everything that runs without a live prompt`})}),_jsx(Card,{title:`Cost anomalies`,icon:`chart-line`,href:`/guide/cost-optimization/anomalies`,children:_jsx(_components.p,{children:`See the anomalies Optimize already detects for you`})}),_jsx(Card,{title:`Approval Rules`,icon:`list-check`,href:`/guide/approvals/rules`,children:_jsx(_components.p,{children:`Name each routine write and the verdict it should get`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Automation Quickstart","description":"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.","icon":"rocket","href":"/guide/automation/quickstart"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Send agent alerts to Slack","slug":"send-agent-alerts-to-slack","depth":2,"children":[]},{"title":"Create the automation","slug":"create-the-automation","depth":2,"children":[]},{"title":"Test it now","slug":"test-it-now","depth":2,"children":[]},{"title":"What happens if the agent tries a write","slug":"what-happens-if-the-agent-tries-a-write","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cloudthinker","siteName":"CloudThinker","title":"Automation Quickstart - CloudThinker","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/guide/automation/quickstart","matchLevel":0},"vi":{"href":"/guide/automation/quickstart","matchLevel":0},"ja":{"href":"/guide/automation/quickstart","matchLevel":0},"ko":{"href":"/guide/automation/quickstart","matchLevel":0}}},"lastModified":"2026-10-25T10:41:51.413Z","originalFileLocation":"guide/automation/quickstart.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Automation Quickstart - CloudThinker\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CloudThinker\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cloudthinker.io/guide/automation/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Automations\u0026amp;title=Automation+Quickstart\u0026amp;description=Build+a+daily+cost+anomaly+check+that+alerts+a+Slack+channel%2C+test+it+with+Run+now%2C+and+keep+any+write+behind+approvals.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=7f26ca33d6b1e79569a96b5f0a5a5ee3269843e0282c9dee1a111375a1ca144f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Automation Quickstart - CloudThinker\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Automations\u0026amp;title=Automation+Quickstart\u0026amp;description=Build+a+daily+cost+anomaly+check+that+alerts+a+Slack+channel%2C+test+it+with+Run+now%2C+and+keep+any+write+behind+approvals.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=7f26ca33d6b1e79569a96b5f0a5a5ee3269843e0282c9dee1a111375a1ca144f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0c93c0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cloudthinker.io/guide/automation/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guide/automation/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cloudthinker.io/#organization\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cloudthinker.io#website\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cloudthinker.io/guide/automation/quickstart#webpage\",\"url\":\"https://docs.cloudthinker.io/guide/automation/quickstart\",\"name\":\"Automation Quickstart\",\"description\":\"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\",\"dateModified\":\"2026-10-25T10:41:51.413Z\",\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cloudthinker.io/guide/automation/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cloudthinker.io/guide/automation/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"CloudThinker\",\"item\":\"https://docs.cloudthinker.io\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automation Quickstart\",\"item\":\"https://docs.cloudthinker.io/guide/automation/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cloudthinker.io/guide/automation/quickstart#article\",\"headline\":\"Automation Quickstart\",\"name\":\"Automation Quickstart\",\"description\":\"Build a daily cost anomaly check that alerts a Slack channel, test it with Run now, and keep any write behind approvals.\",\"url\":\"https://docs.cloudthinker.io/guide/automation/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cloudthinker.io/guide/automation/quickstart#webpage\"},\"dateModified\":\"2026-10-25T10:41:51.413Z\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CloudThinker\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CloudThinker","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Products","anchors":[{"anchor":"Resolve","icon":"triangle-exclamation","pages":[{"title":"Resolve","href":"/guide/incident/overview"}]},{"anchor":"Review","icon":"code-pull-request","pages":[{"title":"Review","href":"/guide/code-review/overview"}]},{"anchor":"Cyber","icon":"shield-halved","pages":[{"title":"Cyber","href":"/guide/security/cyber-overview"}]},{"anchor":"Optimize","icon":"chart-line","pages":[{"title":"Optimize","href":"/guide/cost-optimization/overview"}]},{"anchor":"Automation","icon":"clock","groups":[{"group":"Automations","pages":[{"title":"Automation Quickstart","icon":"rocket","href":"/guide/automation/quickstart"},{"title":"Automations","description":"Run agent instructions on a schedule, a webhook call, a repository event, or a probe, and review every run and approval.","icon":"calendar-check","href":"/guide/automation/automations"},{"title":"Autonomous Operations","icon":"robot","href":"/guide/automation/autonomous-agents"}]}]}]},{"tab":"Platform","pages":[{"title":"Platform","href":"/guide/connections/overview"}]},{"tab":"Enterprise","pages":[{"title":"Enterprise","href":"/guide/security/overview"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/guide/api/overview"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/learn/aio/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Pricing","href":"https://cloudthinker.io/pricing"}]},{"language":"vi","tabs":[{"tab":"Bắt đầu","pages":[{"title":"Bắt đầu","href":""}]},{"tab":"Sản phẩm","anchors":[{"anchor":"Resolve","icon":"triangle-exclamation","pages":[{"title":"Resolve","href":"/vi/guide/incident/overview"}]},{"anchor":"Review","icon":"code-pull-request","pages":[{"title":"Review","href":"/vi/guide/code-review/overview"}]},{"anchor":"Cyber","icon":"shield-halved","pages":[{"title":"Cyber","href":"/guide/security/cyber-overview"}]},{"anchor":"Optimize","icon":"chart-line","pages":[{"title":"Optimize","href":"/vi/guide/cost-optimization/overview"}]},{"anchor":"Automation","icon":"clock","groups":[{"group":"Tự động hóa","pages":[{"title":"Automation Quickstart","icon":"rocket","href":"/guide/automation/quickstart"},{"title":"Automations","description":"Run agent instructions on a schedule, a webhook call, a repository event, or a probe, and review every run and approval.","icon":"calendar-check","href":"/guide/automation/automations"},{"title":"Vận hành Tự động","icon":"robot","href":"/vi/guide/automation/autonomous-agents"}]}]}]},{"tab":"Nền tảng","pages":[{"title":"Nền tảng","href":"/vi/guide/connections/overview"}]},{"tab":"Doanh nghiệp","pages":[{"title":"Doanh nghiệp","href":"/vi/guide/security/overview"}]},{"tab":"Nhà phát triển","pages":[{"title":"Nhà phát triển","href":"/vi/guide/api/overview"}]},{"tab":"Tài nguyên","pages":[{"title":"Tài nguyên","href":"/vi/learn/aio/introduction"}]},{"tab":"Nhật ký thay đổi","pages":[{"title":"Nhật ký thay đổi","href":"/changelog"}]},{"tab":"Bảng giá","href":"https://cloudthinker.io/pricing"}]},{"language":"ja","tabs":[{"tab":"はじめに","pages":[{"title":"はじめに","href":""}]},{"tab":"プロダクト","anchors":[{"anchor":"Resolve","icon":"triangle-exclamation","pages":[{"title":"Resolve","href":"/ja/guide/incident/overview"}]},{"anchor":"Review","icon":"code-pull-request","pages":[{"title":"Review","href":"/ja/guide/code-review/overview"}]},{"anchor":"Cyber","icon":"shield-halved","pages":[{"title":"Cyber","href":"/guide/security/cyber-overview"}]},{"anchor":"Optimize","icon":"chart-line","pages":[{"title":"Optimize","href":"/ja/guide/cost-optimization/overview"}]},{"anchor":"Automation","icon":"clock","groups":[{"group":"自動化","pages":[{"title":"Automation Quickstart","icon":"rocket","href":"/guide/automation/quickstart"},{"title":"Automations","description":"Run agent instructions on a schedule, a webhook call, a repository event, or a probe, and review every run and approval.","icon":"calendar-check","href":"/guide/automation/automations"},{"title":"自律オペレーション","icon":"robot","href":"/ja/guide/automation/autonomous-agents"}]}]}]},{"tab":"プラットフォーム","pages":[{"title":"プラットフォーム","href":"/ja/guide/connections/overview"}]},{"tab":"エンタープライズ","pages":[{"title":"エンタープライズ","href":"/ja/guide/security/overview"}]},{"tab":"開発者","pages":[{"title":"開発者","href":"/ja/guide/api/overview"}]},{"tab":"リソース","pages":[{"title":"リソース","href":"/ja/learn/aio/introduction"}]},{"tab":"変更履歴","pages":[{"title":"変更履歴","href":"/changelog"}]},{"tab":"料金","href":"https://cloudthinker.io/pricing"}]},{"language":"ko","tabs":[{"tab":"시작하기","pages":[{"title":"시작하기","href":""}]},{"tab":"제품","anchors":[{"anchor":"Resolve","icon":"triangle-exclamation","pages":[{"title":"Resolve","href":"/ko/guide/incident/overview"}]},{"anchor":"Review","icon":"code-pull-request","pages":[{"title":"Review","href":"/ko/guide/code-review/overview"}]},{"anchor":"Cyber","icon":"shield-halved","pages":[{"title":"Cyber","href":"/guide/security/cyber-overview"}]},{"anchor":"Optimize","icon":"chart-line","pages":[{"title":"Optimize","href":"/ko/guide/cost-optimization/overview"}]},{"anchor":"Automation","icon":"clock","groups":[{"group":"자동화","pages":[{"title":"Automation Quickstart","icon":"rocket","href":"/guide/automation/quickstart"},{"title":"Automations","description":"Run agent instructions on a schedule, a webhook call, a repository event, or a probe, and review every run and approval.","icon":"calendar-check","href":"/guide/automation/automations"},{"title":"자율 운영","icon":"robot","href":"/ko/guide/automation/autonomous-agents"}]}]}]},{"tab":"플랫폼","pages":[{"title":"플랫폼","href":"/ko/guide/connections/overview"}]},{"tab":"엔터프라이즈","pages":[{"title":"엔터프라이즈","href":"/ko/guide/security/overview"}]},{"tab":"개발자","pages":[{"title":"개발자","href":"/ko/guide/api/overview"}]},{"tab":"리소스","pages":[{"title":"리소스","href":"/ko/learn/aio/introduction"}]},{"tab":"변경 로그","pages":[{"title":"변경 로그","href":"/changelog"}]},{"tab":"요금","href":"https://cloudthinker.io/pricing"}]}]},"title":"Automation Quickstart - CloudThinker","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-Cz91mEGH.js","DynamicMarkdown-a8hUKrw6.js","zoom-image-lightbox-CaUwvYH3.js","lightbox-handle-r17bVUz3.js"]}