Appearance
User Tools
add_user
Create a new team member. Owner only.
Writes to: 03. Users
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
user_name | ✅ | Display name or Slack mention (see below) |
role | ✅ | "owner" | "manager" | "user" |
slack_user_id | Optional. Omit for contractors and vendors who are not yet in the Slack workspace. Can be added later via update_user_role. | |
discipline_id | FK → 08. Disciplines.id | |
employment_type | "fte" (default) | "contractor" | "vendor" | |
hours_per_week | Float. 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_name → display_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:
- Promotes the user to
managerrole (if currentlyuser) - Sets
pm_user_idon 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.