Tasks, projects, and processes
CalKeep's productivity layer organizes the work that happens after a meeting ends. Three layers stack:
- Tasks — single units of work. The most flexible.
- Projects — a group of tasks owned by a team.
- Processes — templates that spawn the same set of tasks every time you start a new run (e.g., a customer-onboarding sequence).
Find them under Productivity in the sidebar.
Plan tier
| Layer | Plan |
|---|---|
| Tasks (Inbox + scheduling + reminders) | All plans |
| Projects | Pro and above |
| Processes | Pro and above |
| Reviewer workflow | All plans |
| WhatsApp reminders | Pro and above (with explicit opt-in) |
| Task import (guarded) | Business and Enterprise |
Tasks
Each task lives in exactly one container:
- Inbox — your private to-do list. Inbox tasks cannot be assigned to others.
- Project — shared with project members.
- Process run — spawned by a process template.
Status is fixed: todo, doing, or done.
Inbox
Open Tasks → Inbox for tasks with no project and no process run. These are private to the creator and cannot be assigned, even if you're a workspace admin.
This is intentional — Inbox is for personal work, not delegation.
Subtasks
A task can have one level of subtasks. Subtasks cannot themselves have subtasks. (Two-level nesting is deliberately prevented to keep workflows shallow.)
Recurring tasks
A task can carry an RRULE. When you complete it:
- The current row's
dueDateis advanced to the next occurrence. - New reminders are generated for the new due date.
- The completion is appended to a
TaskCompletionHistoryrecord.
When the RRULE runs out, the task is marked truly done. There's no
master/exception split — recurring tasks are simpler than recurring events
on purpose.
Reminders
Each task can carry reminders on multiple channels:
- In-app — CalKeep notification inbox.
- Email — branded email reminder.
- SMS — text (number required on user profile).
- Push — mobile/desktop push (when the apps are installed).
- WhatsApp — Pro+ tier, with explicit user opt-in.
Reminders are regenerated whenever you change the task's due date. Cancellations on completion or delete cancel pending reminders.
The reminder worker batches every 2 minutes. Overdue reminders (>24h) fall back to in-app only.
Task links
A task can link to a contact, calendar event, or booking. The link is polymorphic and visibility-gated:
- Read access requires read access to the linked resource.
- Inaccessible links are hidden from the user, with a
hiddenLinkCountshown so you know there's something you can't see.
This is how "the task you owe Joe after Wednesday's call" stays connected to both Joe (contact), the call (event), and the booking record without manually re-linking.
Reviewer workflow
Tasks can be assigned a reviewer. When the assignee marks the task done:
- The task moves to a
needsReviewstate. - The reviewer sees it in their Review queue.
- Reviewer approves or kicks back with a comment.
Use this for QA-style workflows or anything where "done" needs a second pair of eyes.
Schedule a task to your calendar
Click Schedule on a task to create a real calendar event for it. The
event is created on the calendar you select, mirrored to other connected
calendars per your role rules, and linked back to the task via
sourceTaskId.
Title and description changes on a scheduled task propagate to the linked calendar event. Due-date changes on the task do not automatically move the calendar event — scheduling is your plan, not an echo of the due date.
If the linked calendar event is deleted from a connected provider, CalKeep detects this during sync and unlinks the task — it doesn't delete the task.
You can also drag a task from the unscheduled-tasks tray onto the calendar at My Calendar for precise drop-into-slot scheduling.
Projects
Projects are shared task containers with members.
Roles
- Owner — can edit project settings, add/remove members, delete.
- Member — can create, edit, complete tasks within the project.
Membership
A project task can only be assigned to project members. Adding someone to a project lets them be assigned tasks within it; removing someone clears their assignments on active project tasks (and notifies them).
Delete a project
Deleting a project requires a taskDisposition:
| Disposition | What happens |
|---|---|
| delete | All project tasks are deleted. |
| orphan | Tasks move to the creator's Inbox; non-creator assignees and reviewers are cleared; reminders for users losing access are cancelled. |
If a task's creator has left the workspace and you orphan, the task is hard-deleted (since there's no Inbox owner left).
Processes
A process is a template. Each run is an instance.
Use processes when the same multi-step workflow repeats — customer onboarding, employee onboarding, weekly QBR, monthly compliance check.
Process structure
A process has:
- Ordered steps — each spawns one task per run.
- Members — the pool of users who can be assigned process tasks.
- Optional
RRULE— for processes that auto-restart on a cadence.
Each step has either:
offsetDays— due N days after the run starts. Most common.absoluteDate— due on a fixed date regardless of when the run started. Mutually exclusive with offset.
(The two are mutually exclusive per step. Absolute dates don't recompute
per run, so a process with RRULE and absolute-date steps shows a soft
warning at edit time.)
Process runs
When you start a run:
- CalKeep spawns one task per step, applies the offset/absolute due dates, and copies the step's defaults onto the task.
- The run lives at Processes → [process] → [run] with its own task board.
- When all tasks are done, mark the run complete (or archive it).
Auto-spawn
If a process has an RRULE, the auto-spawn worker creates a new run on
the cadence. Catch-up is one-spawn — if the worker missed several
intervals while paused, only one new run is created, not a backlog. The
new run gets a name suffix if there's a collision.
Removing a member
Removing a member from a process cascades to active run tasks: their assignee/reviewer slots are cleared, and they receive a notification. This prevents orphaned task ownership.
Filtering tasks
The Tasks page supports several filter views:
- Inbox — private tasks (no project, no run).
- Assigned to me — across all containers.
- Review queue — tasks where I'm the reviewer and
needsReviewis true. - Status — todo, doing, done.
- Due before / after — date ranges.
- Include subtasks — show or collapse one-level subtasks.
- Include completed — show done tasks.
Programmatic access
The tasks:read and tasks:write token scopes are defined and can be
selected when issuing an API token, but the underlying /api/v1/tasks
endpoints are still under construction. Watch API tokens
for the resource-coverage table that reflects what's live.
task.created and task.completed webhooks fire on commit and can be
subscribed to today. See Webhooks.
Buyer-facing positioning
For how this fits into a real customer-service or sales-team workflow, see: