Skip to main content
A dotbot workflow defines a multi-step pipeline that the AI runs in your project. Each workflow is a directory with two manifests: workflow.json declares the pipeline, and manifest.json holds the workflow’s name and description. A project can have several workflows installed at once, and each one runs and re-runs independently with dotbot run <name>.

When to create a custom workflow

Create a custom workflow when the built-in workflows do not match your process. Common reasons include:
  • Your pipeline needs a specific sequence of AI and deterministic steps.
  • You want to integrate with an internal system, such as an internal Jira project or a custom API.
  • You need conditional tasks that run only when specific files or states exist.
  • You want to share a standard engineering process across several teams.
If a built-in workflow covers your case, prefer it. Custom workflows need maintenance as your process changes.

Anatomy of workflow.json

workflow.json declares the workflow’s identity, its prerequisites, the kickstart form, and the task pipeline. The example below shows the common top-level fields:
workflow.json
Accompany workflow.json with a manifest.json that carries the name and a longer description shown alongside the workflow:
manifest.json

Task types

dotbot resolves each task by its type field against a registered executor. Six task types ship with the framework.
Only prompt and interview tasks involve the AI provider for their own execution. The script, mcp, task_gen, and barrier types run deterministically and do not run an analysis phase.

Common task fields

Each entry in the tasks array shares a common set of fields. A prompt task names a prompt file with workflow; a script or task_gen task names a script with script.

Adding dependencies between tasks

Use depends_on to declare which tasks must finish before a task starts. Reference tasks by their name:
Use a barrier task to wait for a group of parallel tasks before continuing:

Configuring the kickstart form

The form block controls what users see when they open the workflow in the dashboard before running it. Each entry in modes renders a different form state based on a file-existence condition:
  • A condition without ! is true when the file exists.
  • A condition with a leading ! is true when the file does not exist.
Set hidden: true on a mode to suppress the form when its condition is met. This is useful when a repeat run should skip the interview because the project is already set up.
Set show_interview: true on the first-run mode to prompt users for project details, and set the follow-up mode to hidden: true so repeat runs go straight to execution.

Workflow directory structure

A workflow directory holds the two manifests plus the supporting content the pipeline references:
Built-in workflows live under <install>/content/workflows/<name>/. When you install or scaffold a workflow into a project, dotbot materialises it at .bot/content/workflows/<name>/, where you can edit it without changing the framework copy. A project workflow with the same name as a built-in one takes precedence, which is how you customise a built-in workflow without forking it. Prompt files in prompts/ are Markdown templates. The runtime injects context, such as the task description, product documents, and codebase index, before passing them to the provider.

Installing and running the workflow

1

Install the workflow during project initialisation

Pass the workflow name to dotbot init:
2

Add a workflow to an existing project

Use dotbot workflow add after the project is initialised:
3

Install from an enterprise registry

Prefix the workflow name with the registry name and a colon:
4

Run the workflow

Start a run from the dashboard, or run it directly from the CLI:
The requires block is validated before a workflow runs. If a required environment variable, MCP server, or CLI tool is missing, dotbot reports a clear error with the hint text so you know exactly what to configure before retrying.