0saas

Job ticket 602741 · consumer · sorting bench · no subscription

Todoist's free tier holds 5 projects and 3 filters. Here is the bench that makes the five do the work of twenty.

This page is a sorting bench. You feed it a life, a pile, or a workflow, a free-tier model returns a five-project architecture, a budgeted week triage, or three paste-ready filter recipes as strict JSON, and your browser prints it as binned cards you export as Markdown. The system is designed to fit Todoist Free's own ceilings — 5 projects, 3 filters — not to outgrow them. Nothing is stored and the prompts are printed at the bottom of this page so you keep them even if this site disappears.

Todoist is a trademark of Doist Inc. This is an independent, unaffiliated comparison built on Todoist's own published pricing page, linked below. We are not Todoist, and nothing here is endorsed by them.

Sorting bench — rendered in this browser

Source: noneRendered: 0Uploaded to 0saas: nothing

Sample data is illustrative, not a claim about Todoist. Every Todoist figure on this page comes from the linked pricing page, read 2026-09-17.

The prompt pack

Three prompts, each mapped one-to-one onto a Todoist feature you are currently rationed on. Run them from this page with a free key, or copy them into any free chat model — the text is identical either way, and it is printed in full at the bottom of this section so it survives this site.

Loading the pack from tools.json… If this fails, the full prompt text is still readable below.

What Todoist's own pricing page says

Read from todoist.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.

Todoist Beginner vs Pro vs this page — verified 2026-09-17
The jobBeginner (Free)Pro (US$5/user)This page + a free-tier model
PriceUS$0 — 5 projects, 3 filtersUS$5 per user / month (billed annually)US$0 forever. A free-tier key costs nothing; the prompts are yours.
Project structure5 projects, unaidedUnlimited projects, shared labelsUnmetered by us — the architecture is a file. Prompt 01 designs five projects that cover the whole brief without overlap; your ally's free allowance is the only ceiling.
Weekly triageManualReminders and advanced filtersPrompt 02 sorts the pile into do/schedule/delegate/drop with a 5-item, 240-minute budget on the do-list — the budget is the discipline, not the feature.
Filters3 filtersUnlimited filters, custom viewsPrompt 03 fills the three free slots with paste-ready recipes that cover today, debt, and review — the three questions a week actually asks.
Activity history1 weekUnlimitedThe Markdown export is the history. Each weekly triage is a file; the files are the record.
Who sees your tasksTodoistTodoistOnly the inference provider you choose — or nobody at all in Copy-Paste Relay.

What this replaces, and what it does not

A displacement claim you cannot substantiate is a lie with good typography. This is the whole scope, including the parts where Todoist wins.

Replaced: the 5-project limit as a ceiling

Prompt 01 turns the ceiling into a design constraint: five projects with non-overlapping rules, one now-project, and a capture rule that keeps the inbox at zero.

Replaced: the weekly planning ritual

Prompt 02 returns the four-bucket triage with a minute budget on the do-list and a reason attached to every drop.

Replaced: Pro's filter depth

Prompt 03 returns three exact, paste-ready queries that answer today / broken / needs-decision — the three questions that matter.

Not replaced: task storage and sync

No tasks are stored here. The architecture is built into Todoist Free (or any tool) once; the triage is re-run weekly as a file.

Not replaced: reminders and notifications

No nudge engine. The system's moments (09:00, 15:00, Friday) are written into the filter recipes; the clock is yours to keep.

Not replaced: team features

Shared labels and team boards are out of scope by design — this bench is solo. A team system is a different tool's job.

The prompts, in full, as text

Copy these into any model. They are the product; the page around them is convenience. Each block is the exact system prompt the interactive runner sends, plus the user-message template.

Prompt 01 — 1. Project architect · todoist-project-arch v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Todoist Free's 5-project ceiling — the architecture that fits a whole life into five projects on purpose, instead of outgrowing the free tier.

Why this model: The architecture is a bounded classification: exactly five projects, everything placed; strict-JSON keeps the completeness contract auditable in the answer. Fallback ally: OpenRouter — :free model variants.

System prompt (1797 chars):

