Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f7b6b5b
feat: improve project creation validation and welcome screen polish
orecus Mar 25, 2026
4f29e4f
fix: keep sidebar and chat branch display in sync with external git o…
orecus Mar 26, 2026
23a1e4e
feat: v0.9.2 settings view, status bar, file search, and UI polish
orecus Mar 26, 2026
b1848d5
fix: resolve GITHUB_TOKEN from shell env on macOS for gh auth
orecus Mar 26, 2026
255bab1
feat: task progress rings, dependency indicators, typography standard…
orecus Mar 27, 2026
3d07f39
feat: polish GitHub view detail panels, row density, and error states
orecus Mar 27, 2026
d561fcf
feat: add skeleton loaders and loading feedback across views
orecus Mar 27, 2026
1350f1e
fix: update Claude Code ACP adapter package from @zed-industries to @…
orecus Mar 27, 2026
7b46251
fix: prevent stale ACP completion events from clearing working indicator
orecus Mar 27, 2026
db23ff3
fix: responsive layout resilience for 1024px+ window widths
orecus Mar 28, 2026
26fc76b
feat: add motion preferences and accessibility foundations
orecus Mar 28, 2026
a36c964
feat: enrich empty states with icons, hints, and CTAs across views
orecus Mar 28, 2026
7df55cf
feat: move session history into right sidebar as global tab
orecus Mar 28, 2026
f38b1f4
fix: use Switch toggles in launchers and fix context menu positioning
orecus Mar 28, 2026
7228b3a
refactor: extract reusable SidePanel component and adopt across views
orecus Mar 28, 2026
b935019
docs: update changelog and docs for recent v0.9.2 commits
orecus Mar 28, 2026
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
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,52 @@ All notable changes to Faber will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.9.2] - 2026-03-xx WIP

### Added

- **Settings View** — Dedicated full-screen settings page with master-detail layout replacing the old sidebar modals. Eight organized tabs split into App-scoped (General, Terminal, Agents, Prompts) and Project-scoped (Project, Git & Worktrees, ACP Permissions, GitHub) sections. Open with **Ctrl+,** or from the command palette
- **Status Bar** — New bottom bar showing MCP status and port, GitHub auth status, top agent usage percentage, context-sensitive keyboard shortcuts, and app version
- **File Search** — File browser now preloads a project file index in the background and supports client-side filtering with highlighted search matches. Re-indexes automatically when files change
- **File Context Menu** — Right-click any file in the tree for quick actions: copy relative path, copy absolute path, reveal in file explorer, or open in an external editor (auto-detects VS Code, Cursor, Zed, Windsurf, Fleet, Sublime, Vim, Neovim)
- **Task Progress Ring** — In-progress task cards on the Kanban board now show a circular progress indicator (SVG ring) with percentage text, driven by MCP `report_progress` step data. Research/exploring activities display in amber; regular work in blue
- **Task Dependency Indicators** — Task cards show per-dependency met/unmet dots (filled green for met, outlined amber for unmet) and a dependents badge showing how many other tasks depend on this one
- **Epic Dependency Connectors** — Kanban columns now render small vertical connector arrows between epic children that have dependency relationships, making chains visible directly on the board
- **Searchable Filter Dropdowns** — Unbounded filter lists (Labels, Agents, Epics) in the Dashboard filter bar now use searchable dropdown popovers instead of inline chips, with count badges on the trigger buttons and active filter pills displayed below the bar
- **Session History Sidebar** — Session history is now a global tab in the right sidebar (Files | Session History), accessible from any view instead of being buried inside Chat and Sessions
- **Skeleton Loaders** — Views now show skeleton placeholders that match content layout while loading (commit graph, rules, agent activity, Kanban cards) instead of bare spinners. Archive actions show inline loading spinners with disabled states
- **Empty States** — Contextual hints, icons, and call-to-action buttons throughout the app when views have no content — Kanban columns, dependency graph, commit graph, file list, review panel, and more
- **Motion & Accessibility** — Respects the OS "reduce motion" preference. Icon-only buttons now have screen-reader labels, custom buttons show focus-visible outlines, and error/warning banners are announced to assistive technology
- **Success Toasts** — Green flash notifications (3-second auto-dismiss) for confirming actions like ACP adapter installs and session renames

### Changed

- **Settings Architecture** — Moved all settings from sidebar dialog modals into the new dedicated Settings view. Sidebar gear icon and Ctrl+, both navigate to the settings page. Git & Worktrees settings (branch naming, instruction files) now have their own tab instead of being buried in the Project tab
- **ACP Adapter Updates** — Install command now pins to the exact registry version (e.g., `npm install -g @package@0.24.1`), invalidates npm and registry caches after install, and extracts user-friendly error messages from npm stderr instead of dumping raw output
- **Focus-Within Accessibility** — Action buttons on task cards, chat messages, dependency graph rows, quick action bar, and task body now appear on focus-within (not just hover) for keyboard accessibility
- **Session Grid Resize Handles** — Column and row resize handles now show centered dot indicators on hover for better discoverability
- **Session Pane** — Removed reorder arrows (drag-and-drop is the primary method); added brief "Saved" indicator after session rename; wider rename input field
- **Permission Dialog Urgency** — Timeout bar is thicker and the urgent state (last 30 seconds) now pulses with an animation
- **Command Palette** — Added "Go to Settings" navigation command
- **Typography Scale** — Standardized all text sizes across 100+ components to a canonical scale (`text-micro` 8px, `text-2xs` 10px, `text-xs` 12px, `text-sm` 14px, `text-base` 16px), replacing ad-hoc `text-[Npx]` values with new custom Tailwind utilities
- **Filter Bar Architecture** — Status and Priority filters remain as inline toggle chips; Labels, Agents, and Epics now use collapsible searchable dropdowns for better usability in large projects
- **DnD Visual Feedback** — Dragged Kanban cards now fully hide (opacity-0) during drag instead of showing a faded ghost, for cleaner drag-and-drop
- **GitHub View Polish** — Resizable detail panels, two-line PR/Issue rows with overflow-safe label capping, retry buttons on error banners, and improved commit graph merge indicator contrast
- **Responsive Layout** — Toolbars wrap gracefully on narrower windows (1024px+), filter bar sections stay grouped, and detail panels clamp to a sensible max width
- **ACP Adapter Package** — Claude Code ACP adapter moved from `@zed-industries/claude-agent-acp` to `@agentclientprotocol/claude-agent-acp` — install commands and error hints updated automatically
- **Launch Dialog Toggles** — "Create worktree" option in Launch Task and Launch Session dialogs now uses a Switch toggle instead of a checkbox
- **Project Creation** — Improved validation and welcome screen polish
- **Priority Badge Styling** — Compact inline priority badges with smaller font
- **Task Card Layout** — Increased padding, improved visual hierarchy, and inline action buttons hidden by default (revealed on hover/focus)

### Fixed

- **ACP Adapter Install on Windows** — npm install now hides the console window (CREATE_NO_WINDOW flag) to prevent a flash of a terminal window
- **GITHUB_TOKEN on macOS** — Faber now picks up GITHUB_TOKEN/GH_TOKEN from shell profiles, fixing GitHub auth failures in GUI-launched apps
- **Stale ACP Working Indicator** — Cancelling and resending a prompt no longer causes the working indicator to disappear prematurely
- **Task Card Context Menu Position** — Context menu now appears at the cursor instead of the top-left corner of the card
- **Branch Display Sync** — Sidebar and chat branch indicators now stay in sync when branches change outside the app (e.g., via terminal)

## [0.9.1] - 2026-03-xx WIP

### Added
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ error!(session_id = %id, error = %e, "PTY spawn failed");
- **Custom semantic tokens:** `text-dim-foreground` (between foreground and muted), `text-success` / `bg-success`, `text-warning` / `bg-warning`
- **Glass/solid switching:** Use `useTheme()` → `isGlass` boolean. For panels: `<Card type={isGlass ? "normal" : "solid"}>` (orecus.io Card). For shell containers (sidebar, status bar, tab bar): `glassStyles[isGlass ? "subtle" : "solid"]` from `color-utils.ts`
- **Panel borders:** Use `ring-1 ring-border/40` for subtle panel containers, `border-border` for structural dividers (border-b, border-l, etc.)
- **Typography scale:** Use only these sizes — `text-micro` (8px, reserved), `text-2xs` (10px, badges/counters/metadata), `text-xs` (12px, labels/hints/secondary), `text-sm` (14px, primary UI text), `text-base` (16px, headings). Do **not** introduce arbitrary `text-[Xpx]` values without justification.
- Tailwind `animate-spin` for spinners; use `<Loader2>` from lucide-react
- Theme selectors: `[data-theme^="dark"]`, `[data-theme^="light"]`
- Main CSS file: `src/styles/main.css`
Expand Down
18 changes: 7 additions & 11 deletions docs/chat.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,11 @@ Project Chat is a conversational interface for talking to an ACP-capable agent a

## Starting a Chat

Open the **Chat** tab in the top bar. If no chat session is active, you'll see a two-column layout:
Open the **Chat** tab in the top bar. If no chat session is active, you'll see a centered launcher:

**Left column — New Chat:**
1. **Pick an agent** — Only agents with both the CLI and ACP adapter installed are selectable. Each card shows "CLI" and "ACP" status badges.
2. **Click "New Chat"** — This launches a fresh ACP session scoped to your current project.

