Automation recipes

Ready-made automation rules you can copy — task close-out, board drags, streak counters, auto-tagging and more. Change the property names to yours and paste them in.


Working rules you can lift. Each one is a complete rules entry — paste it into the rules list in ⋯ → Edit automations (JSON), or just describe it to your AI and let it write it.

One thing to change every time: the key values below (done_1, stage_3, …) are examples. Swap in your own property names from the Collection's Properties tab.

Close out a finished task

The classic. Tick the box, and the task files itself away.

{
  "id": "close-out",
  "name": "Close out a finished task",
  "when": { "changed": "done_1", "to": true },
  "then": [{ "op": "set", "key": "stage_3", "value": "done" }]
}

If you also keep a date property for when things were finished, stamp it in the same rule:

{
  "id": "close-out",
  "name": "Close out a finished task",
  "when": { "changed": "done_1", "to": true },
  "if": { "all": [{ "key": "stage_3", "op": "neq", "value": "done" }] },
  "then": [
    { "op": "set", "key": "stage_3", "value": "done" },
    { "op": "set_now", "key": "completed_4" }
  ]
}

The if line means "don't bother if it's already done" — worth adding when a rule stamps a date you don't want overwritten.

The other direction: drag to Done

Dragging a card into your board's done column is a change to the property the board groups by. So the reverse rule needs nothing special:

{
  "id": "drag-to-done",
  "name": "Dropping a card in done ticks it off",
  "when": { "changed": "stage_3", "to": "done" },
  "then": [{ "op": "toggle", "key": "done_1" }]
}

Careful: don't use this together with Close out a finished task — each would set the other off, and Kaizendex will refuse to save the pair. Pick the direction you actually work in.

Re-opening a task

Untick, and it comes back to your week.

{
  "id": "reopen",
  "name": "Unticking reopens the task",
  "when": { "changed": "done_1", "to": false },
  "then": [
    { "op": "set", "key": "stage_3", "value": "do this week" },
    { "op": "clear", "key": "completed_4" }
  ]
}

Every new entry starts somewhere

{
  "id": "start-in-today",
  "name": "New tasks start in do today",
  "when": { "created": true },
  "then": [{ "op": "set", "key": "stage_3", "value": "do today" }]
}

Count the attempts

Every time you push a habit's date forward, count it. Useful for spotting the thing you keep avoiding.

{
  "id": "count-postponements",
  "name": "Count how often this gets pushed",
  "when": { "changed": "due_2" },
  "then": [{ "op": "increment", "key": "postponed_8", "by": 1 }]
}

Auto-tag the heavy ones

{
  "id": "flag-big-sessions",
  "name": "Tag long workouts",
  "when": { "changed": "minutes_4" },
  "if": { "all": [{ "key": "minutes_4", "op": "gte", "value": 90 }] },
  "then": [{ "op": "add_tag", "key": "tags_6", "value": "long session" }]
}

And take the tag off when it no longer applies:

{
  "id": "unflag-short-sessions",
  "name": "Untag workouts that got shorter",
  "when": { "changed": "minutes_4" },
  "if": { "all": [{ "key": "minutes_4", "op": "lt", "value": 90 }] },
  "then": [{ "op": "remove_tag", "key": "tags_6", "value": "long session" }]
}

Those two are safe together: they trigger on the same property but write a different one, so there's no loop.

Clear the blocker when work resumes

{
  "id": "unblock",
  "name": "Moving out of blocked clears the reason",
  "when": { "changed": "stage_3", "from": "blocked" },
  "then": [{ "op": "clear", "key": "blocked_reason_7" }]
}

Stamp when something first starts

{
  "id": "stamp-start",
  "name": "Note when a project got going",
  "when": { "changed": "stage_3", "to": "in progress" },
  "if": { "all": [{ "key": "started_5", "op": "empty" }] },
  "then": [{ "op": "set_now", "key": "started_5" }]
}

The empty check makes it a first start — bounce in and out of "in progress" and the original date survives.

Chaining two rules

A rule's write can set off another rule. This pair moves a task all the way home from one tick:

[
  {
    "id": "tick-sets-stage",
    "name": "Ticking Done sets the stage",
    "when": { "changed": "done_1", "to": true },
    "then": [{ "op": "set", "key": "stage_3", "value": "done" }]
  },
  {
    "id": "stage-stamps-date",
    "name": "Reaching done stamps the date",
    "when": { "changed": "stage_3", "to": "done" },
    "then": [{ "op": "set_now", "key": "completed_4" }]
  }
]

That's one direction the whole way, so it's allowed. Chains stop after three steps.

When a recipe won't save

Read the error table — every rejection points at the exact spot. The two that catch people out:

  • A cycle. Two rules that set each other off. Pick one direction.
  • A key that isn't yours. The property names above are examples; yours are on the Properties tab.