You are the architect at a sorting bench. You turn a description of a life or a work into a machine-readable project architecture for a task tool with a 5-project ceiling.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "system": string (max 8 words),
  "kicker": string (max 6 words),
  "items": [
    { "title": string (max 8 words), "body": string (max 40 words), "tag": string (max 10 words) }
  ],
  "inbox_rule": string (max 25 words),
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. Exactly 5 "items" — the ceiling is the constraint the design must respect, not an inconvenience. Each "title" is a project name; "body" states the one-sentence rule for what belongs there and what does not; "tag" names the review cadence (e.g. "daily", "weekly", "monthly", "as-needed").
2. The five projects must cover everything in the brief without overlap: any task the brief mentions must have exactly one home project. If two projects could both claim a task, the rule in "body" must close the gap by naming the deciding question.
3. One project must be the 'now' project — the only place a task without a date lives. Its "tag" is "daily" and its body states the max size (10 visible tasks) and what happens to overflow (schedule, delegate, or drop — name which).
4. "inbox_rule" states in one sentence how a new capture gets a home: the first question asked, the default project when the answer is unclear, and the weekly 10-minute pass that keeps the inbox at zero.
5. Never invent an area the brief does not have. A brief about work only gets work projects; adding a 'home' project to a work-only brief is padding and is banned.
6. Banned project names: 'Misc', 'Other', 'Personal', 'Work' — a project name must predict its contents. Write in the language of the brief.

User message template:

The life or work to structure (areas, recurring things, what keeps breaking): {{areas}} The tool's ceiling (blank for 5 projects): {{ceiling}}

Variables:

  • {{areas}} — Areas (max 800 chars) sample data shipped with the tool
  • {{ceiling}} — Ceiling (max 20 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "system", "kicker", "items", "inbox_rule", "notes" ], "properties": { "system": { "type": "string" }, "kicker": { "type": "string" }, "items": { "type": "array", "minItems": 5, "maxItems": 5 }, "inbox_rule": { "type": "string" }, "notes": { "type": "array" } } }

Decoding: temperature 0.6 · max 1600 output tokens · responseMimeType application/json · budget ~800 in / ~700 out per run · cost per run: 1 request — a rounding error against the Gemini free tier's daily base.

Prompt 02 — 2. Week triage · todoist-week-triage v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: The weekly planning session Todoist's Pro features (shared labels, reminders, advanced filters) are designed to make easier — the pile sorted into do/schedule/delegate/drop.

Why this model: Triage is a four-way classification with a per-bucket budget; strict-JSON keeps the counts bounded and the drop list explicit, which chat models skip. Fallback ally: OpenRouter — :free model variants.

System prompt (1614 chars):

You are the triage clerk at a sorting bench. You turn a week's task pile into a machine-readable triage.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "week": string (max 8 words),
  "kicker": string (max 6 words),
  "items": [
    { "title": string (max 12 words), "body": string (max 25 words), "tag": "do" | "schedule" | "delegate" | "drop" }
  ],
  "do_budget": { "max_items": integer, "max_minutes": integer },
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. Every task in the input pile appears in exactly one item. "items" is grouped by tag in this order: do, schedule, delegate, drop. The count of items must equal the count of tasks in the pile.
2. "do" items are capped at "do_budget.max_items" (default 5 if the brief gives no number) — a do-list longer than 5 is a triage failure, and the overflow must move to schedule with the reason in "body".
3. "do_budget.max_minutes" defaults to 240 (a 4-hour working window); the do items' "body" values each carry an estimate (e.g. "~25 min") and the estimates must sum to no more than max_minutes. Compute the sum; if it exceeds the window, move the longest estimate to schedule.
4. "delegate" requires a named delegate from the brief; a task with no named delegate is scheduled or dropped, never delegated to an imaginary person.
5. "drop" items get a "body" stating the one-sentence reason the drop is safe (no owner depends on it, the deadline passed, the need is covered by X from the brief). A drop without a reason is banned.
6. Banned: 'someday', 'eventually', exclamation marks, emoji. Write in the language of the pile.

User message template:

The week's pile (one task per line, context in brackets if any): {{pile}} The working window (minutes; blank for 240): {{window}}

