Product & features

Vaks PM · Functional scope & features · June 2026

Purpose of this guide. This document describes what Vaks PM does: its complete functional scope, feature by feature, along with the enterprise integrations and governance controls available to an administrator. Each capability is explained conceptually (what it is for and, at an operator level, how it works) without going down to code. The intended reader is a system administrator or evaluator who is new to the product. To install an instance, see the Docker Swarm deployment or Kubernetes deployment guide; for the underlying design, see Architecture.

Overview

Vaks PM is a multi-user project-management (PM) web application designed for organizations of 200 or more users and built to run entirely on infrastructure the organization controls (on-premise: hosted on its own servers rather than on a vendor-operated online service). It covers the full lifecycle of a project portfolio: planning, execution (Kanban boards and Gantt scheduling), time and workload tracking, collaboration, skills management, finance and reporting. Every capability is exposed through a single REST API (Representational State Transfer Application Programming Interface) that the web front end itself consumes, so any function in the product can also be driven from a script.

Guiding principles

On-premise first

No mandatory dependency on any external online service. The only optional outbound connections are an email relay and a corporate identity provider.

API-first

The web application uses the same public REST API as third-party integrations. Nothing the UI does is unavailable to an integration.

Modular authentication

Local accounts and Role-Based Access Control work out of the box; single sign-on, automated provisioning and SAML can be added later without a rewrite.

Server-side RBAC

Every permission is enforced on the server, on every REST route and every real-time event, never only in the browser.

Glossary

Acronyms used throughout this guide, defined once here for reference.

