{
  "slug": "critical-path-calculator",
  "name": "gizza-ai/critical-path-calculator",
  "version": "0.1.0",
  "title": "Critical Path Method (CPM) Calculator — gizza.ai",
  "description": "Find the critical path, project duration, earliest/latest start & finish, and slack from a task list — with PERT three-point estimates. Runs in your browser.",
  "tags": [
    "critical path method",
    "cpm calculator",
    "project schedule",
    "earliest start",
    "latest start",
    "total float",
    "free float",
    "slack",
    "pert",
    "task dependencies"
  ],
  "category": "math",
  "urls": {
    "page": "https://gizza.ai/tools/critical-path-calculator/",
    "markdown": "https://gizza.ai/tools/critical-path-calculator/index.md",
    "descriptor": "https://gizza.ai/tools/critical-path-calculator/tool.json",
    "deep_link_example": "https://gizza.ai/tools/critical-path-calculator/?tasks=A%2C%203%0AB%2C%204%2C%20A%0AC%2C%202%2C%20A%0AD%2C%205%2C%20B%2C%20C%0AE%2C%201%2C%20D&format=report"
  },
  "cli": "gizza tool critical-path-calculator \"A, 3\nB, 4, A\nC, 2, A\nD, 5, B, C\nE, 1, D\"",
  "tool": {
    "description": "Run the Critical Path Method (CPM) on a task graph. Provide `tasks` (one per line as `name, duration[, predecessor, ...]`; duration may be a number or a PERT `optimistic/most-likely/pessimistic` estimate like `2/4/9`) and choose `format` = report | json. Returns the total project duration, the critical path, and for every task its earliest start/finish, latest start/finish, total float (slack), free float, and whether it is critical. Errors on cyclic or unknown dependencies.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "format": {
          "default": "report",
          "description": "Output format: 'report' (a human-readable table of earliest/latest start & finish, total & free float, and the critical path) or 'json' (a machine-readable object with the same fields).",
          "enum": [
            "report",
            "json"
          ],
          "type": "string"
        },
        "tasks": {
          "description": "The task list, one task per line as `name, duration[, predecessor, ...]`. `duration` is a number, or a PERT three-point estimate `optimistic/most-likely/pessimistic` (e.g. `2/4/9`, reduced to (o+4m+p)/6). Predecessors are the names of tasks that must finish first. Example: `A, 3` then `B, 4, A` then `C, 2, A` then `D, 5, B, C`. Blank lines and lines starting with `#` are ignored.",
          "type": "string"
        }
      },
      "required": [
        "tasks"
      ],
      "type": "object"
    }
  }
}