What an Activity Plan Defines
An Activity Plan answers four questions:- What starts the work? A manual start, intake upload, task status change, another Activity completing, or a Trigger.
- What inputs are required? Document family IDs, project-specific values, routing hints, external reference IDs, or metadata supplied by the Trigger.
- What steps run? A graph of CREATE_TASK, SCRIPT, BRIDGE_CALL, EXECUTION, LLM, AGENT, and APPROVAL steps.
- What result is produced? Completed tasks, updated documents, external system updates, extracted data, logs, and step results.
Activity Plan vs Activity
Activity Plans are organization-level resources so the same business process can be reused across projects. A project must bind an Activity Plan before it can start Activities from it. That binding is intentional: it says this project is allowed to run this process with its document stores, task templates, data definitions, data forms, modules, and service bridges.
Basic Shape
An Activity Plan is usually authored as resource configuration and deployed with the rest of your Kodexa project assets.Step Graphs
Steps form a directed graph. Each step has aslug, a type, optional dependencies, and type-specific fields at the top level of the step.
Dependencies can reference a step generally:
Steps and Actions Are Keyed by Slug
An Activity Plan is portable: steps and their dependencies key on slugs, so a plan means the same thing wherever it runs. When an Activity starts, Kodexa projects the plan’s steps into fresh Activity-owned step rows and mints new internal identifiers for each one — nothing independsOn needs to know those runtime IDs.
Because slugs are the only identity dependencies resolve against, they must be unambiguous. Kodexa validates this at Activity start:
- Every step needs a
slugand akind. A step missing either fails the start. - Step slugs must be unique within a plan. A duplicate slug fails the start rather than silently misrouting every dependency that names it.
- Action slugs must be unique within a step. Duplicate action slugs on one step fail the start.
slug values you control and keep them stable — renaming a slug is a breaking change to every step that depends on it.
dependsOn Forms
dependsOn accepts four forms:
A dependency on an unknown step slug fails the Activity start with
step "<step>" depends on unknown slug "<slug>".
Action-Qualified Dependencies Resolve Against the Live Action Source
The action qualifier in"slug:action" must name an action the source step can actually emit at runtime. Each step kind has a single live action source:
The qualifier can be an action’s declared
slug or, for legacy plans, its uuid value. References that could never fire are rejected at Activity start with a precise message — for example, an action declared only in a CREATE_TASK step’s inline actions array (a documentation mirror; tasks render actions from the template), or an action a step kind does not execute. A qualifier that matches more than one action sharing a slug also fails as ambiguous.
In earlier releases, an unresolvable action reference was stored verbatim and produced a silently dead branch that never fired. It now fails the Activity start loudly, so a mistyped or stale action reference surfaces immediately.
Legacy uuid Identities
Plans authored before slug portability carried a uuid on steps and actions. Kodexa treats an authored uuid as a legacy alias of the slug — the same identity space — so older plans and their dependsOn references keep working:
- A step’s authored
uuidis never a database identity; every run mints fresh internal IDs. AdependsOnentry that names a step by its authoreduuidstill resolves to that step’s slug. - An action declaring only a
uuid(noslug) adopts theuuidvalue as its slug.
- Two steps declaring the same authored
uuid, or an authoreduuidthat collides with another step’s slug, fail the start. - An action declaring both a
uuidand aslugwith different values fails the start —uuidis the legacy spelling ofslug, so keep the slug. Equal values are the accepted aliased form.
uuid fields. When an Activity starts from a plan that still holds legacy uuid identities, Kodexa logs a warning noting how many step and action uuids remain. Resaving the plan in the plan editor rewrites those uuids as slugs and converges the plan to the portable form.
Common Step Kinds
A Practical Modeling Order
- Start with the business process: what outcome does the organization need?
- Define the documents and data model: what document families and data definitions are involved?
- Identify the automation: extraction, classification, validation, enrichment, posting, and notifications.
- Identify the human work: which decisions need a Task?
- Identify external systems: which Service Bridges are needed?
- Convert that model into an Activity Plan step graph.
- Bind the Activity Plan and all referenced resources to the project that will run it.
AI Naming
Automatically generate contextual titles and descriptions using AI.
Step Catalog
Learn each Activity Plan step kind and when to use it.
Create Task Steps
Create human review, correction, and exception work from an Activity.
Execution Steps
Run module-backed extraction, classification, and processing work.
Script Steps
Add JavaScript routing and business logic to an Activity Plan.
Service Bridge Steps
Call external systems as first-class Activity Plan steps.
LLM Steps
Run bounded prompts and map model output into the workflow.
Agent Steps
Delegate bounded work to agent runtimes.
Approval Steps
Model authorization gates and approval outcomes.
