Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .agents/faber.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"defaultAgent": "claude-code",
"defaultModel": null,
"defaultTransport": "acp",
"branchNamingPattern": "feat/{{task_id}}-{{task_slug}}",
"instructionFilePath": null,
"worktreeAutoCleanup": true,
"taskFilesToDisk": false,
"github": {
"syncEnabled": false,
"autoClose": false,
"autoReopen": false,
"prClosesRef": true,
"labelSync": false,
"labelMapping": {},
"mergeDetection": true,
"syncDefaults": {
"title": false,
"body": false,
"status": false,
"labels": false
}
},
"acp": {
"trustModePolicy": "auto_approve",
"defaultPolicy": "ask",
"permissionTimeout": 120,
"rules": [
{
"capability": "fs_read",
"action": "auto_approve"
},
{
"capability": "fs_write",
"action": "auto_approve"
},
{
"capability": "terminal",
"action": "auto_approve"
},
{
"capability": "Always Allow",
"action": "auto_approve"
}
]
},
"priorities": [
{
"id": "P0",
"label": "Critical",
"color": "red",
"order": 0
},
{
"id": "P1",
"label": "High",
"color": "amber",
"order": 1
},
{
"id": "P2",
"label": "Normal",
"color": "gray",
"order": 2
}
]
}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Thumbs.db
.mcp.json
.codex
.cursor
.agents
.agents/tasks
.claude
.gemini
~
18 changes: 5 additions & 13 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Project Overview

Faber is a cross-platform desktop app (Tauri 2 + React + TypeScript + Rust) for orchestrating AI coding agents. It wraps CLI-based agents (Claude Code, Codex CLI, Copilot CLI, Cursor Agent, Gemini CLI, OpenCode) with a task-driven workflow: Kanban board, git worktree isolation per task, PTY terminal sessions, multi-pane session grid, GitHub integration, and continuous mode for auto-launching task queues.
Faber is a cross-platform desktop app (Tauri 2 + React + TypeScript + Rust) for orchestrating AI coding agents. It wraps CLI-based agents (Claude Code, Codex CLI, Copilot CLI, Cursor Agent, Gemini CLI, OpenCode) with a task-driven workflow: Kanban board, git worktree isolation per task, PTY terminal sessions, multi-pane session grid, GitHub integration, and queue mode for auto-launching task queues.

**ALWAYS** use the frontend skill when designing, developing or updating frontend components or pages.

