251 lines
9.9 KiB
Markdown
251 lines
9.9 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
## Project Overview
|
||
|
||
**Development Hub** is the central orchestration project for Rob's multi-project development ecosystem. It provides:
|
||
|
||
1. **GUI Application** - PyQt6-based workspace with project list, splittable terminal panes, and session persistence
|
||
2. **CLI Tools** - Scripts to create and manage projects following consistent patterns
|
||
|
||
## GUI Application
|
||
|
||
### Running the App
|
||
|
||
```bash
|
||
cd ~/PycharmProjects/development-hub
|
||
source .venv/bin/activate
|
||
python -m development_hub
|
||
```
|
||
|
||
### Architecture
|
||
|
||
```
|
||
src/development_hub/
|
||
├── __init__.py
|
||
├── __main__.py # Entry point
|
||
├── app.py # QApplication subclass
|
||
├── main_window.py # Main window with menus
|
||
├── project_list.py # Left panel - project list with filter
|
||
├── workspace_manager.py # Splittable pane layout management
|
||
├── pane_widget.py # Tab container with action menu
|
||
├── draggable_tab_widget.py # Cross-pane tab dragging support
|
||
├── terminal_widget.py # PTY terminal with search bar
|
||
├── terminal_display.py # Terminal rendering with scrollback
|
||
├── pty_manager.py # PTY process management
|
||
├── project_discovery.py # Auto-discover projects from paths
|
||
├── dialogs.py # New Project, Settings, Preview dialogs
|
||
├── settings.py # JSON persistence for settings & session
|
||
├── styles.py # Dark theme stylesheet
|
||
├── models/ # Data models (Goal, Todo, Milestone)
|
||
├── views/dashboard/ # Dashboard views and components
|
||
│ ├── project_dashboard.py
|
||
│ ├── data_store.py # Data loading/saving with file watching
|
||
│ └── undo_manager.py # Undo/redo support
|
||
├── parsers/ # Markdown file parsers
|
||
├── services/ # Business logic (git, health, progress)
|
||
└── widgets/ # Reusable UI components
|
||
```
|
||
|
||
### Key Classes
|
||
|
||
| Class | File | Purpose |
|
||
|-------|------|---------|
|
||
| `MainWindow` | main_window.py | QMainWindow with menus, splitter layout |
|
||
| `ProjectListWidget` | project_list.py | Project list with filter and context menu |
|
||
| `WorkspaceManager` | workspace_manager.py | Manages splittable pane layout |
|
||
| `PaneWidget` | pane_widget.py | Tab container with action menu |
|
||
| `DraggableTabWidget` | draggable_tab_widget.py | Tab widget supporting cross-pane drag |
|
||
| `TerminalWidget` | terminal_widget.py | PTY terminal with search and auto-accept |
|
||
| `TerminalDisplay` | terminal_display.py | Terminal rendering with scrollback buffer |
|
||
| `AutoAcceptToast` | terminal_widget.py | Countdown toast for auto-accept prompts |
|
||
| `AutoAcceptDialog` | dialogs.py | Duration selection for auto-accept |
|
||
| `DashboardDataStore` | views/dashboard/data_store.py | Data persistence with file watching |
|
||
| `UndoManager` | views/dashboard/undo_manager.py | Undo/redo action management |
|
||
|
||
### Features
|
||
|
||
- **Project List**: Discovers projects from configurable search paths
|
||
- **Project Filtering**: Filter box to quickly find projects by name or key
|
||
- **Context Menu**: Open terminal, editor, Gitea, docs, deploy
|
||
- **Splittable Panes**: Horizontal/vertical splits, each pane has own tab bar
|
||
- **Cross-Pane Tab Dragging**: Drag tabs between panes to reorganize workspace
|
||
- **Terminal**: Full PTY with pyte for TUI support (vim, htop work)
|
||
- **Terminal Scrollback**: 10,000 line history with Shift+PageUp/Down navigation
|
||
- **Terminal Search**: Ctrl+Shift+F to search output with match highlighting
|
||
- **Terminal Error Recovery**: Graceful shell crash handling, Enter to restart
|
||
- **Drag & Drop**: Drop files/folders into terminal to inject paths
|
||
- **Session Persistence**: Remembers pane layout and open terminals
|
||
- **External File Watching**: Dashboard auto-reloads when files modified externally
|
||
- **New Project Dialog**: Integrates with Ramble for voice input
|
||
- **Progress Reports**: Export weekly progress summaries from daily standups
|
||
- **Auto-accept Prompts**: Automatically accept Y/yes prompts in terminals for CLI tools (Claude, Codex, etc.)
|
||
|
||
### Keyboard Shortcuts
|
||
|
||
#### Global Shortcuts
|
||
|
||
| Shortcut | Action |
|
||
|----------|--------|
|
||
| `Ctrl+Shift+T` | New terminal tab |
|
||
| `Ctrl+Shift+W` | Close current tab |
|
||
| `Ctrl+Shift+D` | Split pane horizontal |
|
||
| `Ctrl+Shift+E` | Split pane vertical |
|
||
| `Ctrl+Shift+P` | Close active pane |
|
||
| `Ctrl+Alt+Left/Right` | Switch panes |
|
||
| `Ctrl+B` | Toggle project panel |
|
||
| `Ctrl+N` | New project dialog |
|
||
| `Ctrl+D` | New discussion |
|
||
| `Ctrl+R` | Weekly progress report |
|
||
| `Ctrl+Z` | Undo (in dashboard) |
|
||
| `Ctrl+Shift+Z` | Redo (in dashboard) |
|
||
| `F5` | Refresh project list |
|
||
|
||
#### Terminal Shortcuts
|
||
|
||
| Shortcut | Action |
|
||
|----------|--------|
|
||
| `Ctrl+Shift+F` | Open search bar |
|
||
| `Ctrl+Shift+V` | Paste from clipboard |
|
||
| `Shift+PageUp/Down` | Scroll through history |
|
||
| `Enter` (in search) | Next match |
|
||
| `Shift+Enter` (in search) | Previous match |
|
||
| `F3` / `Shift+F3` | Next/previous match |
|
||
| `Escape` | Close search bar |
|
||
|
||
### Auto-accept Prompts
|
||
|
||
The terminal includes an auto-accept feature for handling Y/yes confirmation prompts from CLI tools like Claude Code, Codex, etc. This is useful when running long-running AI tasks that may ask many permission questions.
|
||
|
||
**How to use:**
|
||
1. Click ☰ (action menu) → "Auto-accept prompts..."
|
||
2. Select a duration (5 min, 15 min, 30 min, 1 hour, or custom)
|
||
3. When a Y/yes prompt is detected, a toast appears with a 5-second countdown
|
||
4. Click "Skip" to ignore, "Accept" to confirm immediately, or wait for countdown
|
||
5. Tab badge shows remaining time (e.g., `⏱4:32`)
|
||
6. Click ☰ → "Stop auto-accept" to disable early
|
||
|
||
**Supported patterns:**
|
||
- Standard `[Y/n]`, `[y/N]`, `(y/n)` prompts
|
||
- Claude Code permission dialogs with `❯ 1. Yes` menu selection
|
||
|
||
#### Dashboard Shortcuts (when dashboard tab is active)
|
||
|
||
| Shortcut | Action |
|
||
|----------|--------|
|
||
| `/` | Focus add todo input |
|
||
| `Ctrl+1` | Switch to priority view |
|
||
| `Ctrl+2` | Switch to milestone view |
|
||
| `Ctrl+3` | Switch to show all view |
|
||
| `Ctrl+]` | Expand all sections |
|
||
| `Ctrl+[` | Collapse all sections |
|
||
|
||
### Dashboard Data Sync
|
||
|
||
The dashboard automatically syncs data between documentation files:
|
||
|
||
- **Deliverables → TODOs**: When loading a project dashboard, deliverables from `milestones.md` tables are synced to `todos.md`. If a deliverable doesn't exist as a todo (matched by text + milestone ID), it's added with the appropriate `@M#` tag and priority.
|
||
- **TODOs → Milestone Progress**: The milestone progress bar is calculated from linked todos (items tagged with `@M#`), not from the deliverables table.
|
||
|
||
This means you can define major work items in milestone deliverable tables, and they'll automatically appear in your todo list for tracking.
|
||
|
||
## CLI Scripts
|
||
|
||
### `bin/new-project`
|
||
|
||
Creates a new project in the ecosystem with all the standard setup:
|
||
|
||
```bash
|
||
# Full usage
|
||
new-project myproject --title "My Project" --tagline "Short description"
|
||
|
||
# Interactive mode (prompts for title/tagline)
|
||
new-project myproject
|
||
|
||
# Options
|
||
--title "..." Display title for the project
|
||
--tagline "..." Short description
|
||
--dry-run Show what would happen without making changes
|
||
--skip-gitea Skip Gitea repository creation (for offline use)
|
||
```
|
||
|
||
**What it does:**
|
||
1. Creates Gitea repository via API
|
||
2. Creates local project directory with git
|
||
3. Generates project files from templates (CLAUDE.md, README.md, .gitignore, pyproject.toml)
|
||
4. Sets up documentation symlink to project-docs
|
||
5. Updates build-public-docs.sh to include the new project
|
||
6. Creates initial commit and pushes
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
development-hub/
|
||
├── src/development_hub/ # GUI application (see Architecture above)
|
||
├── bin/
|
||
│ └── new-project # CLI scaffolding script
|
||
├── templates/
|
||
│ ├── gitignore.template # Python .gitignore with docs exclusion
|
||
│ ├── CLAUDE.md.template # AI context file
|
||
│ ├── README.md.template # Basic README
|
||
│ ├── pyproject.toml.template
|
||
│ ├── overview.md.template # Docs overview
|
||
│ └── updating-documentation.md.template
|
||
├── docs/ # Symlink to project-docs
|
||
├── pyproject.toml # Python packaging with PyQt6 dep
|
||
├── CLAUDE.md # This file
|
||
├── README.md
|
||
└── .gitignore
|
||
```
|
||
|
||
## Template Placeholders
|
||
|
||
Templates use these placeholders (replaced by sed):
|
||
|
||
- `{{PROJECT_NAME}}` - lowercase project name (e.g., "my-tool")
|
||
- `{{PROJECT_TITLE}}` - display title (e.g., "My Tool")
|
||
- `{{PROJECT_TAGLINE}}` - short description
|
||
- `{{YEAR}}` - current year
|
||
- `{{DATE}}` - creation date
|
||
- `{{GITEA_URL}}` - https://gitea.brrd.tech
|
||
- `{{GITEA_OWNER}}` - rob
|
||
|
||
## Configuration
|
||
|
||
### Gitea API Token
|
||
|
||
The script needs a Gitea API token to create repositories:
|
||
|
||
1. **Environment variable**: `GITEA_TOKEN`
|
||
2. **Config file**: `~/.config/development-hub/gitea-token`
|
||
|
||
To create a token:
|
||
1. Go to https://gitea.brrd.tech/user/settings/applications
|
||
2. Generate a new token with 'repo' scope
|
||
3. The script will prompt and save it automatically
|
||
|
||
## Documentation
|
||
|
||
Documentation lives in the centralized docs system:
|
||
|
||
- **Source**: `~/PycharmProjects/project-docs/docs/projects/development-hub/`
|
||
- **Public URL**: `https://pages.brrd.tech/rob/development-hub/`
|
||
|
||
When updating documentation:
|
||
1. Edit files in `docs/` (the symlink)
|
||
2. Use `public: true` frontmatter for public-facing docs
|
||
3. Run `~/PycharmProjects/project-docs/scripts/build-public-docs.sh development-hub --deploy` to publish
|
||
|
||
## Related Projects
|
||
|
||
This project manages and creates projects in the ecosystem:
|
||
|
||
- **CmdForge** - AI-powered CLI tool builder
|
||
- **CascadingDev** - Cascading Development Framework
|
||
- **Orchestrated Discussions** - AI Discussion Framework
|
||
- **Artifact Editor** - Code Artifact Editor
|
||
- **Ramble** - Voice Note Transcription
|
||
|
||
All projects follow the same documentation pattern and can be created using `new-project`.
|