Task Tools
create_task
Create a new global task type (work-category label used across projects, e.g. Design, Development, Admin). Owner only.
Console-only — not reachable from Slack; use the web console.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, task_name, is_billable (optional, default false)
VERA checks for a case-insensitive duplicate before creating. After creation, VERA will offer to enable the task on a named project if one was mentioned.
Returns: task_id, task_name, is_billable
rename_task
Rename a task globally. The new name appears on all historical time entries immediately. Owner only.
Console-only — not reachable from Slack; use the web console.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, old_name, new_name
Returns: task_id, old_name, new_name, entries_affected
update_task
Update a task's is_billable flag. Owner only. VERA shows a before/after confirmation before calling this tool.
Console-only — not reachable from Slack; use the web console.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, task_id, is_billable
Archived tasks are rejected as write targets — unarchive first if needed.
Returns: task_id, task_name, is_billable
archive_task
Archive a task so it no longer appears in menus or as a write target. Historical time entries referencing it are preserved. Owner only.
Console-only — not reachable from Slack; use the web console.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, task_name
Hard fails if the task is currently enabled on any active project — disable it on those projects first. Use
unarchive_taskto restore.
unarchive_task
Restore an archived task to active status. Owner only.
Console-only — not reachable from Slack; use the web console.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, task_name
list_tasks
List all task types. Active tasks only by default.
Reads from: 05. Tasks
Parameters: requesting_user_slack_id, include_archived (optional bool)
Returns: array of { id, name, is_billable, status } for each task
set_task_discipline
Attribute a task to a discipline, so time logged against it counts toward that discipline's by-discipline reporting. Owner only.
Console-only — not reachable from Slack; use the web console.
Updates: 05. Tasks
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
task_id | ✅ | |
discipline_id | Must be an active discipline. Empty clears the attribution. |
Many tasks can attribute to the same discipline — this is the real attribution link behind Segmentation and Estimates vs. actuals by-discipline reporting. It's a separate thing from a discipline's own suggested-task convenience field (see set_discipline_default_task on the User Tools page), which points the other direction.
set_task_notes
Set a free-text elaboration on a task, kept separate from its short name so tabular Task columns stay narrow. Shown on hover (name — notes) rather than as its own column. Owner only.
Console-only — not reachable from Slack; use the web console. Audit-silent — does not post to the audit channel.
Updates: 05. Tasks
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
task_id | ✅ | |
notes | Free text, max 200 characters. Empty or absent clears the notes. |
Set from the per-task Edit modal on /console/tasks, separate from the rename/archive and discipline forms. Never set on task creation — like discipline, notes are added on edit once the task exists.
enable_task_for_project
Enable a task for a specific project, making it available when logging time to that project. Owner or assigned PM (PM-of-project gated — a Manager who is not the PM is denied).
Console-only — not reachable from Slack; use the web console.
Writes to: 06. Project_Tasks
Parameters: requesting_user_slack_id, project_name, task_name, budget_hours (optional), alert_threshold (optional, default 80)
Permission note (updated #1090): Now deterministic (DET). Wired in the extractor (object_nouns: ['task']), resolver (PM-of-project pmOrOwnerGate), and a server-side instant-fire gate in index.js. Non-PM manager denial is deterministic (no model turn). Missing slots fall through to the model.
Natural phrasings: "enable the Design task on CityCore", "turn on the Design task on CityCore".
disable_task_for_project
Disable a task for a specific project. Owner or assigned PM (PM-of-project gated — a Manager who is not the PM is denied).
Console-only — not reachable from Slack; use the web console.
Writes to: 06. Project_Tasks
Parameters: requesting_user_slack_id, project_name, task_name
Permission note (updated #1090): Now deterministic (DET) with a confirm gate. Wired in the extractor (object_nouns: ['task']), resolver (pmOrOwnerGate), and a confirm→fire gate in index.js. "remove the design task from X" routes here — no longer hijacked by delete_entry. Non-PM manager denial is deterministic.
Natural phrasings: "disable the Design task on CityCore", "remove the design task from CityCore", "turn off the Design task on CityCore".