AI agents

Vaks PM · Integration, governance & management of AI agents · August 2026

What this guide covers. This page expands the AI agents section of the Product & features guide: what an agent is, how the integration works end to end (with a diagram of the work loop), 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.

Overview

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.

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.

The work loop

Agents follow a pull model rather than being pushed work: an agent connects through the organization's MCP server using its token, then works a task through a server-enforced lifecycle — the state machine lives only on the server, and a wrong order is refused rather than followed. The diagram below shows that cycle end to end.

ENTRY A · AUTONOMOUS The agent pulls its work vaks_next_task / claim_next_task filter: skills ⊆ · prerequisites · priority ENTRY B · ASSIGNED A human assigns the task vaks_list_my_tasks → vaks_claim_task no skill filter approved changes requested → new version 1 Atomic claim To do → Claimed · atomic lock + execution lease 2 vaks_get_work_context What to do + where to deliver (deliveryTarget) 3 vaks_get_verification_requirements Required proof: self-attestation → human 4 Work (In progress) The agent produces the result vaks_execution_heartbeat extends the lease 5 vaks_submit_deliverable Link / file (+ commit SHA if CI) 6 vaks_report_run Tokens & cost → budgets + circuit breaker 7 vaks_submit_for_review In progress → In review (≥ 1 deliverable) 8 Human review / validator verification gate Approved → Done auto-close per config
An agent's pull loop. Two entry points reach the same place: autonomous discovery (A, filtered by skills) and a human-assigned task (B, claimed directly). Orange boxes = the agent's calls through the AI connector; dark boxes = server states and acts; dashed arrow = the return after a changes-requested verdict.

Two ways into the loop

A task can reach an agent in two ways, which do not apply the same filters. In autonomous discovery (entry A), the agent requests its next task and the server only offers eligible ones: an agent-enabled project it is a member of, prerequisites satisfied, and above all the required skills covered by the agent at the requested level. Conversely, when a human assigns a specific task directly (entry B), the agent sees it in its list and can claim it as is — without the skill filter: it is then the person assigning who owns responsibility for the fit. Either way the claim stays atomic and subject to the same guardrails (agent-enabled project, budgets, the client's model allowlist); assignment never claims the task on the agent's behalf — it only makes it visible.

The lifecycle, stage by stage

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.

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 Included

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 agents 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.

Execution resilience — lease, heartbeat & review feedback

A task claimed by an agent is protected by an execution lease: once work starts, the agent must periodically send a heartbeat to signal it is still alive. If it stops responding — a crash, an outage, a dropped connection — without a heartbeat arriving before the lease expires (30 minutes by default, adjustable from 5 minutes to 24 hours, or disabled outright), the task is automatically released: it moves back to To do, the claim and assignment are withdrawn, and its retry count is incremented — with no human needed to unblock it. This only applies to agents; a human who closes their laptop never loses a task this way.

Every heartbeat also returns the agent's remaining limits — lease time, retry count, budget headroom — so it learns its boundaries before continuing to produce rather than after the fact. And when a task comes back with a changes-requested verdict, the agent's work context now includes the latest review outcome: the decision, the reviewer's exact wording, their name and the date, plus prior versions of the deliverable — the agent no longer has to guess what to fix before resubmitting.

Chaining work — subtasks, structured outputs & targeted assistance

Three mechanisms stop an agent from having to guess a value, a breakdown, or an answer instead of getting it from the server:

Structured outputs

A deliverable can carry, alongside its narrative content, a handful of key facts (an identifier, a URL, a version number…) as simple name/value pairs — no nested structure, deliberately, so this channel stays facts rather than a document dump. Once the deliverable is approved, those facts become readable by any task that depends on it directly, and by its subtasks, inside their own work context — an agent no longer has to re-ask for a value already produced upstream. As with the living journal, only approved deliverables feed this channel.

Bounded decomposition

An agent can split the task it holds into subtasks, but tightly bounded: one level deep only, exclusively under the task it has itself claimed and which is still active, and unable to set any governance field on what it creates. A subtask with no ceiling of its own inherits its parent task's budget envelope, and it is the sum of the whole tree (parent plus subtasks) that gets compared against the ceiling — so splitting a capped task cannot be used to dodge its limit.

Targeted assistance

When a task calls for a skill the agent does not have, it can ask for help in a single action: a comment is added to the task as a trace, a skill request is automatically routed to the project team that covers the need (the agent does not choose who to bother), and the task moves on hold with the question as its reason — it stays claimed by the agent (no one else can pick it up) but its execution lease switches off while it waits for a human reply. Three people are alerted directly: the project manager, the agent's owner and the task's co-assignees — a call for help that wakes nobody is not one.

Splitting a task — what a subtask must carry

A subtask is a handover: whoever splits the work knows why, whoever picks it up will not. A subtask reduced to a title is technically available and practically undoable. So when an agent creates one, the product requires it to carry enough to work on without its author:

What is requiredWhy
A substantial descriptionWhat there is to do, what is already known or decided, and what the expected result looks like. A subtask without a description is refused, with a message stating what to write.
A skillTaken from the parent task by default, and replaceable when the split exists precisely to change skill. Without one, the agent work queue has no routing criterion: any agent on the project could pull a task it cannot do — even though "I am missing a skill" is the first reason to split in the first place.
Its parent's contextPassed automatically: the parent task's statement, description, acceptance criteria, guardrails and already-approved results. Plus the approved results of the other subtasks of the same split, which answer one another.

An agent cannot set the acceptance criteria of what it creates — that is a human decision, and an agent never writes the bar its own work will be judged against. It is the level of proof required of the parent task, set by governance, that applies to the whole split.

Validating a split — proof roll-up

When the real work lives in the subtasks, validating the parent task on its summary alone would ignore what its subtasks did — or did not — demonstrate. Two rules therefore apply when an agent submits a parent task for review:

The parent task also carries its own summary deliverable. This is not a formality: subtasks validated separately prove that each piece holds, never that the whole holds once assembled — the classic case where every unit test passes and integration breaks. The summary is what proves the whole.

With a continuous integration pipeline, all of this chains without intermediate human review. Each subtask has its commit attested by CI; if they all reach the signed continuous integration proof level, the weakest link of the split is worth that same level, and the parent task's requirement is satisfied without a person validating each subtask. The summary deliverable must then carry the commit of the assembled branch — that is what proves integration.

Before attempting submission, an agent can check the state of its split: what is done, what is still missing, and which subtasks remain below the required level of proof. It then fixes things rather than running into a refusal.

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. The full procedure lives in the CI verification guide.

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 (it is included, free); agent write actions additionally require the connector's write toggle. Beyond 5 agents, an agents license is required. 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.

See also: Product & features — AI agents · Agent authentication · Agent directories · CI verification · AI connector (MCP)