TermMeaning
PMProject Management: the discipline of planning and running projects; also the abbreviation for the product itself.
RBACRole-Based Access Control: permissions are granted through roles assigned to users rather than to individuals directly.
SSOSingle Sign-On: users authenticate once with the corporate identity provider and reach the application without a separate password.
OIDCOpenID Connect: a modern federated-authentication protocol built on OAuth 2.0, and the recommended SSO method.
SAMLSecurity Assertion Markup Language: an older XML-based identity-federation protocol, offered as an alternative to OIDC.
SCIMSystem for Cross-domain Identity Management: a standard protocol (RFC 7644) for an identity provider to create, update and deactivate accounts in a downstream application automatically.
SMTPSimple Mail Transfer Protocol: the protocol used to send email, here for notifications.
APIApplication Programming Interface: the programmatic interface (here a REST API over HTTP) through which software calls the product.
PATPersonal Access Token: a long key generated by a user and used by a client in place of an interactive login.
MCPModel Context Protocol: a standard protocol through which an AI (artificial intelligence) assistant calls an application's tools and data via a dedicated server.
GDPRGeneral Data Protection Regulation: the European data-protection regulation governing personal data (right to erasure, right to portability).
CSVComma-Separated Values: a plain-text tabular file format, used for imports and exports.
HMACHash-based Message Authentication Code: a cryptographic signature proving a message came from the expected sender and was not altered.
SIEMSecurity Information and Event Management: a central platform that collects and analyses security logs (for example Splunk, Microsoft Sentinel, QRadar).
TOTP / MFATime-based One-Time Password / Multi-Factor Authentication: a temporary code from a mobile app used as a second sign-in factor in addition to the password.
IdPIdentity Provider: the system that authenticates users, for example Microsoft Entra ID.
JWTJSON Web Token: a signed session token issued after sign-in.
CPMCritical Path Method: a scheduling technique that finds the longest chain of dependent tasks (the path that determines the project's earliest finish).
S3Simple Storage Service: an object-storage interface, now an industry de-facto standard. Vaks PM stores files in a self-hosted S3-compatible store.

Tasks & Kanban

Tasks are the core work unit. They are organized on Kanban boards (boards of cards arranged in columns by status, for example To do, In progress, Done) and in flat task lists. A task carries a title and description, a start date and a due date, an estimate (in hours or days), a priority, an optional required skill, assignees, colored labels and an optional milestone flag.

Kanban boards

Columns by status with smooth drag-and-drop. Cards reorder using a fractional position value, so inserting a card never requires renumbering the rest of the column.

Task lists & structure

Dated tasks with estimates, priorities, milestones, and grouping into subtasks for larger pieces of work.

Task detail

The working surface for a single task: assignment, required skill, estimate, time logging, comments and attachments, all in one place.

How it works at an operator level: boards and labels are scoped to a project. Moving a card issues a single positioned move on the server, which broadcasts the change in real time to everyone viewing the project (see Collaboration). Labels are colored tags reusable across the project's tasks.

Project Kanban board with status columns and task cards
Kanban board. Columns by status (To do, In progress, On hold, In review…) with draggable cards, colored labels, due dates, assignees and comment counters.

Customization shipped

A frozen data model sooner or later forces a workaround out of the tool — a "Technical review" status faked with a label, a business field crammed into the description. Vaks PM lets an organization extend its task and project vocabulary without touching code: custom fields to capture a business value of its own, and custom statuses to refine a phase without changing its engine.

Custom fields

A custom field is an additional piece of data defined by the organization and attached to tasks or projects — for example a purchase order number, a business criticality, or a client team. Each definition carries a type (text, number, date, dropdown or checkbox) and can be restricted to specific projects instead of applying organization-wide; without a restriction, it applies everywhere. Fields are always optional: no custom field can currently block creating a task or a project.

TypeTypical use
TextA short free-form value (a reference, an internal code).
NumberA quantity or a non-financial amount (for example a score).
DateA business date distinct from the task's start/due dates.
DropdownA choice among options defined ahead of time by the administrator.
CheckboxA binary flag (yes/no).

The field catalog is managed under admin area → Customization → Custom fields, behind a configurable write policy (administrators only by default). Once defined, fields appear on the task detail or the project form, alongside the native fields.

A field's type and entity (task or project) are fixed at creation and cannot change afterward; only its name, options and project restriction remain editable. Filtering and sorting by custom field are not yet available.

Custom statuses (sub-statuses)

A task's five phases (To do, In progress, On hold, In review, Done) remain the product's engine — reporting, automations, auto-planning and the AI agent lifecycle all rely on them without exception. A sub-status adds granularity inside a phase, never replacing it: for example Technical review and Client review as two sub-statuses of the In review phase.

A sub-status belongs to one specific phase and, like custom fields, can be restricted to specific projects. On the Kanban board, a column's active sub-statuses appear as containers inside their phase's column; dropping a card into a container sets both the status and the sub-status in one move. From the task detail, the sub-status picker only offers those belonging to the current phase — changing phase is still done through the status itself.

A sub-status can designate recipients to notify on entry (users, teams, or both): as soon as a task enters it, they receive an email and, if configured, a Teams card, with a one-hour grace period per task to avoid noise from quick back-and-forth moves.

A sub-status only exists within its phase. If a task changes status through a path other than the normal picker (for example an AI agent's lifecycle, see AI agents), a sub-status that no longer matches the new phase is simply ignored on display rather than causing a visible inconsistency. Sub-statuses do not yet drive the Gantt view, workload or reports — they operate at the execution level, not the planning level.

Scheduling & Gantt

The Gantt view is a scheduling chart that draws each task as a time-based bar along a date axis, with the dependencies between tasks shown as arrows. It supports the four standard dependency types and computes the project's critical path.

DependencyMeaning
Finish-to-Start (FS)The successor cannot start until its predecessor finishes (the most common link).
Start-to-Start (SS)The successor cannot start until its predecessor starts.
Finish-to-Finish (FF)The successor cannot finish until its predecessor finishes.
Start-to-Finish (SF)The successor cannot finish until its predecessor starts.

Each link can carry a lag in days, and milestones mark zero-duration checkpoints. The schedule engine runs a full Critical Path Method (CPM) computation: a forward pass to find each task's earliest start, then a backward pass to find its latest start. This yields the total slack per task (how much it can slip without delaying the project) and flags the tasks with no slack as critical. Links can be created and deleted directly on the timeline, and a server-side check rejects any link that would create a cycle.

Timeline / Gantt view: task bars on a date axis, groups, dependencies and critical path
Gantt scheduling. Task bars along a date axis, grouped by wave, with milestones, dependency arrows, greyed weekends and holidays, a "today" line and critical-path highlighting.

Time & reporting

Time tracking records how long work actually takes against the estimate, and reporting turns those records into insight.

Time entries

Estimated and actual hours per task. Overtime is declared explicitly by the person, entered as a sub-portion of an entry and never derived automatically, so each individual controls how much overtime they report and on which task.

Personal weekly timesheet

A strictly personal grid of tasks by day showing daily capacity, planned allocations, actual time, overtime, and time off / public holidays. Each person sees only their own, and the window is capped to a few weeks.

Reporting

Project key performance indicators, a burndown chart, due-date adherence, and a time breakdown by project, user or label.

Exports. Every report can be exported as CSV (plain-text tabular), XLSX (a styled multi-sheet Excel workbook with a frozen header, banding and auto-filter), or a formatted PDF (a printable, branded document with KPI cards, paginated tables and server-rendered charts: a burndown line, a due-date donut and horizontal bar charts). The PDF rendering is fully server-side, with no headless browser involved.

The personal timesheet ignores any user identifier passed to it: it always returns the signed-in person's own data. Daily capacity drops to zero on the person's time off and on public holidays (see Workload).
Reports page: KPI cards, burndown chart and donut breakdowns
Reporting. Project KPIs (tasks, progress, remaining, overdue, on-time completion, time spent), an actual-vs-ideal burndown curve, and breakdowns by team; CSV / XLSX / PDF export.
Personal weekly timesheet: editable tasks-by-day grid
Personal weekly timesheet. A strictly personal tasks × days grid: capacity, planned and actual time, overtime and time off / public holidays, with tasks addable to the week.

Workload & planning

Workload management answers "who is doing too much, who has room" by comparing each person's capacity to the work assigned to them, day by day. It is built from three concepts:

The workload view is a people-by-days grid that aggregates capacity against allocated hours and colour-codes each cell (free / ok / warning / overloaded). An allocation can be dragged onto another person to reassign it.

Workload view: people-by-day grid, capacity vs allocated hours, allocation chips
Workload & planning. A people × days grid showing allocated hours against daily capacity (e.g. 8/8h), with draggable allocation chips, load color-coding, a week selector, exports and an auto-planning button.

Public holidays by country

The product ships a catalog of public holidays keyed by ISO country code (for example FR, US). An organization sets a default country, with optional per-user overrides. On a public holiday, daily capacity is zero, and the user interface shows warnings when a task's start or due date falls on one.

Auto-planning

Auto-planning derives allocations automatically for a project's whole scope, so a manager does not have to place every commitment by hand. It combines four mechanisms:

MechanismWhat it does
Topological orderTasks are scheduled respecting their dependencies: a prerequisite is always placed before its successor. This is a hard constraint.
Weighted priority scoreWithin the allowed order, tasks are prioritized by a normalized, weighted score (business priority, critical-path position, number of dependents, deadline urgency, skill match).
Slack-based levellingThe real slack from the CPM computation drives levelling: tasks with plenty of slack yield early capacity to tight, time-critical tasks.
Assisted assignmentOptionally, the planner also chooses who does each unassigned task, scoring candidates by required-skill match and genuine free capacity, then covering the work with as few people as possible.

Auto-planning is idempotent (re-running it on the same scope yields the same plan), it freezes the past (it never touches allocations that have already started), and it offers a preview before applying so the plan can be reviewed and adjusted. A task's remaining hours are split across its assignees in proportion to each person's free capacity, not divided equally.

Splitting a task across several people (auto-split)

At the scale of a single task rather than a whole project, auto-split automatically spreads a task's remaining hours into allocations across its date window, without laying them down one by one. On a single-assignee task, those hours are simply spread over that one person. On a task with several assignees, the project manager additionally chooses how to split them, by strategy:

StrategySplit
ProportionalEach person's share is proportional to their actually free capacity over the window — the most available person gets the largest share.
EqualThe total is divided equally across assignees, regardless of their respective availability.
GreedyFills the most available people first, to involve the fewest people possible rather than spreading the work thin.

Each person is filled up to their own daily capacity (with an optional cap). If even a split across every assignee cannot meet the task's deadline, the tool flags it and estimates how many additional people it would take, rather than silently producing an unworkable plan.

Collaboration

Project documents shipped

Beyond attachments hung off a single task or comment, every project has its own document space: a place to keep deliverables, meeting notes, transcripts, or anything that documents the project as a whole rather than one specific task. Files live in freely created folders — no categories imposed by the product — and are stored in the same self-hosted S3 object store as attachments.

Deliberately open governance: any member with access to the project can create folders, upload files and delete them, with no permission beyond project access itself required. Deleting a folder never deletes its contents: the files and sub-folders it held move up to the parent folder.

Context readable by AI agents

A document can be flagged as AI context. Flagged documents are exposed, read-only, in the work context an agent consults before handling a task (see AI agents) — an agent can read a context document's text content (up to 64 KB) alongside the project brief and its task's acceptance criteria, with no file ever copied elsewhere. This is a distinct, complementary mechanism to the SharePoint context for agents: one reads documents native to Vaks PM, the other reads the ones in the Microsoft Teams team provisioned for the project.

The document space is a full navigation view (reachable from the project's breadcrumb), not a secondary tab. Currently out of scope: drag-and-drop upload, versioning, PDF text extraction, and storage quotas.

Clients & teams

Clients & contacts

Full management of client companies and their contacts, linkable to projects, behind dedicated permission scopes.

Teams

Groups of people with one or more leads, the skills the team covers, and assignment to projects.

User CSV import

Bulk creation of users from a CSV file.

Team-level project access. Assigning a team to a project grants every member of that team an inherited access level on the project (Contributor by default) through a single team-access entry, in addition to any directly added members. This keeps project membership in step with the organization's team structure.

Sponsors & announcements shipped

A project often has stakeholders who need to be kept informed without being assigned a task or running the project day to day: a sponsor on the client side, a steering committee. Vaks PM gives them a dedicated status and communication channel, distinct from the usual RBAC roles.

The sponsor tag

Any project member can be flagged as a sponsor. It is an audience label, not a role: it grants no additional permission and is orthogonal to the person's permission on the project (the same pattern as a team's "lead" tag). A project manager toggles the tag from the project's access tab.

Announcing a change

An announcement is a one-off message addressed to a project audience — for example telling sponsors about a scope change. The content (title and body) is free-form, but it travels inside a server-fixed envelope: a preformatted email subject, an automatic attribution line ("Sent by X", or "… via the AI assistant" if the message came through the AI connector), an escaped body to prevent misleading formatting, and no clickable URLs. There is only one possible action button, the one the server adds — never a link supplied by the author.

The audience is never a hand-typed list of addresses: it is resolved server-side by role on the project (project manager, members, watchers, sponsors), which rules out sending an internal communication to an external address by typo. The author is automatically excluded from their own announcement. A two-minute cooldown applies per author and per project to prevent an accidental burst.

Human channel, including via the AI assistant — never an agent in its own name. An announcement can be sent by a user from the app, or by that user through their AI assistant (the MCP connector exposes a dedicated tool that fills the same envelope). An autonomous AI agent, however, can never be the author of an announcement — the feature is reserved for human communication, assisted or not.

The sponsor feed

Beyond one-off announcements, a project can notify its sponsors automatically on a handful of chosen events, independently of the general automation rules:

EventDefaultContent
Milestone reachedOnA project milestone moves to Done.
Project status changedOnThe project changes status (for example moves to On hold or Closed).
Milestone at riskOffSponsors are added to the recipients of the "Milestone at risk" automation rule whenever it fires.
Budget thresholdOffA budget threshold is crossed — presented qualitatively ("the project has crossed a budget threshold"), never with an amount: figures remain reserved for holders of the finance permission.

The sponsor feed is configured from the project's access tab and runs through the same chokepoint as every other alert: cooldown, quiet hours and the kill switch all apply normally.

Skills

The skills capability records what competencies people have, what projects require, and what teams cover, feeding staffing and workload decisions. It centres on a per-organization skills catalog.

Catalog & packs

The catalog is populated from modular packs, curated sets grouped by technology or domain (for example AWS, Azure, GCP, backend, frontend, mobile, data/AI, devops, security, methodology, project management, HR, marketing). An administrator applies the packs relevant to the organization. Packs can be re-synchronized or removed, and applying a pack never resurrects a skill an administrator deleted unless explicitly forced. Custom packs can also be registered through the API, scoped to the organization, with no redeploy.

Levels, requirements & coverage

Skill requests & gap analysis

Finance

The finance capability turns logged time and costs into budget and margin tracking, project by project and across the portfolio.

A per-user default rate is set by the relevant team lead (or an administrator) and is visible only to them. Finance figures are gated by finance permissions and, for API/AI tokens, by a dedicated finance gate that is closed by default (see AI connector).
Project finance: budget/cost/margin cards, budget consumption and Earned Value (EVM)
Project finance. Budget, spent-to-date, forecast (EAC), billable value and forecast revenue cards with margin; a budget-consumption bar (spent / committed / margin) and an Earned Value block (CPI, SPI, earned value, PV vs AC curve).

External tickets

External tickets let people log time against work items that live in another tool, a ticketing system such as Jira or ServiceNow, without leaving Vaks PM. They are deliberately timesheet-only: an external ticket can be logged against, but it never appears on boards, in the Gantt, in workload or in reports, and it cannot have allocations, dependencies or manual subtasks.

How it works: tickets from a given tool are grouped into hidden container projects (one per tool, optionally per client), so they never clutter the real project list. A stored ticket is identified by a generic triplet: its source (the tool), its key (the human ticket id such as INC0010023) and an optional URL back to the source. The same ticket is recorded once (idempotently) and then appears as a row the user can log hours against. To pull tickets from a live system, see External connectors.

Single sign-on (SSO) OIDC SAML

SSO lets users sign in with their existing corporate identity instead of a password held by Vaks PM. The identity provider performs the authentication, including any multi-factor and conditional-access policies it enforces, and returns a signed assertion the application trusts. Two protocols are supported: OIDC (the recommended method, used with Microsoft Entra ID) and SAML 2.0 (for environments standardized on SAML).

Admin: Single sign-on (Entra ID OIDC) configuration and SCIM provisioning
Admin › Integrations › Single sign-on. A Microsoft Entra ID (OIDC) provider enabled with its Redirect URI, Test / Edit buttons, add-provider action, and the SCIM 2.0 provisioning block (tenant URL, attribute mappings, secret token) — see also SCIM.

What it provides

Initial state & enablement

A fresh instance runs on local accounts; SSO is configured afterward under admin area → Single sign-on. For OIDC with Microsoft Entra ID the outline is:

  1. Register an application in Entra and record its redirect URI (the address Entra returns the user to after authentication).
  2. Create a client secret in Entra and copy it (shown once) — or, as an alternative, register a certificate to authenticate with no shared secret (see the note below).
  3. Configure the claims, API permissions and the groups (or app roles) that will drive role mapping.
  4. Create the provider in Vaks PM with the Entra discovery URL, client ID and client secret (or certificate); set the role-mapping rules and the JIT behaviour.
  5. Test sign-in, then enable the provider.
Certificate authentication, with no shared secret. For Entra, a client secret can be replaced by a certificate (private_key_jwt): the application itself signs a short-lived proof of identity with its private key, and Entra only holds the matching public certificate — nothing secret travels over the network. This is the same Authentication: Client secret / Certificate toggle available for Teams provisioning and Entra agent directories. Detailed procedure in the SSO OIDC guide.
Always configure and test a break-glass local administrator before enforcing SSO. If the only path in is the identity provider and it becomes unavailable or misconfigured, the organization would otherwise be locked out. An MFA encryption key must also be present in the instance configuration before MFA or SSO is enabled, since it secures two-factor secrets at rest.

Automated provisioning (SCIM) RFC 7644

SCIM lets the identity provider keep Vaks PM accounts in sync automatically, so administrators do not create or disable users by hand. The directory pushes changes to a Vaks PM endpoint whenever a user joins, changes or leaves. It is typically paired with OIDC so that authentication and lifecycle are both directory-driven.

Enablement: the admin area generates a SCIM secret token and the tenant SCIM URL; in the directory, a provisioning configuration uses that URL and token, with the in-scope users and groups assigned. An on-premises provisioning agent is supported for instances that are not publicly reachable.

Scope matters. Only users and groups explicitly assigned in the directory are provisioned. A newly created team may appear empty until the directory pushes its members on the next cycle. This is expected behaviour, not a fault.

Email notifications delivered

Vaks PM sends branded email notifications when relevant events occur. Delivery is asynchronous: messages are queued and sent by the background worker, so a slow mail relay never blocks the application.

Admin: email notification configuration
Admin › Notifications & Email. Kill switch, SMTP connection, branding, per-event preferences, due-lead days, digest hour and quiet hours — with a send-test-email action.

Events covered

Configuration

SettingDescription
Kill switchA single toggle to suspend all outbound email instantly.
SMTP connectionHost, port, encryption and authentication mode. The SMTP password is stored as a protected secret, not in the database. An anonymous relay (no credentials) is supported.
BrandingLogo, accent colour, the From address and an optional Reply-To, applied to every template.
Per-event preferencesEnable or disable each event type independently.
Due-date lead timeHow many days before the due date a reminder is sent.
Digest hour & quiet hoursWhen digests go out, and a window during which no mail is sent.
LocalizationEach message is localized to the recipient's language.

A Send test email and a Preview template action validate the configuration without waiting for a real event, and a delivery log records each message and its outcome. Notifications are optional: with no SMTP relay configured, the application runs normally, and only outbound notifications are unavailable.

Automations delivered

Automations are monitoring rules that ship with the product. They continuously watch tasks, schedule, workload, timesheets, budget, skills and AI agents, and alert the right people when a situation drifts. There is no rule builder in the Zapier sense: an administrator composes nothing, and instead enables or disables ready-made rules and tunes their thresholds. The intent is deliberate — not an empty canvas to fill in, but a set of guardrails that work on day one.

The vast majority of rules are pure notification: they change no status, reassign no task, delete nothing. What they produce is a signal addressed to someone who can act. A small, explicitly named set of rules — detailed under Automatic actions below — are the exception and do write, but always narrowly, reversibly and traceably: never a deletion, never reassigning a person.

How a rule fires

Three cadences coexist, and every rule belongs to one of them:

Three rules follow no clock at all: they react to the event, within a second of the action that concerns them (a task is created, a time-off is entered, an auto-plan is applied).

What keeps alerts from flooding

A rule that repeats the same alert every day stops being read. Four mechanisms prevent that:

MechanismEffect
Cool-downA given alert is not repeated for the same entity before a delay specific to the rule: 24 hours for hourly and event-driven rules, 7 to 8 days for most daily and weekly rules, 30 days for budget tiers. A budget tier already reported stays quiet until a higher tier is crossed.
Quiet hoursAutomations honour the quiet-hours window configured for notifications. An alert landing in that window is deferred, not lost. Worth knowing: if the daily run hour itself falls inside quiet hours, daily rules produce nothing.
Per-run capAt most 50 alerts per rule per organization on each pass. An overflow (on first activation against a loaded history, for instance) is spread over later passes rather than dumped at once.
Kill switchA single switch suspends every automation for the organization, without touching notifications or business webhooks.

Rule catalogue

Rules that default to Off are no less reliable: they are simply more context-sensitive (what is noise at one customer is signal at another), and so deserve an explicit choice.

Task hygiene daily

RuleTriggerRecipientSettingsDefault
Dormant on-hold taskAn On hold task has not moved for N days.Project managersN (5 d)On
Overdue taskThe due date has passed and the task is not done. A grace period avoids alerting on the very day.Assignees + project managersGrace days (0)On
Inactive in-progress taskAn In progress task has had neither an update nor logged time for N days.Assignees, else project managersN (7 d)On
Unassigned task lingeringA To do task stays unassigned more than N days after creation.Project managersN (3 d)On

Deadlines & schedule

RuleCadenceTriggerRecipientSettingsDefault
Milestone at riskdailyAn unfinished milestone comes due within N days while at least one of its predecessors is not done.Project managersN (7 d)On
Plan overfloweventAn auto-plan has just been applied and produced at least one deadline overflow. A preview triggers nothing.Project managersOff
Inactive projectdailyAn active project has seen no activity — no task, no time, no comment — for N days.Project managersN (14 d)Off
Project ending soondailyAn active project's end date is less than N days away while tasks remain open.Project managersN (7 d)On

Workload & capacity

RuleCadenceTriggerRecipientSettingsDefault
OverloaddailyOver the next 7 days, a person's allocated load reaches X% of their available capacity.The person's team leads, else administratorsX (100%)On
UnderloaddailyOver the next N weeks, a person is allocated below X% of capacity — a staffing signal.Team leads, else administratorsX (50%), N (2 wks)Off
Time-off conflicteventA time-off entry overlaps allocations already planned. One alert per affected project.Managers of the affected projectsOn

Timesheet weekly

These three rules share the same weekly appointment (the weekday and hour set for the timesheet reminder) and cover the elapsed ISO week.

RuleTriggerRecipientSettingsDefault
Timesheet reminderTime logged over the elapsed week covers less than X% of available capacity.The person themselfX (80%), weekday (Friday), hour (16:00)On
Overtime spikeOvertime declared over the week exceeds N hours.Team leads, else administratorsN (5 h)Off
Low utilizationThe share of logged time on billable projects falls below X%. The ratio is measured per person: since billability is an attribute of the project, a per-project ratio would always be 100% or 0%.Team leads, else administratorsX (60%)Off

Finance daily

RuleTriggerRecipientSettingsDefault
Budget tierA project's actual cost crosses a budget tier. Each tier alerts once: going past 80% then 120% produces two distinct alerts, not a repeat of the 80% one.Project managers, else administratorsTiers (80%, 100%; up to 5)On
Forecast overrunThe forecast cost at completion exceeds the budget while actuals have not yet reached 100% — so the alert arrives before the overrun, not after. Silent if the 100% tier has already spoken.Project managers, else administratorsOn

Skills event

RuleTriggerRecipientSettingsDefault
Skill gap on creationA task is created with a required skill that nobody in the project pool — direct members and members of assigned teams — covers at the requested level. Expired skills do not count.Project managersOn

AI agents hourly

RuleTriggerRecipientSettingsDefault
Agent budgetRun cost reaches X% of an envelope. Four scopes are watched separately: agent × day, agent × month, a project's agent budget, a task's agent budget. The alert deliberately precedes the hard block, which refuses the claim at 100%.Agent scopes: the agent's owner, else AI administrators. Project/task scopes: project managers.X (80%)On
Deliverable awaiting reviewA deliverable has been waiting for review for more than N hours and has not been superseded by a newer version.Project managersN (24 h)On

Automatic actions (mutations)

Every rule above only alerts. Three rules, and three only, act on a task in a human's place — always narrowly and reversibly, never deleting or reassigning a person:

RuleTriggerEffectGuardrailDefault
Priority bumpedThe "Task overdue" rule fires for a task.The task's priority moves up one notch.Shares the same cooldown as the alert itself; never downgrades a task already at High or Urgent.Off
Parent task auto-advancedAll of a parent task's subtasks move to Done.The parent task advances in turn (notify or advance mode, configurable).A single mutation per event no matter how many subtasks finish together — no cascade.Off
Automatic skill requestThe "Skill gap on creation" rule fires.A skill request is opened for the lead of the team covering that need.The requester is a dedicated system identity, never a human; with no team covering the skill, the rule stands down instead of creating an orphan request.Off

An automatic action always goes through the same business service a human action would use (it never touches the database directly), carries a system actor distinct from both a human and an AI agent, and is recorded in the audit log under a dedicated action. All three rules are off by default: an organization turns them on explicitly once it has validated the behavior of the equivalent notification rules.

Recurring tasks

A recurring task repeats on a chosen frequency (for example every week, or the first business day of the month): at each due point, a new occurrence is created automatically from the same template, without a project manager having to recreate it by hand. Configuration lives on the task detail — frequency and weekday or day of month — and does not apply to subtasks or external tickets.

The occurrence materializer is idempotent even with several application replicas running in parallel: it locks each due point before creating the matching task, so the same occurrence can never be generated twice. Deleting the recurrence template disables future occurrences and flags it, without touching tasks already created.

Watching a task or a project

The natural recipient of an alert is whoever the rule designates — the assignee, the project manager, the lead. That leaves out someone who needs to know without being accountable: a sponsor, an architect, a technical lead consulted on one specific topic.

The Watch button, on a task or a project, answers that need. A watcher is a passive subscriber: they receive every automation alert concerning what they watch, plus status changes and new comments — without being assigned, without extra rights, and without owing anyone anything. Watching stops with one click, and the account page lists what one watches.

Known limitation. A watcher inherits the organization's notification preferences. If status-change notifications are disabled, or if the recipient is in digest mode, the watcher will not receive status changes in real time — the digest itself only lists assigned tasks. Watching is therefore fully effective in immediate-notification mode.

Where alerts go

Every alert travels three independent channels:

These channels do not substitute for one another: cutting email cuts neither the Teams cards nor the audit trail.

Administration

Everything is configured under Admin › Automations, organized into cards by family (task hygiene, deadlines, workload, timesheet, budget, projects, agents). Each rule exposes its switch and its thresholds; out-of-range values are rejected on entry rather than silently applied. Global settings — kill switch, daily run hour, weekday and hour of the weekly appointment — sit at the top of the section.

A Run now action triggers an immediate evaluation without waiting for the scheduled hour, and returns the count of what was sent, held on cool-down, deferred or capped. It ignores the clocks but honours the kill switch and cool-downs — making it an honest verification tool, not a way to force a resend. Configuring automations requires the organization administration right; AI agent alerts are visible to the agent's owner and to AI administrators.

Webhooks delivered

A webhook is an outbound HTTP call Vaks PM makes to a URL of the administrator's choosing when an event occurs. It is the mechanism for pushing changes into another system (a ticketing tool, a chat channel, an automation platform) in near real time.

Admin: webhook management
Admin › Integrations › Webhooks. Endpoint list, event subscription, raw / teams format, secret rotation, send-test and a delivery journal with manual replay.

Events & formats

A webhook subscribes to the events it wants, among:

Three further system events exist outside this per-project/team subscription mechanism: an audit alert (see Audit log), a backup failure, and an automation alert (see Automations) — these three subscribe at the organization level. The payload format is either raw (the native JSON event) or teams (a Microsoft Teams / Power Automate Adaptive Card), so a channel can receive readable cards directly.

Security & signing

Scopes

A webhook can be organization-wide, or scoped to a single project or team. With a self-service policy, a project manager or team lead can manage webhooks for their own project without full admin rights. The admin interface lists endpoints, creates and edits them, rotates secrets, sends a test event, and shows a delivery journal with the payload, headers and response of each attempt plus a manual retry.

API keys delivered

API keys grant programmatic access to the public REST API (the same API the web app uses, under /api/v1). They let scripts, integrations and partner systems call Vaks PM without a browser session. Two kinds exist:

Personal access token (PAT)Organization key
Prefixvaks_pat_…vaks_org_…
Acts asThe user who created it. Effective rights are the user's role intersected with the token's scopes, and can never exceed the user, even for an administrator.A service identity with all scopes; actions are attributed to the administrator who created it.
ScopesA chosen subset of the permission vocabulary.All scopes (service-level).
Managed inAccount options → My API tokens.Admin area → Organization API keys.
Admin: organization API keys
Admin › Integrations › Organization API keys. Creation of scoped service keys, a displayable prefix, a mandatory expiry (≤ 2 years) and revocation; the secret is shown only once.

Security model

Record the secret immediately. Because only its hash is stored, a lost token secret cannot be recovered, and a new key must be issued.

External connectors admin setup available

An external connector links Vaks PM to a third-party ticketing system, for example ServiceNow or Jira, so that people can record time against tickets that live in that other tool, from their weekly timesheet (see External tickets). A connector is a read-only bridge: Vaks PM fetches a list of tickets and references them, and never modifies anything in the source system.

Connectors are configured under admin area → Integrations → External connectors. Each connector authenticates with a dedicated service account whose credentials are encrypted at rest (AES-256-GCM) and never shown again after they are saved. The design is provider-agnostic: the same timesheet flow, idempotency and container projects apply to any tool, and each provider declares its own configuration fields.

Admin: external ticketing connectors
Admin › Integrations › External connectors. Read-only third-party ticketing connectors (ServiceNow, Jira…), with an encrypted-at-rest service account, per-provider configuration fields and a test action.

Example provider: ServiceNow

The ServiceNow connector reads tickets through the ServiceNow Table API using a service account (Basic authentication), with searches scoped to the current user. Its configuration fields are the instance URL, the service-account username and password, the ticket tables to expose (incident, sc_task, change_task, problem, or the base task table), and an optional base filter (a ServiceNow encoded query appended to every search to restrict results, for example active=true). A Test action makes a lightweight authenticated call and reports success, an authentication failure, or an unreachable instance.

Outbound target is admin-controlled. The instance URL comes from the connector configuration, not from end users. Requests to internal/private addresses are blocked (anti-SSRF) and HTTPS is required. Creating, updating and deleting a connector is recorded in the audit log.

Collaboration spaces Premium

When a project becomes active, Vaks PM can automatically create a collaboration space for it through any of three self-service providers — Microsoft Teams, Slack, or Google Chat — configured independently, each in its own admin card. Provisioning is idempotent: re-activating a project never creates a second space. An external tool that manages its own space can also declare the link back instead, via a narrowly-scoped API key, without needing any of these providers configured.

Microsoft Teams is the richest of the three: a name built from a template, a configurable set of channels, and (uniquely among the three) archive on close — when the project closes the team is archived (read-only, reversible), and un-archived on re-activation. Slack and Google Chat create their space and invite members the same way, but today are not archived automatically on close. This is a premium feature (license entitlement teams-provisioning, shared by all three providers), entirely opt-in per organization.

Enablement steps (Microsoft Teams)

  1. Register an Entra application dedicated to Vaks PM (single-tenant is fine; no redirect URI, since this uses the client-credentials flow). Create a client secret (or a certificate, as a secretless alternative — see SSO) and note the tenant ID and client ID.
  2. Grant Graph application permissions. The least-privilege set is Team.Create, TeamMember.ReadWrite.All, Channel.Create, TeamSettings.ReadWrite.All and (recommended) User.Read.All; then have a Global Administrator click Grant admin consent.
  3. Configure in Vaks PM under admin area → Integrations → Collaboration spaces, on the Microsoft Teams card: the tenant/client IDs and secret, the team-name pattern, channels, visibility, the membership scope (assigned teams, project members, or both), and whether to archive on close.
  4. Test the connection, ensure the target project has at least one Entra-linked member, then move a project to active or use Provision now.

Slack and Google Chat are simpler: a bot token (Slack) or a service account impersonating a Workspace user (Google Chat) is enough — no directory-linked member requirement, since neither needs an owner the way a Teams team does.

Only directory-linked users can be added to a Teams team. A member is added to the Teams team only if their Vaks PM account carries an Entra object ID, set automatically when they are provisioned through SSO / SCIM. Because an app-created team must have an owner, at least one project member must be Entra-linked or creation fails with a clear message. The client secret is encrypted at rest and never returned by the API; Graph traffic happens only in the background worker. Vaks PM never creates users in the directory; it only adds existing ones as members.

AI connector (MCP) Premium delivered

The AI connector exposes a Model Context Protocol (MCP) server: any compatible AI assistant (for example Claude, ChatGPT or Microsoft Copilot Studio) can connect to read and, if allowed, act on the organization's projects, on behalf of the signed-in user and strictly within their permissions. The product hosts no AI of its own; the intelligence lives in the client, and Vaks PM provides the data and actions. There are no AI keys to manage.

Security boundary. The AI can only do what the exposed tools allow (it never calls the API freely), and every call is bounded by the user's RBAC, so it never sees or does more than the person could do themselves in the app. Actions performed through an AI agent are distinguished in the audit log.
Admin: AI connector (MCP) configuration
Admin › Integrations › AI connector (MCP). Enablement of the MCP server and its three independent toggles (enable the connector, allow AI writes, expose finance to AI), plus pre-registered OAuth clients.

Delegated sign-in

A user adds the organization's MCP server URL (https://<organization>/mcp) in their AI client. The client detects authentication automatically and opens a browser sign-in page, where the user logs in with their usual account (local or SSO), then approves a consent screen summarizing what the AI will be able to do. Authentication uses OAuth 2.1 with PKCE (Proof Key for Code Exchange), federated to the existing identity. The issued access token is short-lived and refreshed automatically. Clients that cannot self-register (for example Copilot Studio) use a pre-registered OAuth client created in the admin area.

Admin enablement: three independent toggles

ToggleEffect
Enable AI connectorMaster switch. Without it, no token is issued; the organization's license must also grant the mcp entitlement.
Allow AI write actionsOff by default = read-only. On = the AI can also create and modify (projects, tasks, assignments, time…), always within each user's own rights.
Expose finance to AIOff by default = finance is never returned to AI/API tokens, even for a finance-privileged user. On = readable by users who hold finance permissions.

The consent screen reflects these toggles. The connector is disabled by default and opt-in per organization; the toggles are independent and reversible. Finance writes require all three conditions together (writes enabled, finance exposed, and the user holding the finance permission). Web-app users are never affected by the finance toggle; it applies only to tokens.

AI agents delivered

An AI agent (Artificial Intelligence agent: an automated software worker driven by a large language model) is treated as a first-class actor in Vaks PM, alongside human users. An agent can be assigned work, claim tasks, produce deliverables and declare its cost — but it is governed far more tightly than a person. This section explains what an agent is, how the integration works end to end, and how an administrator provisions, governs and manages agents. It builds on the AI connector (MCP) (the transport an agent uses to reach the product) and the RBAC model.

Four principles frame the whole feature. (1) Human-owned: every agent has a named human owner who remains accountable; an agent whose owner is deactivated cannot act. (2) Never a seat: agents do not consume a license seat and are excluded from head-count, timesheets, workload planning and assignee suggestions. (3) Least privilege: an agent can never do more than its capabilities allow, and never touches finance, client, administration or time-logging actions. (4) Always traceable: every action an agent takes is recorded in the audit log as performed by an agent actor, with its owner and a plain-language justification.

Identities & provisioning

An agent is a dedicated identity (it is not a shared login and not a human account). It carries a display name, a synthetic internal email of the form agent-<name>@agents.invalid, a required owner, a trust level, a set of capabilities (see below) and an optional model/cost profile. Agents are created in three ways:

Manual (admin)

An administrator creates the agent directly under admin area → Users & Identity → Agents, sets its owner and capabilities, and mints its access token.

Directory sync

A connector imports agent identities from an external agent directory (Microsoft Entra Agent ID first) under Integrations → Agent directories, with a connection test and a manual Sync now. Secrets are encrypted at rest.

Inbound registration

A platform with no connector can self-register an agent by calling POST /agents with an organization API key. The agent arrives read-only, in a draft state, with no token, and stays inert until a human activates it.

Each agent authenticates with its own PAT (Personal Access Token), separate from any user token, with a mandatory expiry (default 90 days, maximum 2 years) and shown only once at creation. Provisioning always requires an owner: a directory connector that cannot supply one falls back to a configured default owner. Agents are only ever suspended, never silently deleted.

Getting a token with no secret to distribute Premium

Manually minting a PAT remains the default path and always works; it gets heavy past a few dozen agents, each with a secret to distribute and rotate. Two mechanisms remove that burden, under the agent-federation license:

MechanismFor which agentHow it works
Identity federation (RFC 8693 token exchange)An agent running on a platform with its own identity fabric: a Kubernetes pod (ServiceAccount token), an Entra service principal (workload identity token), a GitHub Actions job (OIDC token).The agent presents the token its platform issued it; Vaks PM verifies it against a trust issuer declared ahead of time (pasted public keys or a JWKS, mandatory audience, an algorithm allowlist) and exchanges it for a short-lived Vaks PM PAT. No secret is ever distributed or rotated.
Headless self-serviceAn agent with no identity fabric around it — a machine, a script, a generic runtime.A human issues a rotating machine credential once; the agent then exchanges it itself, indefinitely, for short-lived working tokens that renew automatically. Reuse of an already-consumed credential (theft) is detected and revokes the whole chain.

Either way, a token obtained never grants rights by itself: the usual gates still apply (active human owner, agent not suspended, declared capabilities). The detail of both mechanisms, platform by platform, lives in the Agent authentication guide.

What an agent may do — capabilities & permissions

An agent's effective rights are the intersection of three limits: the RBAC permissions of its role, the scopes of its token, and its declared capabilities. A permission must appear in all three for the agent to use it. Capabilities are deliberately incapable of granting the most sensitive actions — an agent can never obtain finance, client-management, administration or time-logging permissions, by construction. In addition, an agent token acts only on the public API surface: it is rejected on the private administration application, even if the underlying account is privileged. The net effect is that an agent operates in a strict subset of what a cautious human contributor could do.

How agents work — pull, claim, deliver, review

Agents follow a pull model rather than being pushed work. An agent connects through the organization's MCP server using its PAT, then works a task through a server-enforced lifecycle:

StageWhat happens
ClaimThe agent requests the next eligible task and claims it atomically — two agents can never hold the same task. Claiming is refused if a budget or a policy (see below) forbids it.
WorkThe agent reads a consolidated work context (the project brief, guardrails, the task's acceptance criteria, and a living journal of previously approved results) and does the work.
DeliverThe agent submits one or more deliverables — a link, an uploaded file, or Markdown content stored in the object store — each with a natural-language justification.
ReviewA human reviewer (never the deliverable's author) approves or requests changes. Requested changes send the task back; the agent can resubmit a new version that supersedes the previous one.
CloseOn approval the task advances and, if the project opts in, closes automatically. The acceptance criteria are checked off and an entry is added to the living journal.

The task statuses involved are To do → Claimed → In progress → In review → Approved → Done, plus Changes requested. The living journal is fed only by approved deliverables, so unreviewed output can never contaminate an agent's future context.

Governance — enablement, policies, budgets & verification

Agents are off by default and constrained at several independent levels:

Deliverable verification & signed CI evidence

When an agent announces "done, my tests pass", nothing obliges you to take its word for it. Vaks PM ranks every deliverable by the strength of the evidence behind it, on a scale running from the agent's bare claim up to human review:

MethodWhat it is worth
Self-attestationThe agent declares its own work good. Weakest: nothing corroborates it.
Tool outputThe agent attaches the logs and exit code of what it ran. Stronger, but the agent is still the one reporting.
Agent validationA different agent, never the author, counter-checks the deliverable and returns a verdict.
Signed CI evidenceThe customer's continuous integration (CI) pipeline attests to the result itself, with a signature the agent cannot forge.
Human reviewStrongest, and the universal fallback: a person decides.

The method required for a given deliverable is not the agent's to choose: it is derived from the task's stakes crossed with the agent's trust level. A low-stakes task handed to a proven agent settles for self-attestation; a critical task demands human review whatever the agent. If the ground cannot produce the required method — a repository with no CI, for instance — the requirement falls back to human review. There is never a dead end.

Signed CI evidence, concretely

This is the one mechanical level of evidence an agent cannot forge, and it rests on a simple principle: Vaks PM never connects to your CI pipeline. It has no outbound access, holds no credentials at your code host, and polls nothing. Your CI pushes its result to Vaks PM, and the only thing the server actively does is verify a signature computed with a shared secret agreed in advance.

A CI result is tied to a task by the commit SHA — the unique fingerprint of a recorded change in the code repository. Your CI knows nothing about your projects or tasks: it only says "commit abc123 finished, verdict success". The agent, which does know which task it is working on, declares the SHA of the commit it produced when submitting its deliverable. Vaks PM matches the two. The flows arrive in any order — CI often signs before the agent has finished writing up its deliverable — which is why incoming results are held for 24 hours awaiting a match.

The CI verdict always overrides the agent's claim. For this method the status announced by the agent is simply ignored: Vaks PM derives it from the signed result. An agent that declares failure where CI says success (or the reverse) is overruled by the evidence. An agent that invents a SHA that was never tested gets no match: its deliverable stays awaiting evidence and does not advance.

A CI connector is configured under Integrations → CI verification, one per organization per tool. The shared secret is entered once and encrypted at rest; the interface never displays it again. Two formats are supported:

GitHub Actions

Vaks PM speaks GitHub's webhook format natively. On the repository side, add a webhook pointing at the address the connector shows, paste in the shared secret, and subscribe to workflow runs. No development required.

Generic CI

For GitLab CI, Jenkins, Azure DevOps or a homegrown pipeline, Vaks PM defines a minimal contract: the commit SHA and the verdict, signed in a header. One step at the end of the pipeline is enough to post it.

Every result received is recorded in the audit log, and so are rejections: an invalid signature is treated as an attempted forgery, not a benign error. The connector shows the diagnosis of the last event received, so a hookup can be checked without digging through logs.

One secret covers every project, by design. The secret authorizes nothing beyond depositing a verdict on a commit: no reads, no writes to tasks, no privilege escalation. The worst a leaked secret allows is injecting false verdicts — which presupposes the CI pipeline itself is already compromised, in which case the real tests can be rigged anyway. Per-project granularity would add configuration for no gain.

Report-only or enforced

The verification gate runs in report-only mode by default: it measures the strength of the evidence supplied against what was required, logs the gap, but neither blocks nor approves on its own authority. This is deliberate — it lets you collect real calibration data before tightening. A project can then switch to enforced, where insufficient evidence escalates instead of passing. The setting is per project, in the AI tab of its settings, and a project that does not decide inherits the organization default: you can tighten on a well-tooled project while staying in report-only everywhere else.

A deliverable awaiting evidence does not expire on its own. If an agent submits a deliverable announcing CI evidence and the signed result never arrives — CI down, webhook misconfigured, wrong secret — the deliverable waits indefinitely. It is not lost and stays visible in the review queue, where a human can decide at any time; but nothing automatically moves it along. Watch the connector's diagnosis after any configuration change.

Cost & billing

An agent has no timesheet; its consumption is measured in model usage, not hours. After doing work an agent declares the real cost of each run (the number of input and output tokens, a token being the unit in which language models count text). The internal cost is derived from configurable per-1000-token input and output rates, and the amount billed to a client, when applicable, from a separate per-1000-token selling rate. These figures flow into the project's profit-and-loss view, the project and portfolio reports, and the CSV, spreadsheet and PDF exports, so agent cost and revenue appear alongside human labour.

Managing agents — admin areas & the AI administrator role

Three admin areas cover the day-to-day: Agents (identities, owners, trust, capabilities and tokens, under Users & Identity), Agent directories (external connectors, under Integrations), and Agent policies (governance rules and backpressure, under Users & Identity). By default these require full administrator rights.

For organizations that want to delegate agent management without handing out full administration, an AI administrator grant is available. It is not a separate role — a user keeps their existing organization role — but an orthogonal, stackable grant that adds the single “manage agents” permission on top of whatever role the person already holds (for example a team manager or a plain member). An administrator toggles it on a user's profile (under Users & Identity → Users). A user who holds only this grant reaches the administration area in a restricted mode: the three agent areas above are visible and usable, and nothing else — no settings, no member management, no audit log.

Granting is administrator-only. The AI administrator grant can be given only by someone with member-management rights, and its assignment and removal are recorded in the audit log as privileged events. Removing the grant immediately withdraws the agent-management permission at the user's next request.

Initial state & enablement

Starting from a fresh installation, enabling agents end to end involves the following steps:

  1. Create an agent identity and assign it a human owner (Users & Identity → Agents), or connect an agent directory to import one.
  2. Set its capabilities to the minimum the work requires, and mint its access token (record it — it is shown once).
  3. Open a project to agents and give it a brief; optionally set project and task budgets.
  4. Configure policies (require review, backpressure) to match the organization's risk appetite.
  5. Give the agent access through the AI connector. Because agents act over MCP, the connector must be enabled and the organization's license must grant the mcp entitlement; agent write actions additionally require the connector's write toggle. See AI connector (MCP).
In short: an AI agent is a human-owned, seat-free, least-privilege actor that pulls and claims work, produces deliverables gated by human review, is bounded by policies and euro budgets, declares its own cost, and is fully traceable in the audit log — with an optional AI administrator grant to delegate its management without full admin rights.

Audit log & SIEM delivered

The audit log records who did what, when and from where: an append-only trail for security review, compliance and incident response. It can be read in the admin area, exported, forwarded to a SIEM, archived and verified for tampering.

Admin: audit log with filters, entries and exports
Admin › Security & Compliance › Audit log. An append-only trail (successful/failed logins, MFA, role changes…), filters by action / severity / outcome / actor / dates, integrity verification and JSON Lines / CEF export.

Capture model

Reading, exporting & forwarding

Retention, archive & integrity

In short: the audit log is append-only, redacted, tamper-evident, retained for a configurable period, archivable to cold storage, and forwardable to a SIEM by both pull (API) and push (syslog).

GDPR: anonymization & portability

Vaks PM supports the GDPR right to erasure (Article 17) and right to portability (Article 20). An administrator can anonymize the personal data of a user, client or contact, and any user can export a copy of their own data.

Pseudonymize, never delete

Anonymization never deletes a record. It overwrites the fields that identify a person with a neutral value derived from the internal id (for example name → Anonymised user <id>, email → anon-<id>@anonymized.invalid). This is irreversible: the original name and email exist nowhere afterward. Records and their links are kept so that time entries, financials and the audit trail still add up, but nothing points to an identifiable person anymore. This is the recognised approach when full deletion would break legal or accounting obligations.

RecordBlankedKept
Username, email, external/employee id, MFA secret, password, country, languageid, time entries, allocations, financial history (no longer linked to a person)
Audit logreadable actor/resource labels & personal data inside change detailsthe events themselves (required for compliance)
SessionsIP address, device (user-agent)Nothing
Sent emails / webhook payloadsrecipient address & name occurrencesdelivery metadata
Contact (person)name, email, phone, title, noteslink to the client account
Client (company)email, phone, address, notesaccount name (business identity)

Anonymization is idempotent (re-running it does nothing) and the last remaining global administrator cannot be anonymized. Every anonymization and export is itself recorded in the audit log, by id only. Data export for portability is a JSON copy (profile, time entries, allocations, comments, skills, attachment metadata) downloaded by the user from their security settings, or by an administrator on a user's behalf; secrets are never included.

Cold backups still contain the data until they rotate out. Anonymization applies to the live system; database dumps and the audit cold archive lose the personal data only when their retention rotation expires them.

Licensing & seats

Vaks PM uses an explicit seat model. A seat is a licensed user; the number of licensed users is the seat count, and the admin area shows seats used against the entitlement.

Premium capabilities (for example the AI connector and Collaboration spaces) are additionally gated by named license entitlements, independent of the seat count, so a feature is available only when both the entitlement is present and its admin toggle is on.

RBAC & permissions

Access is governed by Role-Based Access Control enforced on the server, for every REST route and every real-time event, never only in the browser. There are nine system roles, scoped either to the whole organization (ORG) or to a single project (PROJECT).

RoleScopeRole in the app
ORG_ADMINORGFull administration of the organization (users, settings, integrations, branding).
PORTFOLIO_MANAGERORGManages the project portfolio, clients and teams.
GLOBAL_REPORT_VIEWERORGRead access to cross-cutting reports.
TEAM_MANAGERORGManages teams and their members.
ORG_MEMBERORGBasic collaborator within the organization.
PROJECT_MANAGERPROJECTRuns a project (tasks, scheduling, team, skill requests).
CONTRIBUTORPROJECTWorks on a project's tasks.
VIEWERPROJECTRead-only on a project.
GUESTPROJECTRestricted / guest access.

Permissions themselves are named scopes that roles (and API keys) carry. The most relevant scopes for an administrator:

ScopeGrants
org:manageOrganization administration: identity providers, API keys, notifications, webhooks, audit settings.
scim:provisionThe SCIM provisioning endpoint (used by the directory's provisioning agent).
audit:readRead and export the audit log over the public API (for SIEM pull).
report:viewView reports. A member-level scope; org-wide listings self-scope to accessible projects.
time:logLog time, including on external tickets.
client:view / client:manageRead or manage clients and contacts.
member:manageManage users, including GDPR anonymization and data export on a user's behalf.
webhooks.managePolicyWhether project managers / team leads may self-manage webhooks on their own projects.

Account security includes Argon2 password hashing, a configurable password policy, lockout after repeated failures, TOTP-based MFA, refresh-token rotation, and capture of each session's IP address and browser identifier. For deployment-level controls (network exposure, TLS, secrets, encryption at rest), see Security.


Related: Documentation home · Architecture · Docker Swarm deployment · Kubernetes deployment · Security · Operations · Demo session