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
30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,38 @@ Session context is saved and restored automatically via Working Memory hooks —
| `--teams` / `--no-teams` | Enable/disable Agent Teams (experimental, default: off) |
| `--ambient` / `--no-ambient` | Enable/disable ambient mode (default: on) |
| `--memory` / `--no-memory` | Enable/disable working memory (default: on) |
| `--hud-only` | Install only the HUD (no plugins, hooks, or extras) |
| `--no-hud` | Disable HUD status line |
| `--verbose` | Show detailed output |

### HUD Options

| Command | Description |
|---------|-------------|
| `npx devflow-kit hud --status` | Show current HUD config |
| `npx devflow-kit hud --enable` | Enable HUD |
| `npx devflow-kit hud --disable` | Disable HUD (version notifications still appear) |
| `npx devflow-kit hud --detail` | Show tool/agent descriptions |
| `npx devflow-kit hud --no-detail` | Hide tool/agent descriptions |

### Skill Shadowing

Override any DevFlow skill with your own version. Shadowed skills survive `devflow init` — they won't be overwritten on reinstall or upgrade.

```bash
# Create a personal override (copies current version as reference)
npx devflow-kit skills shadow core-patterns

# Edit your override
vim ~/.claude/skills/core-patterns/SKILL.md

# List all overrides
npx devflow-kit skills list-shadowed

# Remove override (next init restores DevFlow's version)
npx devflow-kit skills unshadow core-patterns
```

### Uninstall Options

| Option | Description |
Expand Down
22 changes: 14 additions & 8 deletions src/cli/hud/git.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,13 @@ async function detectBaseBranch(
const match = line.match(checkoutPattern);
if (match) {
const candidate = match[1];
if (candidate !== branch) {
const exists = await gitExec(
['rev-parse', '--verify', candidate],
cwd,
);
if (exists) return candidate;
}
// Skip raw commit hashes and the current branch
if (candidate === branch || /^[0-9a-f]{7,}$/.test(candidate)) continue;
const exists = await gitExec(
['rev-parse', '--verify', candidate],
cwd,
);
if (exists) return candidate;
}
}

Expand All @@ -169,8 +169,14 @@ async function detectBaseBranch(
if (exists) return prBase;
}

// Layer 4: main/master fallback
// Layer 4: main/master fallback (skip if already on that branch — use remote tracking instead)
for (const candidate of ['main', 'master']) {
if (candidate === branch) {
// On main/master itself — compare against remote tracking branch
const remote = await gitExec(['rev-parse', '--verify', `origin/${candidate}`], cwd);
if (remote) return `origin/${candidate}`;
continue;
}
const exists = await gitExec(['rev-parse', '--verify', candidate], cwd);
if (exists) return candidate;
}
Expand Down
Loading