- Add Model System section covering presets, per-task overrides, and hierarchy - Expand GitHub Integration with badges, PR creation, and issue linking - Add Task Planning & Creation section with AI-assisted workflows - Add Workflow Steps section with built-in templates - Expand Dashboard Features with WebSocket badges and settings - Expand CLI Commands with all new task operations - Add Configuration Reference for all settings - Add Multi-Step Scheduled Tasks documentation - Restore Archive section and fix duplicate headers - Include changeset for version bump
702 lines
26 KiB
Markdown
702 lines
26 KiB
Markdown
# Fusion
|
|
|
|
AI-orchestrated task board. Like Trello, but your tasks get specified, executed, and delivered by AI — powered by [pi](https://github.com/badlogic/pi-mono).
|
|
|
|

|
|
|
|
## Workflow
|
|
|
|
```mermaid
|
|
graph TD
|
|
H((You)) -->|rough idea| T["Triage\n<i>auto-specification</i>"]
|
|
T --> TD["Todo\n<i>scheduled for execution</i>"]
|
|
TD --> IP["In Progress\n<i>for each step:\nplan, review, execute, review </i>"]
|
|
|
|
subgraph IP["In Progress"]
|
|
direction TD
|
|
NS([Begin step]) --> P[Plan]
|
|
P[Plan] --> R1{Review}
|
|
R1 -->|revise| P
|
|
R1 -->|approve| E[Execute]
|
|
E --> R2{Review}
|
|
R2 -->|revise| E
|
|
R2 -->|next step| NS
|
|
R2 -->|rethink| P
|
|
end
|
|
|
|
R2 -->|done| IR["In Review\n<i>ready to merge,\nor auto-complete</i>"]
|
|
IR -->|direct squash merge\nor merged PR| D["Done"]
|
|
|
|
style H fill:#161b22,stroke:#8b949e,color:#e6edf3
|
|
style T fill:#2d2006,stroke:#d29922,color:#d29922
|
|
style TD fill:#0d2044,stroke:#58a6ff,color:#58a6ff
|
|
style IP fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
|
|
style P fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
|
|
style R1 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
|
|
style E fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
|
|
style R2 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
|
|
style NS fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
|
|
style IR fill:#0d2d16,stroke:#3fb950,color:#3fb950
|
|
style D fill:#1a1a1a,stroke:#8b949e,color:#8b949e
|
|
```
|
|
|
|
Tasks with dependencies are processed sequentially. Independent tasks run in parallel.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
npm i -g @dustinbyrne/kb
|
|
```
|
|
|
|
Then from the root of your repository:
|
|
|
|
```bash
|
|
fn dashboard
|
|
```
|
|
|
|
Or start with interactive port selection:
|
|
|
|
```bash
|
|
fn dashboard --interactive
|
|
```
|
|
|
|
Open [http://localhost:4040](http://localhost:4040) — create tasks from the board or the CLI.
|
|
|
|
### CLI commands
|
|
|
|
**Dashboard:**
|
|
```bash
|
|
fn dashboard # Start the web UI (default port 4040)
|
|
fn dashboard --interactive # Start with interactive port selection
|
|
fn dashboard --paused # Start with automation paused
|
|
fn dashboard --dev # Start web UI only (no AI engine)
|
|
```
|
|
|
|
**Task Management:**
|
|
```bash
|
|
fn task create "Fix the login bug" # Create a new task (goes to triage)
|
|
fn task create "Bug" --attach screenshot.png --depends KB-001
|
|
fn task plan "Build auth system" # Create task via AI-guided planning
|
|
fn task list # List all tasks
|
|
fn task show KB-001 # Show task details, steps, log
|
|
fn task logs KB-001 [--follow] [--limit 50] [--type tool]
|
|
fn task move KB-001 todo # Move a task to a column
|
|
fn task merge KB-001 # Merge an in-review task
|
|
fn task duplicate KB-001 # Duplicate a task (copy to triage)
|
|
fn task refine KB-001 --feedback "Add tests" # Create refinement task
|
|
fn task archive KB-001 # Archive a done task
|
|
fn task unarchive KB-001 # Restore an archived task
|
|
fn task delete KB-001 [--force] # Delete a task
|
|
fn task retry KB-001 # Retry a failed task
|
|
fn task steer KB-001 "Use TypeScript" # Add steering comment
|
|
fn task pause KB-001 # Pause automation for task
|
|
fn task unpause KB-001 # Resume automation for task
|
|
```
|
|
|
|
**GitHub Integration:**
|
|
```bash
|
|
fn task import owner/repo # Import all open issues
|
|
fn task import owner/repo --interactive # Interactive issue selection
|
|
fn task import owner/repo --limit 10 # Limit number of issues
|
|
fn task import owner/repo --labels bug # Filter by label(s)
|
|
fn task pr-create KB-001 --title "Fix" --base main
|
|
```
|
|
|
|
**Git Commands:**
|
|
```bash
|
|
fn git status # Show branch, commit, dirty state
|
|
fn git fetch [remote] # Fetch from remote
|
|
fn git pull [--yes] # Pull current branch
|
|
fn git push [--yes] # Push current branch
|
|
```
|
|
|
|
**Settings:**
|
|
```bash
|
|
fn settings # Show current configuration
|
|
fn settings set maxConcurrent 4 # Update a setting
|
|
```
|
|
|
|
**GitHub Import:**
|
|
- Batch mode imports all open issues automatically (skipping already-imported)
|
|
- Interactive mode (`-i`) lets you select specific issues from a numbered list
|
|
- Uses `gh` CLI authentication (run `gh auth login`) or falls back to `GITHUB_TOKEN` for private repositories
|
|
- Pull requests are automatically filtered out (use `fn task pr-create` to create PRs from tasks)
|
|
|
|
**Dashboard Import:**
|
|
- Click the ↓ (Download) icon in the header to open the GitHub import modal
|
|
- Fusion detects GitHub remotes automatically: a single remote is preselected, and multiple remotes can be chosen from a repository dropdown
|
|
- Optionally filter the fetched issues with comma-separated labels before loading open issues
|
|
- Review the results list and preview pane, then select the issue you want to import
|
|
- Already-imported issues stay visible with an "Imported" badge and cannot be selected again
|
|
|
|
Agents can use these same commands, or see [`.agents/skills/`](.agents/skills/) for structured skill docs.
|
|
|
|
### Prerequisites
|
|
|
|
The AI engine uses [pi](https://github.com/badlogic/pi-mono) under the hood:
|
|
|
|
1. `npm i -g @mariozechner/pi-coding-agent`
|
|
2. Run `pi` and use `/login`, or set `ANTHROPIC_API_KEY`
|
|
|
|
Fusion reuses your existing pi authentication.
|
|
|
|
## Packages
|
|
|
|
| Package | Description |
|
|
| --------------- | --------------------------------------------------------------- |
|
|
| `@kb/core` | Domain model — tasks, board columns, file-based store |
|
|
| `@kb/dashboard` | Web UI — Express server + kanban board with SSE |
|
|
| `@kb/engine` | AI engine — triage (pi), execution (pi + worktrees), scheduling |
|
|
| `kb` (cli) | CLI — `fn dashboard`, `fn task create/list/move/attach` |
|
|
|
|
## Architecture
|
|
|
|
### Task Storage
|
|
|
|
Tasks live on disk in `.kb/tasks/` in the project root:
|
|
|
|
```
|
|
.kb/
|
|
├── config.json # Board config + ID counter
|
|
└── tasks/
|
|
└── KB-001/
|
|
├── task.json # Metadata (column, deps, timestamps)
|
|
├── PROMPT.md # Task specification
|
|
└── attachments/ # File attachments — images & text files (optional)
|
|
```
|
|
|
|
### Board UI
|
|
|
|
Real-time kanban board at `localhost:4040`:
|
|
|
|
- Drag-and-drop cards between columns
|
|
- Create tasks from the web UI
|
|
- Click cards for detail view with move/delete actions
|
|
- Server-Sent Events for live updates across tabs
|
|
|
|
### AI Engine
|
|
|
|
The AI engine starts automatically with the dashboard. Three components run:
|
|
|
|
- **TriageProcessor** — Watches triage column. Spawns a pi agent session that reads the project, understands context, and writes a full PROMPT.md specification. Moves task to todo.
|
|
|
|
- **Scheduler** — Watches todo column. Resolves dependency graphs. Moves tasks to in-progress when deps are satisfied and concurrency allows (default: 2 concurrent). When `groupOverlappingFiles` is enabled in settings, tasks whose `## File Scope` sections share files are serialized to prevent merge conflicts.
|
|
|
|
- **TaskExecutor** — Listens for tasks entering in-progress. Creates a git worktree, spawns a pi agent session with full coding tools scoped to the worktree, and executes the specification. If the task has enabled workflow steps, runs them sequentially before moving to in-review.
|
|
|
|
Each pi agent session gets:
|
|
|
|
- Custom system prompt for its role (triage specifier vs task executor)
|
|
- Tools scoped to the correct directory (`createCodingTools(cwd)`)
|
|
- In-memory sessions (no persistence needed)
|
|
- The user's existing pi auth (API keys from `~/.pi/agent/auth.json`)
|
|
|
|
## Model System
|
|
|
|
Fusion provides flexible AI model configuration with support for model presets, per-task overrides, and a hierarchical settings system.
|
|
|
|
### Model Presets
|
|
|
|
Model presets let teams standardize AI model choices. Each preset contains:
|
|
- **ID** — stable slug for storage (e.g., `budget`, `normal`, `complex`)
|
|
- **Name** — human-friendly label
|
|
- **Executor model** — provider/model pair for task execution
|
|
- **Validator model** — provider/model pair for code/spec review
|
|
|
|
Presets can be auto-selected by task size:
|
|
- **Small (S)** → Budget preset
|
|
- **Medium (M)** → Normal preset
|
|
- **Large (L)** → Complex preset
|
|
|
|
### Per-Task Model Overrides
|
|
|
|
Override global models for specific tasks:
|
|
- **Executor Model** — AI model that implements the task
|
|
- **Validator Model** — AI model that reviews code and plans
|
|
|
|
Set overrides in the dashboard via **task detail → Model tab**, or choose **Custom** during task creation.
|
|
|
|
### Settings Hierarchy
|
|
|
|
**Global settings** (`~/.pi/kb/settings.json`):
|
|
- `defaultProvider` / `defaultModelId` — Default AI models
|
|
- `planningProvider` / `planningModelId` — Task specification models
|
|
- `validatorProvider` / `validatorModelId` — Review models
|
|
- `themeMode`, `colorTheme` — UI preferences
|
|
- `ntfyEnabled`, `ntfyTopic` — Push notifications
|
|
|
|
**Project settings** (`.kb/config.json`):
|
|
- `modelPresets` — Custom preset definitions
|
|
- `autoSelectPresetBySize` — Size-to-preset mappings
|
|
- All workflow and automation settings
|
|
|
|
Project settings override global settings. Configure in the dashboard under **Settings > Model**.
|
|
|
|
## Task Planning & Creation
|
|
|
|
Fusion offers multiple ways to create tasks, from quick entry to AI-assisted planning.
|
|
|
|
### Planning Mode
|
|
|
|
Use AI-guided planning for complex tasks. The AI interviews you to refine requirements before creating the task:
|
|
|
|
```bash
|
|
fn task plan "Build a user authentication system"
|
|
```
|
|
|
|
Or in the dashboard, type a description and click the **Plan** button (💡) to open the planning modal.
|
|
|
|
### Subtask Breakdown
|
|
|
|
Break large tasks into smaller, manageable subtasks before creation:
|
|
|
|
1. Type a task description in the dashboard
|
|
2. Click the **Subtask** button (🌳) to open the breakdown dialog
|
|
3. AI suggests 2-5 subtasks based on your description
|
|
4. Edit titles, descriptions, sizes, and dependencies
|
|
5. Drag-and-drop to reorder subtasks (affects execution order)
|
|
6. Create all subtasks in one action with proper dependency links
|
|
|
|
### AI Text Refinement
|
|
|
|
When creating tasks, the AI can refine your description:
|
|
- Converts rough ideas into structured task specifications
|
|
- Suggests appropriate file scopes and steps
|
|
- Available in both Quick Entry and planning mode
|
|
|
|
### Manual Plan Approval
|
|
|
|
Enable `requirePlanApproval` in settings for manual review of AI-generated specifications:
|
|
|
|
```json
|
|
{
|
|
"settings": {
|
|
"requirePlanApproval": true
|
|
}
|
|
}
|
|
```
|
|
|
|
When enabled, tasks stay in **Triage** with "awaiting-approval" status after AI specification. Review the PROMPT.md in the task detail modal, then click **Approve Plan** to move to **Todo** or **Reject Plan** to regenerate.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm dev dashboard # Board + AI engine
|
|
pnpm dev task list # CLI commands
|
|
```
|
|
|
|
### Type Checking
|
|
|
|
The workspace supports clean-checkout type checking — no build artifacts required:
|
|
|
|
```bash
|
|
pnpm typecheck # Type-check all packages
|
|
```
|
|
|
|
This command validates TypeScript across all packages using source file resolution, without requiring `dist/` output from prior builds. Run it after cloning or before committing to catch type errors early.
|
|
|
|
## Dashboard Features
|
|
|
|
### Interactive Terminal
|
|
|
|
A fully interactive PTY-based terminal is available in the dashboard for executing shell commands directly from the web interface:
|
|
|
|
- Real PTY using node-pty with authentic bash/zsh/powershell behavior
|
|
- xterm.js for full terminal emulation with colors and ANSI support
|
|
- WebSocket bidirectional communication for instant input/output
|
|
- Auto-resizing with zoom support (Ctrl++/-)
|
|
- Copy/paste via keyboard shortcuts
|
|
|
|
### Git Manager
|
|
|
|
Built-in Git repository visualization and management:
|
|
|
|
- View commits with diffs
|
|
- Manage branches
|
|
- See worktree/task associations
|
|
- Perform fetch/pull/push operations
|
|
|
|
### Activity Log
|
|
|
|
Global activity tracking accessible from the header (history icon):
|
|
|
|
- Task lifecycle events: created, moved, merged, failed, deleted
|
|
- Settings changes for important configuration updates
|
|
- Filter events by type
|
|
- Auto-refresh every 30 seconds
|
|
|
|
### Board Search & Views
|
|
|
|
**Board View:**
|
|
- Real-time search across task titles and descriptions
|
|
- Drag-and-drop between columns
|
|
- Column visibility toggle (show/hide columns)
|
|
|
|
**List View:**
|
|
- Group by column, size, or none
|
|
- Inline editing of task titles
|
|
- Duplicate task button for quick cloning
|
|
|
|
### Theme System
|
|
|
|
- **Theme modes:** Dark, Light, System (follows OS preference)
|
|
- **8+ color themes:** Default, Ocean, Forest, Sunset, Berry, Monochrome, High Contrast, Solarized, Factory
|
|
- Quick toggle in header, full selector in Settings > Appearance
|
|
- Preferences persist to localStorage
|
|
|
|
## Archive
|
|
|
|
Completed tasks can be archived to keep the board focused on recent work while preserving historical tasks.
|
|
|
|
**CLI:**
|
|
```bash
|
|
fn task archive KB-001 # Archive a done task
|
|
fn task unarchive KB-001 # Restore an archived task to done
|
|
```
|
|
|
|
**Dashboard:**
|
|
- New "Archived" column at the end of the board (collapsed by default)
|
|
- Archive/unarchive buttons on task cards (visible on hover)
|
|
- Archived tasks cannot be dragged or modified
|
|
|
|
Archive cleanup removes task directories while preserving metadata in `.kb/archive.jsonl`. Restored tasks keep all metadata but lose attachments and agent logs.
|
|
|
|
## Building a standalone executable
|
|
|
|
You can build a single self-contained `fn` binary using [Bun](https://bun.sh/):
|
|
|
|
```bash
|
|
pnpm build:exe
|
|
```
|
|
|
|
This compiles all TypeScript, builds the dashboard client, and produces:
|
|
|
|
- `packages/cli/dist/fn` — the standalone binary
|
|
- `packages/cli/dist/client/` — co-located dashboard assets
|
|
|
|
Run the binary directly — no Node.js, pnpm, or workspace setup needed:
|
|
|
|
```bash
|
|
./packages/cli/dist/fn --help
|
|
./packages/cli/dist/fn task list
|
|
./packages/cli/dist/fn dashboard
|
|
```
|
|
|
|
To distribute, copy both the `fn` binary and the `client/` directory together.
|
|
|
|
### Cross-compilation
|
|
|
|
Build binaries for all supported platforms from a single machine:
|
|
|
|
```bash
|
|
pnpm build:exe:all
|
|
```
|
|
|
|
This produces binaries for all supported targets in `packages/cli/dist/`:
|
|
|
|
| Target | Output |
|
|
| ------------------ | -------------------- |
|
|
| `bun-linux-x64` | `kb-linux-x64` |
|
|
| `bun-linux-arm64` | `kb-linux-arm64` |
|
|
| `bun-darwin-x64` | `kb-darwin-x64` |
|
|
| `bun-darwin-arm64` | `kb-darwin-arm64` |
|
|
| `bun-windows-x64` | `kb-windows-x64.exe` |
|
|
|
|
To build for a specific platform:
|
|
|
|
```bash
|
|
pnpm --filter kb build:exe -- --target bun-linux-x64
|
|
```
|
|
|
|
The `client/` directory is shared across all binaries (platform-independent assets).
|
|
|
|
You can override the dashboard asset path via the `KB_CLIENT_DIR` environment variable:
|
|
|
|
```bash
|
|
KB_CLIENT_DIR=/path/to/client ./fn dashboard
|
|
```
|
|
|
|
**Prerequisites:** Bun ≥ 1.0 (`bun --version`)
|
|
|
|
## GitHub Integration
|
|
|
|
Fusion uses the `gh` CLI (GitHub CLI) for all GitHub operations. If you have `gh` installed and authenticated (run `gh auth login`), Fusion will use your existing session. For environments without `gh` CLI, you can set `GITHUB_TOKEN` as a fallback.
|
|
|
|
### Real-Time PR/Issue Badges
|
|
|
|
Tasks with linked GitHub PRs or imported issues display real-time status badges on the board:
|
|
|
|
- **PR badges** — Shows open/closed/merged state with check status
|
|
- **Issue badges** — Shows open/closed state
|
|
- **WebSocket updates** — Badge status updates instantly via WebSocket when changes occur on GitHub
|
|
- **Multi-instance support** — Redis pub/sub enables badge updates across load-balanced dashboard instances (configure via `KB_BADGE_PUBSUB_REDIS_URL`)
|
|
|
|
### PR Creation
|
|
|
|
Create GitHub Pull Requests from the CLI or dashboard:
|
|
|
|
**CLI:**
|
|
```bash
|
|
fn task pr-create KB-001 --title "Fix login bug" --base main --body "Detailed description"
|
|
```
|
|
|
|
**Dashboard:**
|
|
1. Ensure you have `gh` CLI installed and authenticated (`gh auth login`), or set the `GITHUB_TOKEN` environment variable
|
|
2. Open a task in the **In Review** column
|
|
3. Click **"Create PR"** in the Pull Request section
|
|
4. Enter a title and optional description
|
|
5. The PR is created and linked to the task automatically
|
|
|
|
The dashboard shows real-time PR status (open, closed, merged) with a refresh button to fetch the latest state from GitHub.
|
|
|
|
### Auto-completion modes
|
|
|
|
Fusion supports two completion strategies once a task reaches **In Review**:
|
|
|
|
- **Direct merge** *(default)* — existing behavior. Fusion AI-squash-merges the task branch into your current branch locally.
|
|
- **Pull request** — Fusion creates or links a GitHub PR for the task branch, keeps the task in **In Review** while reviews/checks are pending, and auto-merges the PR when required checks succeed and no review is actively blocking it.
|
|
|
|
`autoMerge` still controls whether Fusion performs either completion strategy automatically. Turning `autoMerge` off means tasks stay in **In Review** until you merge manually.
|
|
|
|
### PR-first mode prerequisites and behavior
|
|
|
|
PR-first automation is designed for repositories that require GitHub-side governance:
|
|
|
|
- Authenticate GitHub access with `gh auth login` or `GITHUB_TOKEN`
|
|
- Ensure the task branch already exists on GitHub using the normal kb branch naming convention: `kb/<task-id-lower>`
|
|
- Expect the task to remain in **In Review** while required checks are pending/failing or a review is blocking merge
|
|
|
|
**Important:** Fusion does **not** implicitly push task branches before creating a PR. PR-first mode assumes branch publishing is handled by your existing workflow or repository automation.
|
|
|
|
### Spec Editing & AI Revision
|
|
|
|
The dashboard includes a **Spec** tab for managing task specifications directly in the UI:
|
|
|
|
**Manual Edit:**
|
|
1. Open any task and click the **Spec** tab
|
|
2. Click **Edit** to modify the PROMPT.md content directly
|
|
3. Save changes with the **Save** button (or Ctrl/Cmd+Enter)
|
|
|
|
**Request AI Revision:**
|
|
1. In the Spec tab, use the **"Ask AI to Revise"** section
|
|
2. Enter feedback describing what needs to change (e.g., "Add more details about error handling", "Split this into smaller steps")
|
|
3. Click **"Request AI Revision"**
|
|
4. The task moves to **Triage** for re-specification by the AI
|
|
|
|
**Limitations:**
|
|
- AI revision is only available for tasks in **Todo** or **In Progress** columns
|
|
- Tasks in **In Review** or **Done** must be moved back to Todo/In Progress first
|
|
- Maximum feedback length is 2000 characters
|
|
|
|
### PR Comment Monitoring
|
|
|
|
When a task has a linked PR, Fusion automatically monitors it for new review comments:
|
|
|
|
- **Adaptive polling**: Checks every 30 seconds when active, 5 minutes when idle
|
|
- **Actionable feedback detection**: Filters out "LGTM" and "Thanks" comments, detects requests like "fix", "change", "update"
|
|
- **Steering comments**: Automatically adds actionable review feedback as steering comments on the task
|
|
- **Follow-up tasks**: When a PR is closed with unaddressed feedback, a follow-up task is created
|
|
|
|
Uses `gh` CLI authentication when available, falls back to `GITHUB_TOKEN` if set.
|
|
|
|
## Workflow Steps
|
|
|
|
Workflow steps are reusable quality gates that run after task implementation but before the task moves to in-review.
|
|
|
|
### Defining Workflow Steps
|
|
|
|
1. Click the **Workflow Steps** button (⚡) in the dashboard header
|
|
2. Click **Add Workflow Step** and provide a name and description
|
|
3. Use **Refine with AI** to generate a detailed agent prompt from your description
|
|
4. Save and enable the step
|
|
|
|
### Built-in Templates
|
|
|
|
Five templates are included for common quality checks:
|
|
|
|
| Template | Category | Description |
|
|
|----------|----------|-------------|
|
|
| **Documentation Review** | Quality | Verify all public APIs, functions, and complex logic have appropriate documentation |
|
|
| **QA Check** | Quality | Run tests and verify they pass, check for obvious bugs |
|
|
| **Security Audit** | Security | Check for common security vulnerabilities and anti-patterns |
|
|
| **Performance Review** | Quality | Check for performance anti-patterns and optimization opportunities |
|
|
| **Accessibility Check** | Quality | Verify UI changes meet accessibility standards (WCAG 2.1) |
|
|
|
|
Click **Add** on any template to create a customizable workflow step.
|
|
|
|
### Using Workflow Steps
|
|
|
|
1. When creating a new task, check the workflow steps you want to run
|
|
2. After the main task executor completes, each selected workflow step runs automatically
|
|
3. The task only moves to in-review after all workflow steps pass
|
|
4. View results in the **Workflow** tab of the task detail modal
|
|
|
|
Workflow step agents use **readonly tools** (no modifications). If a workflow step fails, the task is marked as failed and won't move to in-review.
|
|
|
|
## Scheduled Tasks
|
|
|
|
Automate recurring workflows with multi-step scheduled tasks. Schedules are stored in `.kb/automations/`.
|
|
|
|
### Schedule Types
|
|
|
|
| Preset | Cron Expression | Description |
|
|
|--------|-----------------|-------------|
|
|
| `every15Minutes` | `*/15 * * * *` | Every 15 minutes |
|
|
| `every30Minutes` | `*/30 * * * *` | Every 30 minutes |
|
|
| `hourly` | `0 * * * *` | Every hour |
|
|
| `every2Hours` | `0 */2 * * *` | Every 2 hours |
|
|
| `every6Hours` | `0 */6 * * *` | Every 6 hours |
|
|
| `every12Hours` | `0 */12 * * *` | Every 12 hours |
|
|
| `daily` | `0 0 * * *` | Daily at midnight |
|
|
| `weekdays` | `0 0 * * 1-5` | Weekdays at midnight |
|
|
| `weekly` | `0 0 * * 0` | Weekly on Sunday |
|
|
| `monthly` | `0 0 1 * *` | Monthly on 1st |
|
|
| `custom` | — | Define your own cron |
|
|
|
|
### Step Types
|
|
|
|
Each schedule contains multiple steps executed sequentially:
|
|
|
|
**Command Steps:**
|
|
```json
|
|
{
|
|
"type": "command",
|
|
"command": "pnpm test",
|
|
"timeout": 300000,
|
|
"continueOnFailure": false
|
|
}
|
|
```
|
|
|
|
**AI Prompt Steps** *(placeholder — not yet implemented)*:
|
|
```json
|
|
{
|
|
"type": "ai-prompt",
|
|
"prompt": "Review recent commits for issues",
|
|
"timeout": 600000
|
|
}
|
|
```
|
|
|
|
### Dashboard Interface
|
|
|
|
Access via the **Scheduled Tasks** button in the dashboard header:
|
|
|
|
- **List view** — All schedules with enable/disable toggle
|
|
- **Create/Edit modal** — Configure schedule, steps, and options
|
|
- **Manual run** — Execute a schedule on-demand
|
|
- **Run history** — Last 50 runs with per-step results and output
|
|
- **Step reordering** — Drag to reorder steps
|
|
|
|
### Configuration
|
|
|
|
Per-step options:
|
|
- `timeout` — Override default timeout (milliseconds)
|
|
- `continueOnFailure` — Continue to next step if this one fails (default: false)
|
|
|
|
Schedules respect the global pause state (`fn dashboard --paused`).
|
|
|
|
## Configuration Reference
|
|
|
|
Fusion uses a two-tier settings hierarchy:
|
|
- **Global settings** (`~/.pi/kb/settings.json`) — User preferences across all projects
|
|
- **Project settings** (`.kb/config.json`) — Project-specific workflow settings
|
|
|
|
Project settings override global settings. Configure in the dashboard under **Settings**.
|
|
|
|
### Settings Table
|
|
|
|
| Setting | Scope | Default | Description |
|
|
|---------|-------|---------|-------------|
|
|
| `defaultProvider` | Global | — | Default AI model provider |
|
|
| `defaultModelId` | Global | — | Default AI model ID |
|
|
| `planningProvider` | Global | — | Model provider for task specification |
|
|
| `planningModelId` | Global | — | Model ID for task specification |
|
|
| `validatorProvider` | Global | — | Model provider for code/spec review |
|
|
| `validatorModelId` | Global | — | Model ID for review |
|
|
| `defaultThinkingLevel` | Global | — | Default thinking effort level |
|
|
| `themeMode` | Global | dark | UI theme: dark/light/system |
|
|
| `colorTheme` | Global | default | Color theme name |
|
|
| `ntfyEnabled` | Global | false | Enable push notifications |
|
|
| `ntfyTopic` | Global | — | ntfy.sh topic for notifications |
|
|
| `maxConcurrent` | Project | 2 | Concurrent task execution limit |
|
|
| `autoMerge` | Project | true | Auto-merge completed tasks |
|
|
| `smartConflictResolution` | Project | true | Auto-resolve lock/generated files |
|
|
| `autoResolveConflicts` | Project | true | Alias for smartConflictResolution |
|
|
| `requirePlanApproval` | Project | false | Manual approval for AI specs |
|
|
| `taskStuckTimeoutMs` | Project | — | Stuck task detection timeout (ms) |
|
|
| `worktreeNaming` | Project | random | Worktree naming: random/task-id/task-title |
|
|
| `recycleWorktrees` | Project | false | Pool and reuse worktrees |
|
|
| `groupOverlappingFiles` | Project | false | Serialize tasks with shared files |
|
|
| `prCompletionMode` | Project | direct | Completion: direct/pr-first |
|
|
|
|
### Key Settings Explained
|
|
|
|
**Smart Conflict Resolution:**
|
|
```json
|
|
{
|
|
"settings": {
|
|
"smartConflictResolution": true
|
|
}
|
|
}
|
|
```
|
|
Automatically resolves:
|
|
- Lock files (`package-lock.json`, `yarn.lock`, etc.) using "ours" strategy
|
|
- Generated files (`*.gen.ts`, `dist/*`) using "theirs" strategy
|
|
- Trivial whitespace conflicts
|
|
|
|
**Stuck Task Detection:**
|
|
```json
|
|
{
|
|
"settings": {
|
|
"taskStuckTimeoutMs": 600000
|
|
}
|
|
}
|
|
```
|
|
Terminates and retries tasks with no agent activity for the specified duration (10 minutes in this example).
|
|
|
|
**Push Notifications (ntfy.sh):**
|
|
```json
|
|
{
|
|
"settings": {
|
|
"ntfyEnabled": true,
|
|
"ntfyTopic": "my-kb-notifications"
|
|
}
|
|
}
|
|
```
|
|
Get notified when tasks complete, merge, or fail. Requires [ntfy.sh](https://ntfy.sh) app.
|
|
|
|
**Plan Approval:**
|
|
```json
|
|
{
|
|
"settings": {
|
|
"requirePlanApproval": true
|
|
}
|
|
}
|
|
```
|
|
AI-generated specifications require manual approval before moving to Todo.
|
|
|
|
## Releases
|
|
|
|
Packages are published to npm automatically via GitHub Actions and [changesets](https://github.com/changesets/changesets).
|
|
|
|
### Installing from npm
|
|
|
|
```bash
|
|
npm install -g kb
|
|
```
|
|
|
|
### Triggering a release
|
|
|
|
Releases are automated via [changesets](https://github.com/changesets/changesets). See [RELEASING.md](./RELEASING.md) for the full workflow.
|
|
|
|
In short: add a changeset with `pnpm changeset`, merge to main, then merge the auto-generated "Version Packages" PR. Once merged, the workflow automatically publishes all updated packages to npm.
|
|
|
|
### CI pipeline
|
|
|
|
- **Pull requests & pushes to main** — runs tests and build (`.github/workflows/ci.yml`)
|
|
- **Push to main** — creates a version PR (if changesets exist) or publishes to npm (`.github/workflows/version.yml`)
|
|
|
|
## License
|
|
|
|
ISC
|