Docs/Overview/Glossary

Glossary & Terminology

The terms used across this documentation set, defined as they are used on this platform — not generically. Where a term is a public standard, the definition names the standard; where it is VegaDūta-specific, the definition names the code or config that implements it.

Product and tenancy

TermDefinition
Agent A configured AI worker owned by a tenant: a role (system prompt), a model, an allow-list of tools, optional knowledge collections, and channel bindings. Defined by the agent table in each tenant schema (core/agents, Agent.java). Agents carry per-instance tuning knobs — reasoning_depth, cost routing, collaborator lists — settable after creation via PATCH /api/agents/{id}/….
Tenant One customer workspace. Registered in control_plane.tenant in the public schema; all of the tenant's data lives in its own Postgres schema. The request's tenant context (TenantContext) is derived from the JWT and selects the schema.
Schema-per-tenant The isolation model: each tenant gets its own Postgres schema — its own full set of tables — inside one shared database. Isolation is enforced by SET search_path on the pooled connection, which is why PgBouncer must run in session mode: transaction pooling reassigns connections mid-session and a query can land in the wrong tenant's schema. See Data Architecture.
Control plane The shared, non-tenant state in the public schema — the tenant registry, plans, platform settings — migrated by the db/migration/controlplane/ Flyway directory, once, rather than per schema.
Persona A role-shaped user of the platform: tenant admin, tenant member (agent-builder / delegated-user), end-customer (embeds), platform admin, API consumer / external agent, and channel end-user. Realm roles in Keycloak map to the authenticated subset.
FREE mode A platform-wide positioning flag (platform.free-mode.enabled=true, seeded by migration V237; NEXT_PUBLIC_FREE_MODE=1 / WEB_FREE_MODE for the console). Every tenant resolves as the top tier for feature gates while the platform-pool anti-abuse caps stay enforced; the web UI swaps pricing surfaces for open-source copy. Plan/billing surfaces stay hidden unless NEXT_PUBLIC_BILLING_ENABLED=1.

Agents, LLMs and knowledge