**Right column — Session History:**
If the selected agent supports session listing, a sidebar shows your previous conversations (see [Resuming Sessions](#resuming-sessions) below).

> **Note:** Chat requires an ACP-capable agent (e.g. Claude Code with the ACP adapter). If none are installed, a warning banner explains what's needed.

Only one chat session can be active per project at a time. If you switch away and come back, the existing session is automatically resumed.
Expand Down Expand Up @@ -135,24 +131,24 @@ Hover over any of your sent messages to reveal a pencil icon. Click it to copy t

When an agent supports the ACP `session/list` and `session/load` protocol, you can resume past conversations across app restarts.

### Session History Sidebar
### Session History (Right Sidebar)

The right column of the Chat empty state shows a **Previous Sessions** list fetched from the agent:
Session history is accessible globally from the **right sidebar**. Click the **Session History** tab (next to the Files tab) to view a **Previous Sessions** list fetched from the agent. The right sidebar can be toggled with **Ctrl+B** and the active tab persists across restarts.

- **Search** — Filter sessions by title using the search bar at the top.
- **Refresh** — Click the refresh icon to re-fetch the list from the agent.
- **Resume** — Opens the session in the Chat view, replaying conversation history so you can pick up where you left off.
- **Session** — Opens the session as a pane in the Sessions view, then navigates you there.
- **Resume in Chat** — Opens the session in the Chat view, replaying conversation history so you can pick up where you left off. This button is disabled when a chat session is already active.
- **Open as Session** — Opens the session as a pane in the Sessions view, then navigates you there.

Each row shows the session title (or "Untitled session") and a relative timestamp (e.g. "2h ago", "yesterday").
Each row shows the session title (or "Untitled session") and a relative timestamp (e.g. "2h ago", "yesterday"). The session list auto-fetches when you switch to the Session History tab.

### Capability Detection

Not all agents support session persistence. If an agent doesn't support listing:
- The sidebar shows "This agent doesn't support session history" with a **Retry** button.
- The "not supported" result is cached so Faber won't re-probe on every visit. Click **Retry** to clear the cache and check again (useful after an agent update).

If the agent supports listing but not loading (resume), sessions appear in the list but the Resume and Session buttons are disabled with a tooltip explanation.
If the agent supports listing but not loading (resume), sessions appear in the list but the Resume and Open as Session buttons are disabled with a tooltip explanation.

### Error Handling

Expand Down
61 changes: 41 additions & 20 deletions docs/general.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Faber runs a local MCP (Model Context Protocol) server that agents use to report

## Views

Navigate between views using the top bar tabs or the command palette.
Navigate between views using the top bar tabs, the command palette, or keyboard shortcuts.

### Dashboard (Tasks)

Expand Down Expand Up @@ -120,10 +120,11 @@ The Tree view is especially useful when you have many tasks with dependency rela

A multi-pane terminal grid showing all active agent sessions. Features:

- Resize the grid layout (1×1, 2×1, 2×2, 3×2, etc.)
- Resize the grid layout (1×1, 2×1, 2×2, 3×2, etc.) — resize handles show dot indicators on hover
- Maximize a single pane to full size
- Drag-and-drop panes to reorder
- Each pane shows the agent name and MCP status overlay
- Rename sessions inline — a brief "Saved" confirmation appears after renaming
- **Quick Action Bar** — hover over an active agent session to reveal floating action buttons (Commit, Fix Errors, Summarize, etc.) that send one-click prompts to the agent. Configure actions in Settings > Prompts.
- Terminal output is buffered so you can switch views and come back without losing output

Expand Down Expand Up @@ -158,6 +159,7 @@ Press **Ctrl+K** (or **Cmd+K** on macOS) to open the command palette. It provide
- **Go to Sessions** — Switch to the session grid
- **Go to GitHub** — Switch to the GitHub view
- **Go to Review** — Switch to the review/diff view
- **Go to Settings** — Open the settings page (also available via **Ctrl+,**)

### Projects

Expand All @@ -179,18 +181,34 @@ All active sessions are listed. Select one to focus its pane in the session grid

The palette shows your **recent commands** when the search field is empty. Use the arrow keys to navigate and Enter to select.

## Status Bar

A thin bar at the bottom of the app window provides at-a-glance system information:

- **MCP Status** — Shows the MCP server port. Click to copy the sidecar binary path.
- **GitHub Auth** — Shows authentication status. Warning icons appear for missing auth or insufficient token scopes.
- **Agent Usage** — Displays the top utilization percentage across all agents.
- **Keyboard Shortcuts** — Context-sensitive hints for the current view (e.g., Ctrl+K for command palette, Ctrl+, for settings).
- **App Version** — Current Faber version number.

## Settings

Open settings from the gear icon in the sidebar. Settings are organized into tabs:
Open settings with **Ctrl+,** (or **Cmd+,** on macOS), the gear icon in the sidebar, the status bar settings button, or from the command palette. Settings open as a dedicated full-screen view with a navigation sidebar on the left and content area on the right. Press **Escape** to close and return to your previous view.

Settings are organized into **App** (global) and **Project** (per-project) sections:

### App Settings

### General
#### General

- **Color Mode** — Switch between Dark and Light themes
- **Glass Effect** — Toggle the translucent glass UI style (not available on macOS)
- **Show Project Icons** — Show or hide project icons in the sidebar
- **Reduce Motion** — Respects the OS "prefer reduced motion" setting. When enabled, animations and transitions throughout the app are minimized
- **Notifications** — Master toggle plus per-event toggles (Session Complete, Session Error, Input Needed). Clicking a notification takes you directly to the relevant session.
- **Updates** — Check for app updates, enable auto-checking, and set the check frequency (hourly to daily). An advanced option lets you point to a custom update endpoint.

### Terminal
#### Terminal

- **Default Shell** — Choose which shell to use for sessions (system default or a specific installed shell)
- **Font Family** — Pick a terminal font from embedded fonts (JetBrains Mono), installed Nerd Fonts, or system fonts
Expand All @@ -199,40 +217,43 @@ Open settings from the gear icon in the sidebar. Settings are organized into tab
- **Line Height** — Adjust line spacing (1.0–2.0)
- **Reset to Defaults** — Restore all terminal settings to their defaults

### Notifications

- **Enable Notifications** — Master toggle for all OS notifications
- **Session Complete** — Notify when an agent finishes its work
- **Session Error** — Notify when an agent encounters an error
- **Input Needed** — Notify when an agent is waiting for your input

Clicking a notification takes you directly to the relevant session.

### Agents
#### Agents

- **Default Agent** — Choose which AI agent to use by default (Claude Code, Codex CLI, Gemini CLI, OpenCode, or Cursor)
- **Per-agent settings** (for installed agents):
- **Skip Permissions** — Run the agent in fully autonomous mode (agent-specific flag)
- **Custom Flags** — Add extra CLI flags to the agent command
- **Command Preview** — See the exact command that will be executed

### Prompts
#### Prompts

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.
- **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.

### Projects
### Project Settings

Per-project configuration:
#### Project

- **Project Icon** — Set an SVG icon for the project
- **Tab Color** — Choose a color for the project's sidebar tab
- **Default Agent / Model** — Override the global default for this project
- **Branch Naming Pattern** — Customize the worktree branch format using `{{task_id}}` and `{{task_slug}}` variables
- **Instruction File** — Point to a custom instruction file (relative to project root) for agent system prompts
- **Default Transport** — Choose PTY (terminal) or ACP (chat) as the default session transport
- **Priorities** — Define custom priority levels for the project. Each priority has an ID (stored in task files), a display label, a color (from the ThemeColor palette), and a sort order. Add, remove, and reorder priorities as needed. Defaults to P0/P1/P2 for new projects.
- **GitHub Sync** — Configure automatic syncing between task statuses and GitHub issues/PRs (see the [GitHub Workflow](github_workflow) guide for details)
- **Delete Project** — Remove the project from Faber (does not delete files on disk)

#### Git & Worktrees

- **Branch Naming Pattern** — Customize the worktree branch format using `{{task_id}}` and `{{task_slug}}` variables
- **Instruction File** — Point to a custom instruction file (relative to project root) for agent system prompts

#### ACP Permissions

See the [ACP Permissions](acp_permissions) guide for details on configuring permission rules, trust mode, and timeout policies.

#### GitHub

GitHub CLI authentication status and configuration. See the [GitHub Workflow](github_workflow) guide for details.
2 changes: 1 addition & 1 deletion docs/github_workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ This gives each task its own working directory, so agents can make changes witho

## GitHub Sync Settings

All sync behavior is controlled per-project in **Settings > Projects > [Your Project] > GitHub Sync**.
All sync behavior is controlled per-project in **Settings > Project > GitHub Sync** (the Project tab in the Settings view).

The master toggle defaults to **OFF**. Nothing is written to GitHub until you explicitly enable it.

Expand Down
2 changes: 1 addition & 1 deletion docs/supported_agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ Breakdown, Vibe, and Chat sessions have no completion tool — the user drives t

### Per-Project Defaults

In **Settings > Projects > [Your Project]**, you can set a default agent and model. All new sessions will use this agent unless overridden at launch time.
In **Settings > Project**, you can set a default agent and model. All new sessions will use this agent unless overridden at launch time.

### Per-Task Overrides

Expand Down
Loading
Loading