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
| Concept | Scope | What it means |
|---|---|---|
| Activity Plan | Organization | The reusable workflow definition: inputs, step graph, defaults, and metadata |
| Activity | Project | One execution of an Activity Plan with concrete inputs, status, steps, logs, and results |
| Step | Activity | One materialized unit of work inside an Activity run |
| Task | Project | Human work created by an Activity when review, correction, or approval is needed |
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 kind, optional dependencies, and kind-specific configuration.
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:
| Form | Meaning |
|---|---|
"slug" | Run after the named step reaches COMPLETED or SKIPPED. |
"slug?" | Await-only dependency: also satisfied when the upstream step is NOT_TAKEN (its branch was not chosen). An await-only dependency requires a conditionExpr on the step — Kodexa fails the Activity start with step "<slug>" has await deps (? suffix) but no conditionExpr if one is absent (the only exception is an ANY_BRANCH join whose union supplies its own guard). |
"slug:action" | Run after the named step completes with that specific action. |
"slug?:action" | Await-only, action-qualified. The ? may sit on either side of the colon ("slug?:action" and "slug:action?" are equivalent). |
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:
| Step kind | Live action source |
|---|---|
SCRIPT | scriptActions |
BRIDGE_CALL | bridgeActions |
LLM | promptActions |
CREATE_TASK | the referenced Task Template’s metadata.actions |
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
| Step kind | Use it for |
|---|---|
CREATE_TASK | Create human review, exception, approval, or correction work from a Task Template |
SCRIPT | Run inline JavaScript for routing, document inspection, data updates, enrichment, or custom logic |
BRIDGE_CALL | Call a configured Service Bridge as a first-class workflow step |
EXECUTION | Run a module or automated extractor/classifier |
LLM | Run a prompt or prompt template and map the result into the Activity |
AGENT | Delegate a bounded operation to an agent runtime |
APPROVAL | Pause for approval before continuing |
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.
