Skip to content

User Tools


add_user

Create a new team member. Owner only.

Writes to: 03. Users

Parameters:

ParamRequiredDescription
requesting_user_slack_id
user_nameDisplay name or Slack mention (see below)
role"owner" | "manager" | "user"
slack_user_idOptional. Omit for contractors and vendors who are not yet in the Slack workspace. Can be added later via update_user_role.
discipline_idFK → 08. Disciplines.id
employment_type"fte" (default) | "contractor" | "vendor"
hours_per_weekFloat. Working hours per week. FTE: omit — defaults to 40. Contractor: required — VERA will ask if not provided. Vendor: omit — defaults to 40 (not used for capacity).

Slack mention auto-resolution: If user_name is passed as a Slack mention token (<@U…>, bare U…/W…, @handle, markdown profile link, or email mention), VERA extracts the Slack user ID and fetches the real name from the Slack profile API (real_namedisplay_name fallback chain). The stored row will have the human-readable profile name, not the mention literal. If a slack_user_id is provided alongside user_name, the Slack profile name from the API overwrites the typed shortname. If the Slack API is unavailable and user_name is still a mention literal after resolution, the call is rejected with a descriptive error rather than storing garbage data.


list_users

All active users with disciplines.

Reads from: 03. Users, 08. Disciplines

Inactive users appear with (inactive) next to their name.


update_user_role

Change a user's permission role. Owner only.

Updates: 03. Users col D

Parameters: requesting_user_slack_id, user_name or slack_user_id, new_role


rename_user

Change a user's display name. Owner only.

Updates: 03. Users col C

Parameters: requesting_user_slack_id, current_name or slack_user_id, new_name

Broken-row repair: If slack_user_id is supplied and the ID is not found in VERA by its stored slack_user_id, VERA checks for a row whose stored name is the raw mention literal (<@U…> or bare ID). If found, it renames the row and links the Slack ID in the same operation. This recovers users that were added before mention normalisation was in place.


assign_pm

Assign a project manager to a project. Owner only.

This is a two-in-one operation:

  1. Promotes the user to manager role (if currently user)
  2. Sets pm_user_id on the project

Updates: 02. Projects col G, 03. Users col D

Parameters: requesting_user_slack_id, project_name, pm_name or pm_slack_id

If the user hasn't messaged the bot yet, they won't be in the system. They need to send at least one message to be auto-registered before they can be assigned as PM.


deactivate_user

Mark a user as inactive. They cannot log time or take any actions. Historical entries are preserved. Owner only.

Updates: 03. Users col E (status → "inactive")

Parameters: requesting_user_slack_id, user_name or slack_user_id

Natural language triggers: "delete user", "remove user", "deactivate user" — all map to this tool.


reactivate_user

Restore an inactive user. Owner only.

Updates: 03. Users col E (status → "active")

Parameters: requesting_user_slack_id, user_name or slack_user_id

Natural language triggers: "reactivate", "restore", "re-enable"


ensure_user

Internal tool — auto-creates a user record if one doesn't exist for the given Slack ID. Called automatically when a new person messages the bot. Creates with role = "user" and employment_type = "fte".

Display name auto-sync: On every message, VERA compares the caller's current Slack display name to the stored name. If they differ (e.g. after a Slack workspace rename), the stored name is silently updated. Manual renames via rename_user are only needed if you want a name different from what appears in Slack.


list_disciplines

All functional discipline categories.

Reads from: 08. Disciplines

Parameters: requesting_user_slack_id


add_discipline

Create a new functional discipline category. Owner only.

Writes to: 08. Disciplines

Parameters: requesting_user_slack_id, name

The words "Designer," "Developer," "Project Manager" may refer to a person name or a discipline. VERA confirms before acting when the context is ambiguous.


rename_discipline

Rename an existing discipline category. Owner only.

Writes to: 08. Disciplines

Parameters: requesting_user_slack_id, old_name, new_name

Blocks case-insensitive name collisions. No user records need updating — disciplines are referenced by ID.

Returns: discipline_id, old_name, new_name


archive_discipline

Archive a discipline category so it no longer appears in menus. Owner only. Historical references are preserved. Use unarchive_discipline to restore.

Writes to: 08. Disciplines

Parameters: requesting_user_slack_id, discipline_name

Hard fails (409) if any active user has this discipline assigned. Reassign all users' discipline field first.

Returns: discipline_id, discipline_name


unarchive_discipline

Restore an archived discipline so it appears in menus again. Owner only.

Writes to: 08. Disciplines

Parameters: requesting_user_slack_id, discipline_name

Returns: discipline_id, discipline_name


get_project_assignments

Who is allocated to a project. Manager/Owner.

Shared with Envelope Tools — documented there.

VERA by talktalkmake