Three workflows that survive contact with real work
The automation tutorial is a genre with a trust problem. The screenshots show the happy path, the checkmarks are all green, and nobody mentions that the trigger stopped firing quietly in March and the author never noticed. This is the opening entry in Workflows, and the franchise promise runs the other way: every workflow here is built from documentation you can open yourself, and every one ships with its failure modes attached.
Three this week. Each takes under an hour to set up with tools that are free or close to it. Each has a catch the marketing page buries.
Mail becomes a task, mostly
Start with the oldest promise: getting things out of your inbox and into a task manager without retyping them. Todoist’s version needs no third-party glue at all. Every project has its own email address — open the project menu, pick “Email tasks to this project,” and forward anything there. The subject line becomes the task name, and you can pack metadata straight into it: @label for labels, p1 through p3 for priority, and a due date written as <date tomorrow> or <date every last day>. Per the docs, the word “date” inside the brackets is required, a detail that will cost you exactly one confused afternoon. The feature is available on Beginner, Pro, and Business plans.
Now the catches, all from Todoist’s own help page. First, the message text doesn’t become the task description: “the body of the email will be added as an attachment in a comment” — which means the actual content of the email is not searchable text inside the task. If your retrieval habit is search, this pipeline just buried your information one layer deeper than your inbox did. Second, you can’t forward to a section of a project. Routing stops at the project level, so a carefully sectioned board flattens back into a pile on arrival.
If you need real logic (route by sender and fan out to Slack, or skip anything that smells like a newsletter), the standard answer is Zapier, and here the fine print matters more than the feature list. Zapier triggers come in two kinds, per its own documentation: instant triggers, where the app pushes events over a webhook the moment they happen, and polling triggers, where Zapier checks for new items on a schedule set by your plan. Free accounts poll every 15 minutes. Professional polls every 2 minutes, Team and Enterprise every minute. Triggers also only see data created after they’re switched on, and bulk operations can trip Zapier’s flood protection and delay processing.
Fifteen minutes is fine for tasks. It is not fine for anything a person is actively waiting on.
Capture now, read never
The research-capture flow has one job: when you find something worth keeping, get it into your notes with its source attached in under ten seconds, because anything slower means you won’t do it. The strongest free tool for this right now is Obsidian’s Web Clipper, a browser extension for Chromium browsers, Firefox, Safari, and Edge that converts pages to Markdown and files them into a local vault. It has a highlighter for saving passages instead of whole pages, and a template system with variables, filters, and if/for logic, so an academic paper and a news article can land in different folders with different frontmatter, automatically. The extension collects no usage data, and the code is public.
The catch is that “convert any web page to clean Markdown” is a heuristic, not a guarantee. The clipper relies on Defuddle, a parsing library that guesses which parts of a page are the article — and on script-heavy or aggressively templated sites, the guess misses. The project’s issue tracker carried roughly 220 open issues at this writing, and the README’s own roadmap is candid about gaps: annotating your highlights isn’t implemented yet, and settings don’t sync across browsers, so the template library you built in Chrome simply does not exist when you open Firefox.
The larger failure mode is one no changelog will fix, and it’s our argument, not a bug report: capture tools optimize the cheap half of research. A vault of ten thousand clippings retrieves nothing on its own. The cheapest countermeasure lives inside the same template system. Add a field that asks why you’re saving this, and let any clip you can’t answer for die unclipped.
The gate at the end
The third workflow is a publishing checklist that runs itself: before anything ships, a machine checks the links and lints the prose. If you publish through Git in any form, whether that’s a docs site or a newsletter repo, this costs you two YAML files.
For links, lychee-action wraps the Rust-based lychee checker in a GitHub Action. The minimal setup is a checkout step plus lycheeverse/lychee-action@v2 on a cron schedule, and by default a broken link fails the run; setting fail to false downgrades it to a report. For prose, Vale is an MIT-licensed linter that reads Markdown, AsciiDoc, reStructuredText, and HTML, checks them against rules written in YAML, and ships ready-made implementations of the Microsoft and Google style guides. It runs entirely offline. Between the two, a real fraction of an editorial checklist becomes free and automatic.
As for failure modes, this corner of open source documents its own with unusual honesty. The web lies to link checkers. A long-running lychee issue catalogued more than 40 major sites (Ticketmaster, Coinbase, and Home Depot among them) that return 403 Forbidden to anything that doesn’t fingerprint as a real browser, mostly courtesy of bot-detection layers like Cloudflare. Your link works for humans; your checker swears it doesn’t. The maintainers briefly shipped a change treating 403 as a pass, then walked it back after a longtime user reported in the thread that it had hidden real failures in his production runs:
403 is definitely not a success code, it says that server refuses to authorize the request.
What the maintainers shipped instead is configurable honesty: an accept flag that takes status ranges, such as 200..=206,403, so you decide which lies to tolerate. Lychee’s troubleshooting docs supply the rest of the survival kit for rate limiting: cache results with a max cache age of a day so scheduled runs stop rehammering the same hosts, throttle concurrency, set retries to zero, and pass a GitHub token, which lifts GitHub’s own allowance to 1,000 requests per hour per repository.
Vale’s failure mode is quieter and worse. Style rules fire on quoted material, product names, and other people’s prose, and every false positive spends a little of your patience. Our read: the predictable endgame is setting fail to false “temporarily,” then permanently, at which point your gate is a log nobody reads. Adopt one rule set and delete any rule you’ve overridden three times. Never let the check go red over something you don’t actually intend to fix.
Every workflow here eventually keeps a file of exceptions. Lychee’s is literally named .lycheeignore: one regular expression per line, one line for each site that decided your robot isn’t welcome. Create it on day one. It only grows.
Priya covers the physical infrastructure of the digital world: power grids, data centres, undersea cables, and the climate math that ties them together. Based in New Delhi.
Leave a Reply