Variables:

  • {{pile}} — The pile (max 2500 chars) sample data shipped with the tool
  • {{window}} — Working window (max 12 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "week", "kicker", "items", "do_budget", "notes" ], "properties": { "week": { "type": "string" }, "kicker": { "type": "string" }, "items": { "type": "array" }, "do_budget": { "type": "object" }, "notes": { "type": "array" } } }

Decoding: temperature 0.4 · max 1700 output tokens · responseMimeType application/json · budget ~1,200 in / ~700 out per run · cost per run: 1 request per triage — under 1% of the Gemini free tier's daily base.

Prompt 03 — 3. Filter recipes · todoist-filter-recipes v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Todoist Pro's unlimited filters — the three filter slots of the free tier, filled with recipes that do the work of ten.

Why this model: Filter recipes are exact query strings with a stated purpose; strict-JSON keeps the syntax atomic so the reader pastes them straight into the free tier's three slots. Fallback ally: OpenRouter — :free model variants.

System prompt (1773 chars):

You are the filter clerk at a sorting bench. You turn a description of how someone works into exactly three task-tool filter recipes for a free tier with a 3-filter ceiling.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "system": string (max 8 words),
  "kicker": string (max 6 words),
  "items": [
    { "title": string (max 8 words), "body": string (max 45 words), "tag": string (max 10 words) }
  ],
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. Exactly 3 "items" — the ceiling is the design constraint. Each "title" is the filter's name; "body" is the filter query in standard task-tool syntax (e.g. "today | overdue", "project:X & !done", "label:Y & due:7d") followed by one sentence stating what it is for; "tag" names when to open it (e.g. "morning", "before standup", "friday").
2. The three filters must cover: today's work (nothing due today is invisible), the follow-up debt (overdue or waiting-on-something), and the weekly review (the set that needs a decision this week). A fourth 'everything' filter is banned — the app's inbox is already that.
3. Every project name and label used in a query must come from the architecture or the brief — never invent a label the system does not have. If the brief gives no labels, use project and due-date syntax only.
4. "body" must be paste-ready: no placeholders, no 'and so on'. If the query cannot be written exactly from the brief, write the closest exact query and flag the gap in "notes".
5. The three filters must be able to answer, together, 'what do I do now, what is broken, what needs a decision' — if the set cannot answer all three, the design is wrong; fix the set, not the question.
6. Banned: 'smart', 'auto', exclamation marks, emoji. Write in the language of the brief.

User message template:

How you work (projects, labels if any, the moments you check the list): {{workflow}}

Variables:

  • {{workflow}} — Workflow (max 700 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "system", "kicker", "items", "notes" ], "properties": { "system": { "type": "string" }, "kicker": { "type": "string" }, "items": { "type": "array", "minItems": 3, "maxItems": 3 }, "notes": { "type": "array" } } }

Decoding: temperature 0.45 · max 1300 output tokens · responseMimeType application/json · budget ~800 in / ~500 out per run · cost per run: 1 request — a rounding error against the Gemini free tier's daily base.

Questions worth asking before you cancel

Is this actually free, or is there a subscription hiding?

There is no subscription and, right now, no paid tier at all. The whole tool is unmetered. A one-time unlock for system migration export is planned, but no price is shown anywhere on this site until a real Stripe Payment Link exists and its price is read back from Stripe's API rather than typed by hand.

Do you need an API key?

No. Copy-Paste Relay works with any free chat model you already use: copy the prompt block, paste it in, paste the JSON answer back into the box. A key only removes the copy-paste step. If you do use one, it is stored in your browser's localStorage and sent only to that provider — 0saas has no endpoint that accepts a key.

Which free model is best for this?

The Gemini free tier — the triage's minute budget and the filters' exact syntax need a model that will not round a number or loosen a query. OpenRouter's :free variants are the second-opinion pick for the architecture.

Will the filter recipes actually paste into Todoist?

They are written in standard task-query syntax (project, due-date, done, label operators) — the same grammar Todoist's free tier accepts. If a project name in the recipe does not match yours, rename it in the recipe; the query shape stays.

Is 0saas affiliated with Todoist?

No. Todoist is a trademark of Doist Inc. We name it because a comparison that will not name the thing it compares against is useless. Pricing figures come from Todoist's own pricing page, linked above, with the date we read it and a per-field confidence marker.

Next on the ledger