TermDefinition
BYOK — bring your own key A tenant supplies its own API credentials for an LLM provider. Keys are validated at entry and stored encrypted with APP_ENCRYPTION_KEY in the tenant schema; every agent on the account can then use that provider's models. ~14 providers are supported.
Hosted (platform) pool The operator-provided model option for tenants without a BYOK key; the operator configures which providers and credentials back it (for example the VERTEX_POOL_* slots). Usage is metered into llm_call_log and capped by the anti-abuse limiter — which stays on even under FREE mode.
Jev TypeSafe's decision model, integrated as a cheap calibrated yes/no call (noul) rather than a chat model. Used today as a second opinion for cost routing: a deterministic heuristic decides if a turn is "simple"; only a heuristic not-simple is offered to Jev, which can rescue it to the agent's economy model above a confidence threshold (default 0.75). Tenants can bring their own TypeSafe key (/api/jev/credential), set a per-tenant policy (jev_policy, V334), or try it in a bounded playground. Implementation: core/agents/.../decision/JevDecisionService.java.
Reasoning depth A per-agent enum (agent.reasoning_depth, ReasoningDepth.java) controlling how much verification a turn gets — a pipeline knob, not a sampling knob. FAST = no extra pass (default, unchanged legacy behavior). CAREFUL = one self-consistency re-check of the final answer. RIGOROUS = CAREFUL plus Reflexion self-critique plus an independent verifier call before every tool executes — the right default for side-effecting agents. PLANNED = a cheap planning call decomposes the request into an ordered step list before the tool loop; not currently combinable with CAREFUL/RIGOROUS passes in one turn.
Guardrail A platform-layer check applied outside the model on what goes in and what comes out — profanity, jailbreak/prompt-injection, PII, policy violations, toxicity, custom rules — enforced by core/guardrails (e.g. GuardedToolCallback, ChatGuardrailGate), with flagged content sent to a review queue. Enforced by the system, not requested in the prompt.
Approval gate Human-in-the-loop control: a workflow node type and a gate in front of sensitive agent tool calls. The run pauses until a person approves or rejects; the decision is written to the audit log (core/approval).
RRF — Reciprocal Rank Fusion The rank-merge rule used by knowledge search: hybrid retrieval runs a vector (pgvector) list and a keyword list, then fuses them by summing 1/(k + rank) per list with k = 60 (Cormack et al.). A reranker may refine the fused shortlist; if reranking is unavailable the RRF order stands. Implementation: core/knowledge/.../KnowledgeSearchService.java.
llm_call_log The per-tenant table every LLM call writes (via LlmMetricsAdvisor): provider, model, latency, tokens, estimated cost, success/exception. Parallel to the OTLP span sent to Langfuse.
Kill switch An emergency off. Exists at tenant scope (suspend one tenant's agents) and platform scope (web-admin); part of the built-in governance layer alongside autonomy tiers.

Integration and protocols

TermDefinition
MCP — outbound (client) Core acts as an MCP client: tenants register MCP servers in a dynamic connector registry (core/mcp) over STDIO, SSE or streamable HTTP, and their tools become available to agents. STDIO packages (npx …, uvx …) are spawned on mcp-stdio-runner — a separate Node service — because untrusted code never runs inside core.
MCP — inbound (server) Core also exposes an MCP server (the mcpserver Spring profile): external MCP clients — Claude, an IDE — can list and call a tenant's agents and workflows and search its knowledge base, subject to the same auth.
AG-UI The Agent–User Interaction protocol: an open, event-based standard for streaming an agent's messages, tool calls and state changes to a front end. Implemented by AgUiRunController / AgUiEventMapper in core/agents/agui; one of the three agent connections alongside MCP (to tools) and A2A (to agents).
A2A The Agent-to-Agent protocol (v1.0): lets agents on other platforms discover and call agents built here. The platform publishes an agent card at api.example.com/.well-known/agent-card.json.
Channel A messaging surface an agent answers on — ~10 types: WhatsApp, Telegram, Slack, Discord, Messenger, Instagram, X, Email, Teams, Voice — plus web embeds. Implemented in core/omnichannel; voice-agent is the LiveKit worker.
Sidecar Ambiguous on this platform; both uses are real: (1) sidecar/ — the Python FastAPI knowledge/ML service on port 8001 (chunking, embeddings, OCR, reranking, transcription); (2) a helper container deployed next to a service (for example a connection pooler). Context disambiguates.

Deployment and operations

TermDefinition
Worktree build rule Images you deploy should be built from a clean, detached git worktree at the target SHA — git worktree add --detach, build there, git worktree remove --force after. A Docker build context includes whatever is on disk, including uncommitted work and stray .env*.local files. Released images from release.yml are built in CI from the tag.
NEXT_PUBLIC_* bake Next.js inlines a NEXT_PUBLIC_* value into the browser bundle when it is set at build time. The Dockerfiles leave these build args empty by default so the runtime environment decides; a value you do bake (especially localhost) can only be changed by rebuilding. See ADR-0007.
APP_ENCRYPTION_KEY The single symmetric key encrypting every stored provider credential and channel secret. It must be identical everywhere core boots — deploy/compose/.env, core/.env.local, your Kubernetes Secret. A mismatch makes all stored credentials undecryptable — a classic failure during host migrations and restores. Rotation requires a decrypt/re-encrypt migration.
Dual issuer Core validates JWTs against a primary issuer plus KEYCLOAK_ADDITIONAL_ISSUERS. Required because Keycloak pins its hostname: every token carries iss=<PUBLIC_AUTH_URL>/realms/agentic-ai regardless of which URL minted it. If core does not accept that exact issuer, every authenticated call 401s. Add the old issuer here during a domain change.
shape-api / shape-jobs / app-worker The runtime split of the one core image: shape-api is a Spring profile for interactive-serving pods that skips ~30 scheduled beans/listeners; shape-jobs is the profile for pods that own those sweeps (queue pollers, outbox relays, cron tickers); app-worker is a separate Temporal-worker assembly (no @EnableScheduling). Unset, everything runs in the single JVM as before.
Flyway version namespace Both migration directories — db/migration/controlplane/ (80 files) and db/migration/tenant/ (139 files) — share one version space. controlplane/V227 and tenant/V227 collide. Reserve numbers by checking maxima in both folders; scripts/ci/flyway-lint.sh gates it in CI. File counts are approximate and grow over time.
Compose profile A named opt-in group of services in deploy/compose/docker-compose.yml (events, temporal, jobs, observability, tracing, voice, rl, code-intel, builder, sandbox, tools, browser). scripts/vegaduta up --full --profile x also sets the core flags each profile needs.
Verified / unverified The ops convention carried through this documentation: verified = checked against the repository on the stated date; unverified = believed, not re-checked — a lead, not a fact.
Related pages

Platform at a Glance for the system picture · Environment Variable Reference for the full variable list.