Trigger Ideas
July 2, 2026 · View on GitHub
Candidate triggers for the bundled kanban workflow. Each represents a common workflow pattern.
- WIP limit per assignee
- Require description for high-priority tasks
- Auto-create next occurrence for recurring tasks
- Return stale in-progress tasks to inbox
- Unblock tasks when dependencies complete
- Prevent re-opening completed tasks directly
- Auto-assign creator on start
- Escalate overdue tasks
- Require points estimate before done
- Auto-tag bugs as urgent when high priority
- Prevent projects from being assigned
- Auto-remove urgent tag when priority drops
- Notify on critical task creation via webhook
- Spike time-box
- Require task breakdown for large estimates
- Propagate priority from project to children
- Auto-set due date for in-progress tasks
- Require a title on creation
- Prevent creating tasks as done
- Projects require a description at creation
- Prevent deleting projects with active children
- Block deletion of high-priority tasks
WIP limit per assignee
Prevent overloading a single person with too many active tasks.
- description: limit work in progress to 3 tasks per assignee
ruki: >
before update
where new.status = "inProgress"
and new.assignee is not empty
and count(select where assignee = new.assignee and status = "inProgress" and id != new.id) >= 3
deny "WIP limit reached: assignee already has 3 tasks in progress"
Require description for high-priority tasks
Force authors to provide context before something becomes urgent.
- description: high priority tasks must have a description
ruki: >
before update
where new.priority <= "medium-high" and new.description is empty
deny "high priority tasks require a description"
Auto-create next occurrence for recurring tasks
Recurring tasks automatically regenerate when completed.
- description: spawn next occurrence when recurring task completes
ruki: >
after update
where new.status = "done" and old.recurrence is not empty
create title=old.title priority=old.priority tags=old.tags
recurrence=old.recurrence due=next_date(old.recurrence) status="inbox"
Return stale in-progress tasks to inbox
Tasks untouched for 7 days are likely blocked or abandoned.
- description: return stale in-progress tasks to inbox after 7 days
ruki: >
every 1day
update where status = "inProgress" and now() - updatedAt > 7day
set status="inbox"
Unblock tasks when dependencies complete
Automatically promote tasks to ready when all their dependencies are done.
- description: unblock ready tasks when all dependencies complete
ruki: >
after update
where new.status = "done" and old.status != "done"
update where old.id in dependsOn and dependsOn all status = "done"
set status="ready"
Prevent re-opening completed tasks directly
Enforce a deliberate re-triage step through ready status.
- description: prevent moving done tasks back to in-progress
ruki: >
before update
where old.status = "done" and new.status = "inProgress"
deny "cannot reopen completed tasks directly — move to ready first"
Auto-assign creator on start
If you pull something into in-progress without assigning it, you implicitly own it.
- description: auto-assign tasks to creator when moved to in-progress
ruki: >
after update
where new.status = "inProgress" and new.assignee is empty
update where id = new.id set assignee=user()
Note: this is the permissive alternative to the "require assignee before starting" trigger that ships in the bundled kanban workflow. Use one or the other, not both.
Escalate overdue tasks
Overdue items that aren't already P1 get automatically escalated.
- description: escalate overdue tasks by raising priority
ruki: >
every 1day
update where due < now() and status not in ["done"] and priority > "high"
set priority="high"
Require points estimate before done
Ensures the team reflects on effort before work is marked complete.
- description: tasks must be estimated before being marked done
ruki: >
before update
where new.status = "done" and new.points = 0
deny "estimate points before moving to done"
Auto-tag bugs as urgent when high priority
High-priority bugs should be visually flagged without relying on humans to remember.
- description: auto-tag high priority bugs as urgent
ruki: >
after update
where new.type = "bug" and new.priority <= "medium-high" and "urgent" not in new.tags
update where id = new.id set tags=tags + ["urgent"]
Prevent projects from being assigned
Projects are containers, not actionable units — assign individual tasks instead.
- description: projects track work groups and should not be assigned
ruki: >
before update
where new.type = "project" and new.assignee is not empty
deny "projects represent work groups — assign individual tasks instead"
Auto-remove urgent tag when priority drops
Paired with "auto-tag bugs as urgent" to keep tags in sync with priority.
- description: remove urgent tag when priority is lowered
ruki: >
after update
where old.priority <= "medium-high" and new.priority > "medium-high" and "urgent" in new.tags
update where id = new.id set tags=tags - ["urgent"]
Notify on critical task creation via webhook
P1s deserve immediate attention — shell integration bridges tiki to external alerting.
- description: fire webhook when a P1 task is created
ruki: >
after create
where new.priority = "high"
run("curl -s -X POST https://hooks.example.com/tiki -d 'P1 created: " + new.id + " - " + new.title + "'")
Spike time-box
Spikes are investigation tasks — they should be time-boxed by definition.
- description: time-box spikes to 3 days
ruki: >
every 1day
update where type = "spike" and status = "inProgress" and now() - updatedAt > 3day
set status="done"
Require task breakdown for large estimates
Large estimates are a smell — nudge toward decomposition for better flow.
- description: large tasks should be broken into smaller pieces
ruki: >
before update
where new.points >= 8 and new.type != "project"
deny "tasks with 8+ points should be broken down — use a project instead"
Propagate priority from project to children
When a project gets escalated, its children should follow.
- description: raise child task priority when project priority increases
ruki: >
after update
where new.type = "project" and new.priority < old.priority
update where new.id in dependsOn and priority > new.priority
set priority=new.priority
Auto-set due date for in-progress tasks
Tasks without deadlines drift forever — a default creates gentle pressure.
- description: default 7-day due date when work starts
ruki: >
after update
where new.status = "inProgress" and new.due is empty
update where id = new.id set due=now() + 7day
Require a title on creation
Every task needs at least a title — catch empty tasks at the gate.
- description: tasks must have a title
ruki: >
before create
where new.title is empty
deny "tasks must have a title"
Prevent creating tasks as done
New tasks should enter the workflow, not skip it entirely.
- description: new tasks cannot start as done
ruki: >
before create
where new.status = "done"
deny "cannot create a task that is already done"
Projects require a description at creation
Projects define scope — a description ensures the goal is documented upfront.
- description: projects require a description at creation
ruki: >
before create
where new.type = "project" and new.description is empty
deny "projects must have a description explaining the goal"
Prevent deleting projects with active children
Deleting a project should not orphan its child tasks.
- description: cannot delete projects that still have linked tasks
ruki: >
before delete
where old.type = "project" and count(select where old.id in dependsOn and status != "done") > 0
deny "cannot delete project with active child tasks"
Block deletion of high-priority tasks
P1 tasks require explicit demotion before they can be removed.
- description: P1 tasks require explicit demotion before deletion
ruki: >
before delete
where old.priority = "high"
deny "cannot delete a P1 task — lower priority first"