Skip to content
Get AI Business OS

Tasks and Dependencies

PRIMA Project Management

PRIMA Project Management tracks work at the level of projects, and tasks are optional. When a project has a task file, the dashboard reads it and draws task bars, dependency arrows and progress. When it has none, the dashboard shows the project without them.

Each project keeps its tasks in a file named after the project ID.

.claude/state/tasks/P012.json

The file holds a tasks array. When a project has no task file, the dashboard looks for a todos list of plain text items on the project. It shows each item as a task with status todo.

The dashboard reads the fields below from each task. A task with an id, a title and a status appears in the task lists and the dependency graph. It also needs at least one date to appear as a bar on the Gantt chart.

Field What the dashboard does with it
id Identifies the task, such as T001, and links dependencies to it
title The task name on bars, in lists and in the graph
status Colours the task and decides whether it counts as done or blocked
dependencies The tasks this one depends on (see below)
startDate Where the task bar starts on the project Gantt chart
dueDate Where the task bar ends, and the date on the Calendar view
created Shown in the task details and used to sort the Recent Tasks list
completed The completion date shown in the task details
updated or lastUpdated The last change date shown in the task details
assignee Shown in the task details when present
estimatedHours Shown in the task details when present
notes Shown in the task details on the Recent Tasks list

A task with only a due date gets a bar that starts seven days earlier. A task with only a start date gets a bar that ends seven days later.

Task files written over time use different names for the same thing. The build script reads these names and converts them, so you do not need to rewrite old files.

Older name Read as
dependsOn dependencies
A dependency written as a plain task ID, such as "T001" A finish-to-start dependency on that task
A dependency with id in place of taskId taskId
createdAt, createdDate, added created
completedAt, completedDate completed
due dueDate
Status How the dashboard treats it
todo Open, shown in grey
in-progress Open, shown in light blue
done Counted as done, shown in green
on-hold Counted as blocked, shown in amber
cancelled Not counted as done or blocked, though it still counts towards the task total

A dependency says that one task waits on another. Write each one as an object with a type and the ID of the task it depends on.

{
"projectId": "P012",
"tasks": [
{ "id": "T001", "title": "Book the venue", "status": "done", "dueDate": "2026-11-02" },
{
"id": "T002",
"title": "Send invitations",
"status": "todo",
"dueDate": "2026-11-09",
"dependencies": [{ "type": "FS", "taskId": "T001" }]
}
]
}
Type Meaning
FS Finish to start, the default when no type is given
SS Start to start
FF Finish to finish
SF Start to finish

The project Gantt chart draws a finish-to-start dependency as an arrow with a right-angled elbow. It draws the other three types in a second arrow style. The Dependency Graph tab lays the tasks out in columns by depth and labels each arrow with its type.

The dashboard counts the tasks in each file afresh on every build, so the figures always match the file.

  • Task count is every task in the file, done tasks included.
  • Done is every task with status done.
  • Blocked is every task with status on-hold. It also includes every open task that depends on an unfinished task in the same file.

The count ignores a dependency on a task ID that is not in the same file. A task that waits only on a dependency keeps its own status colour on the charts, and only the blocked count reflects it.

The dashboard can mark a project that you worked on recently but whose tasks show no movement. A marked project shows “At risk” in place of its status on the Projects view. The dashboard marks a project when all three of these conditions hold.

  1. Its status is in-progress or overdue, because the dashboard never marks paused or archived projects.
  2. Its lastWorked date falls within the last 14 days of the build date.
  3. Its task file holds no tasks, or no task carries a created, completed, updated or start date from the last 14 days.

The dashboard never marks a project that has no task file, unless you switch that on. A workspace that has never used task files therefore sees no “At risk” labels.

Setting Where Effect
taskEnforcement.enabled: false .claude/state/state.json Switches the marking off for every project
taskEnforcement.enabled: true .claude/state/state.json Also marks projects that have no task file at all
taskTrackingEnabled: false The project’s detail file, or its entry in state.json when it has no detail file Switches the marking off for that project

Neither setting is part of the state schema that ships with the product. The dashboard reads them when they are present.