Expand Down Expand Up @@ -43,7 +43,7 @@ No frontend test runner is configured yet. Rust tests are inline (`#[cfg(test)]`
- **State**: Zustand stores — primary `appStore.ts` and `updateStore.ts`. `ThemeContext` manages 4 themes (dark/light x glass/flat).
- **Views** (`ViewId`): `dashboard`, `sessions`, `task-detail`, `review`, `github`, `skills-rules`, `help`
- **Component tree**: `ThemeProvider -> StoreInitializer -> App -> AppShell` — AppShell is a 2-column CSS Grid. Sessions view stays mounted (hidden via CSS); other views mount/unmount.
- **IPC**: `invoke("command_name", { args })` for calls, `listen("event-name")` for async events (PTY output, session status, MCP updates, continuous mode)
- **IPC**: `invoke("command_name", { args })` for calls, `listen("event-name")` for async events (PTY output, session status, MCP updates, queue mode)

### Backend (`src-tauri/src/`)
- **Database** (`db/`): SQLite with WAL mode, migrations in `db/migrations.rs`. IDs: `<prefix>_<timestamp_hex>_<counter_hex>`.
Expand All @@ -53,7 +53,7 @@ No frontend test runner is configured yet. Rust tests are inline (`#[cfg(test)]`
- **PTY** (`pty.rs`): Spawns pseudo-terminals via `portable-pty`, streams output via Tauri events.
- **Agent adapters** (`agent/`): Detects installed CLI agents, maps to commands + default models.
- **MCP server** (`mcp/`): Embedded HTTP server (axum) on `127.0.0.1:<random_port>`. Sidecar binary (`bin/faber-mcp.rs`) acts as stdio-to-HTTP bridge for agent MCP configs.
- **Continuous Mode** (`continuous.rs`): Auto-launches a queue of ready tasks. Two branching strategies: `independent` and `chained`.
- **Queue mode** (`queue.rs`): Auto-launches a queue of ready tasks. Two branching strategies: `independent` and `chained`.
- **Project config** (`project_config.rs`): File-based project settings via `.agents/faber.json`. See [Settings Architecture](#settings-architecture).
- **Config watcher** (`config_watcher.rs`): Watches `.agents/faber.json` for external edits, re-syncs DB.

Expand Down Expand Up @@ -159,7 +159,7 @@ error!(session_id = %id, error = %e, "PTY spawn failed");
Custom `AppError` enum with `From` conversions. All commands return `Result<T, AppError>`.

### State (Rust)
Mutex-wrapped state (`PtyState`, `DbState`) for thread safety. MCP state uses `Arc<TokioMutex<McpState>>`. Continuous mode uses `Arc<TokioMutex<ContinuousState>>`.
Mutex-wrapped state (`PtyState`, `DbState`) for thread safety. MCP state uses `Arc<TokioMutex<McpState>>`. Queue mode uses `Arc<TokioMutex<QueueState>>`.

### State management (Frontend)
- **Selectors**: Always use `useAppStore((s) => s.fieldName)` — never subscribe to the whole store.
Expand All @@ -174,13 +174,5 @@ Strict mode enabled (`noUnusedLocals`, `noUnusedParameters`). Functional compone
<!-- Faber:MCP -->
## Faber Integration

You have MCP tools provided by the Faber IDE for reporting your progress. You MUST use them throughout your workflow.

## Status Reporting (required)

- `report_status(status, message, activity?)` — Call FIRST when you start working (status: "working"). Call again when your activity changes. Activity options: "researching", "exploring", "planning", "coding", "testing", "debugging", "reviewing".
- `report_progress(current_step, total_steps, description)` — Call before each major step so the IDE shows a progress bar.
- `report_files_changed(files)` — Call after modifying files so the IDE can track changes.
- `report_error(error, details?)` — Call if you hit a hard blocker (build failure, missing dependency, etc.). After calling this, STOP and wait for the user.
- `report_waiting(question)` — Call if you need user input or a decision. After calling this, STOP and wait — the session pauses until the user responds.
You have MCP tools provided by the Faber IDE. IMPORTANT: Call the `get_instructions` MCP tool FIRST before doing any work. It provides your session-specific workflow, available tools, and task context.
<!-- /Faber:MCP -->
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

<p align="center">
A cross-platform desktop app for orchestrating AI coding agents.<br/>
Wraps CLI-based agents with a task-driven workflow: Kanban board, git worktree isolation, multi-pane terminal sessions, GitHub integration, skills &amp; rules management, and continuous mode.
Wraps CLI-based agents with a task-driven workflow: Kanban board, git worktree isolation, multi-pane terminal sessions, GitHub integration, skills &amp; rules management, and queue mode.
</p>

---
Expand Down Expand Up @@ -52,7 +52,7 @@ Download the latest release for your platform from the [Releases page](https://g
- **Git worktree isolation** — each task runs in its own worktree and branch, so multiple agents can work in parallel without conflicts
- **Multi-pane session grid** — run multiple agent sessions side-by-side with drag-and-drop layout and resizable panes
- **Four session modes** — Task (structured implementation), Research (explore & plan), Vibe (freeform coding), Shell (raw terminal)
- **Continuous mode** — auto-launch a queue of ready tasks with independent or chained branching strategies
- **Queue mode** — auto-launch a queue of ready tasks with independent or chained branching strategies
- **Prompt templates & quick actions** — configurable prompt templates with `{{variable}}` interpolation for all session types, plus one-click Quick Action buttons on session panes
- **Skills & rules** — install and manage agent skills and project rules to extend agent capabilities
- **GitHub integration** — issue import, PR creation, commit graph visualization, and label sync
Expand Down
4 changes: 2 additions & 2 deletions docs/acp_permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ The fallback action when no rule matches a request:

### Trust Mode

Controls permission behavior during **autonomous operation** (continuous mode, auto-launched task queues):
Controls permission behavior during **autonomous operation** (queue mode, auto-launched task queues):

- **Auto-approve all** — No permission dialogs when running autonomously.
- **Use normal rules** — Apply the same rule set as interactive sessions.
- **Deny write operations** — Allow reads but block all writes in autonomous mode. Useful for safe continuous runs.
- **Deny write operations** — Allow reads but block all writes in autonomous mode. Useful for safe queue runs.

### Permission Timeout

Expand Down
165 changes: 0 additions & 165 deletions docs/continuous_mode.md

This file was deleted.

2 changes: 1 addition & 1 deletion docs/general.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ Settings are organized into **App** (global) and **Project** (per-project) secti

Manage prompt templates and quick actions:

- **Session Prompts** — Default prompts used when launching task, research, continuous, and task-continue sessions. Each template supports `{{variable}}` interpolation (e.g., `{{task_id}}`, `{{worktree_hint}}`). Session prompts are protected (cannot be deleted) but fully customizable.
- **Session Prompts** — Default prompts used when launching task, research, queue, and task-continue sessions. Each template supports `{{variable}}` interpolation (e.g., `{{task_id}}`, `{{worktree_hint}}`). Session prompts are protected (cannot be deleted) but fully customizable.
- **Quick Actions** — Action buttons that appear on active session panes when you hover over them. Click a quick action to send the prompt directly to the agent. Built-in actions include "Commit", "Fix Errors", and "Summarize". You can add, edit, and delete custom actions with configurable labels, icons, and prompts.
- **Reset to Defaults** — Restore all templates and actions to their built-in defaults.

Expand Down
4 changes: 2 additions & 2 deletions docs/github_workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Cross-repository references are also supported: `depends on other/repo#99`.

If the referenced issue has already been imported (or is being imported in the same batch), Faber resolves the reference to a local task ID and populates the task's `depends_on` field automatically. Unresolved references (issues not imported) are silently skipped.

These dependency relationships are used by **Continuous Mode** to suggest a branching strategy and automatically sort the task queue. See the [Continuous Mode](/help/continuous_mode) documentation for details.
These dependency relationships are used by **Queue Mode** to suggest a branching strategy and automatically sort the task queue. See the [Queue Mode](/help/queue_mode) documentation for details.

---

Expand All @@ -65,7 +65,7 @@ The shared toolbar at the top of the Git view provides direct access to common g

### Pull & Push

- **Pull** — Fetches from origin and fast-forwards the current branch. If the working tree has uncommitted changes or the branch has diverged (cannot fast-forward), Pull will show an error. Commit or stash your changes first.
- **Pull** — Fetches from origin and fast-forwards the current branch. Works with uncommitted changes as long as they don't conflict with incoming changes (matching VS Code / Zed behavior). If the branch has diverged (cannot fast-forward), Pull will show an error.
- **Push** — Pushes the current branch to origin. Uses `gh auth git-credential` for authentication, so you only need `gh auth login` once.

Both buttons show ahead/behind badges when your local branch differs from the remote. These counts are refreshed automatically when you open the Git view and after each operation.
Expand Down
Loading
Loading