The moment it happens
Tick off Google Tasks when a commit finishes them
When you push commits, tasks they finish are marked done in Google Tasks and Slack hears about it.
- Runs
- The moment it happens
- Apps
- Google Tasks, Slack
- AI
- Yes, uses the built-in AI allowance
- Access
- tasks; chat:write
Send this to your assistant
Create a ClickRuntime automation: when my GitHub repo gets a push, match the commit messages to my open Google Tasks, mark the matches complete and post them to #dev.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Developers who keep their to-do list in Google Tasks end up doing the work twice: once in code, once ticking the box. The box gets forgotten, so the list drifts out of date and stops being trusted.
Solo developers, small product teams and freelancers use it to keep their task list honest without extra clicks, and to let others see progress in Slack as it happens.
What you get out of it
Your list stays current
Tasks finished in code are ticked off at the same moment, so the list reflects what is really left.
Progress others can see
A Slack post tells the team which tasks a push completed, which saves status questions.
Matching by meaning
Commit messages rarely repeat a task's exact wording. AI matches "fix invoice rounding" to the task Rounding bug on Acme invoices.
Only clear matches count
Tasks are completed only when a commit clearly finishes them, so a passing mention does not close anything.
How it works
What happens, step by step
When you push to your GitHub repository, GitHub sends the push to your automation's link and ClickRuntime checks that it really came from GitHub.
It reads the commit messages and your open Google Tasks.
AI picks the tasks that the commits clearly finish.
Those tasks are marked complete, and a Slack message lists them with the commit that closed each.
Before it runs live
- Connect Google Tasks
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Google Tasks and Slack steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_event, credentials, notify, ai
SCHEMA = {"type": "object", "properties": {"done": {"type": "array", "items": {"type": "object", "properties": {
"task_id": {"type": "string"}, "commit": {"type": "string"}}}}}}
@on_event
def handle(event):
if not event.is_verified:
return {"skipped": "unverified"}
commits = [c["message"].splitlines()[0] for c in (event.json or {}).get("commits", [])]
if not commits:
return {"completed": 0}
tasks = build("tasks", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).tasks()
open_tasks = {t["id"]: t["title"] for t in tasks.list(tasklist="@default", showCompleted=False).execute().get("items", [])}
if not open_tasks:
return {"completed": 0}
matches = ai.generate("Which tasks do these commits clearly finish? Only include certain matches.\nTasks:\n"
+ "\n".join(f"{i}: {t}" for i, t in open_tasks.items()) + "\nCommits:\n" + "\n".join(commits),
json_schema=SCHEMA, max_output_tokens=300).json["done"]
lines = []
for m in matches:
if m["task_id"] in open_tasks:
tasks.patch(tasklist="@default", task=m["task_id"], body={"status": "completed"}).execute()
lines.append(f"• {open_tasks[m['task_id']]} ← {m['commit']}")
if lines:
notify.slack(f"Completed by push to {event.json['repository']['name']}:\n" + "\n".join(lines), channel="#dev")
return {"completed": len(lines)}FAQ
Common questions
Do I need to mention the task in the commit?
Can it complete the wrong task?
Is the push from GitHub checked?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Turn requests sent to a link into Google Tasks
Requests sent from a form or another tool become well-titled Google Tasks with a due date, and Slack confirms each one.
See how it worksTurn a meeting transcript into Slack minutes and Google Tasks
Send a meeting transcript and get tidy minutes in Slack, with each of your action items added to Google Tasks.
See how it worksTurn action emails into Google Tasks and flag urgent ones in Slack
Emails asking you to do something become Google Tasks, and the urgent ones also reach you in Slack.
See how it worksKeep exploring
Set up “Tick off Google Tasks when a commit finishes them” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.