Task Runner
The Fabriqa task runner lets you define and execute workspace tasks — build commands, test runners, dev servers — directly from the app without leaving your chat context. It reads the same tasks.json format used by VS Code, so existing project task configurations work immediately.
Task File Locations
Fabriqa looks for task definitions in this priority order:
.fabriqa/tasks.json — Fabriqa-specific task file (takes precedence).
.vscode/tasks.json — VS Code task file (used if no Fabriqa file is found).
Both files use the same format. The .fabriqa/tasks.json file is useful when you want Fabriqa-specific tasks that shouldn’t appear in VS Code’s task runner.
A custom path can also be set per workspace in Workspace Settings → Overview.
Task files use the VS Code tasks.json format with "version": "2.0.0". The format supports JSONC (JSON with comments).
{
"version": "2.0.0",
"tasks": [
{
"label": "Dev",
"type": "shell",
"command": "npm run dev",
"options": {
"cwd": "${workspaceFolder}"
}
},
{
"label": "Build",
"type": "shell",
"command": "npm run build",
"options": {
"cwd": "${workspaceFolder}"
}
},
{
"label": "Test",
"type": "shell",
"command": "npm test",
"args": ["--coverage"],
"options": {
"cwd": "${workspaceFolder}"
}
}
]
}
Each task requires at minimum a label and a command.
Variable Resolution
Use VS Code-compatible variables in command, args, and options.cwd:
| Variable | Resolved Value |
|---|
${workspaceFolder} | Absolute path to the workspace root |
${workspaceFolderBasename} | Folder name only (no path) |
${cwd} | Same as ${workspaceFolder} |
${pathSeparator} or ${/} | / on macOS/Linux, \ on Windows |
${env:VAR_NAME} | Value of environment variable VAR_NAME |
Example using variables:
{
"label": "Start Server",
"type": "shell",
"command": "node",
"args": ["${workspaceFolder}/server.js"],
"options": {
"cwd": "${workspaceFolder}/packages/api"
}
}
Task Arguments
Pass arguments via the args array. Arguments are automatically shell-escaped:
{
"label": "Lint",
"type": "shell",
"command": "eslint",
"args": ["src", "--ext", ".ts,.tsx", "--fix"]
}
Override any task property for a specific platform using windows, osx, or linux keys:
{
"label": "Open Editor",
"type": "shell",
"command": "code .",
"windows": {
"command": "code.cmd ."
},
"linux": {
"command": "code-insiders ."
}
}
The platform override merges on top of the base task definition. Only the specified properties are overridden.
Task Dependencies
Use dependsOn to chain tasks. Dependencies run before the task’s own command:
{
"label": "Build and Test",
"type": "shell",
"command": "echo 'All done'",
"dependsOn": ["Build", "Test"]
}
dependsOn accepts a single task label (string) or an array of labels. Dependencies are resolved recursively and concatenated with && — if any dependency fails, the chain stops.
Circular dependencies are detected and skipped. A task that depends on itself (directly or transitively) will not cause an infinite loop — the cycle is broken and the circular portion is omitted.
Running Tasks
Tasks appear in the Run button dropdown in the chat header toolbar:
- Click the Run button (▶) to open the actions menu.
- Select a task from the list to execute it.
- The task runs in the integrated terminal panel.
Run Last Action
Cmd+R (macOS) / Ctrl+R (Windows / Linux)
Reruns the most recently selected task without opening the menu. If no task has been run yet, Cmd+R opens the actions menu instead.
The last selected task is persisted per workspace across restarts.
Adding Tasks via the UI
If no task file exists yet, click Add action in the Run menu to open a task definition editor. Fabriqa creates a .fabriqa/tasks.json with a starter template and opens it for editing.
You can also add tasks from Workspace Settings → Actions.
Example: Monorepo Setup
{
"version": "2.0.0",
"tasks": [
{
"label": "Install",
"type": "shell",
"command": "npm install",
"options": { "cwd": "${workspaceFolder}" }
},
{
"label": "Build All",
"type": "shell",
"command": "npm run build --workspaces",
"dependsOn": ["Install"],
"options": { "cwd": "${workspaceFolder}" }
},
{
"label": "Dev API",
"type": "shell",
"command": "npm run dev",
"options": { "cwd": "${workspaceFolder}/packages/api" }
},
{
"label": "Dev Web",
"type": "shell",
"command": "npm run dev",
"options": { "cwd": "${workspaceFolder}/packages/web" }
}
]
}