Conversation
Folder tree view, agent target paths, setup-skillshare action.
Add per-target target_naming setting that controls how skill directories are named in sync targets. 'flat' (default) preserves the existing flattened __ separator behavior. 'standard' uses the SKILL.md name field directly, following the Agent Skills specification. Standard mode: - Validates SKILL.md names match directory basenames - Detects and skips name collisions with warnings - Auto-migrates managed entries when switching from flat to standard - Preserves legacy entries when bare name is already occupied Also includes: - Per-target toggle via CLI (--target-naming), TUI (N key), and Web UI - Collision output redesigned as deduplicated compact summary - Config inheritance: global target_naming → per-target override - JSON schema + UI validation for the new field Closes #110
…try, SkillEntryDTO
Add --branch / -b flag to install command: - Flag parsing with value-required and non-empty validation - Mutual exclusion: --branch rejected for non-git (local path) sources - Help text added to printInstallHelp() - Integration tests covering all three error paths
cloneTrackedRepo(), cloneRepoFull(), and sparseCloneSubdir() now accept a branch parameter. When non-empty, --branch <name> is passed to git clone. Fallback chain (partial → full) preserved. Ref: #90
Source.Branch threads the branch parameter through discovery. cloneRepo() passes --branch to git clone when set. source.Branch is set from parsed.opts.Branch in cmdInstall. Ref: #90
- NewMetaFromSource: set meta.Branch from source.Branch - installFromDiscoveryImpl: forward discovery.Source.Branch when building per-skill Source struct for metadata - installFromGitSubdir: pass source.Branch to sparseCloneSubdir (was hardcoded empty string, causing subdir installs to ignore --branch) - ReconcileGlobalSkills: sync meta.Branch to registry on both new and existing entries - toSkillEntryDTOs: include Branch field in DTO conversion - updateRegularSkill / updateSkillFromMeta: restore source.Branch from meta before reinstalling, so updates pull from the originally-specified branch Tests: TestInstallBranch_MetadataPersistence, TestInstallBranch_UpdatePreservesBranch
- Add GetRemoteRefHash/WithAuth/WithEnv to internal/git/info.go: uses git ls-remote with refs/heads/<branch> when branch is set, falls back to HEAD when branch is empty - Add Branch field to URLCheckInput and URLCheckOutput in check/parallel.go; ParallelCheckURLs dispatches to GetRemoteRefHashWithAuth when Branch is set - check.go: group skills by RepoURL@branch composite key so skills on different branches of the same repo are checked against the correct ref; urlHashMap keyed by same composite key for correct broadcast - install_config.go (InstallFromConfig): propagate SkillEntryDTO.Branch into Source.Branch for both plain and tracked skill phases so registry rebuild (install --from-config) respects the recorded branch
- Set source.Branch in project install path - Sync branch in project reconcile - Add Branch to checkRepoResult and RepoCheckOutput for JSON/display - Read current branch from tracked repos in check Ref: #90
Adds --branch to options table, usage examples for branch installs, and Branch Tracking section in tracked-repositories guide. Closes #90
- skillItem struct gains Branch field (json: branch,omitempty) - handleListSkills and handleGetSkill populate Branch from SkillMeta; fall back to git.GetCurrentBranch for tracked repos with empty metadata branch - handleDiscover, handleInstallBatch, handleInstall all accept Branch in request body and propagate it to Source.Branch and InstallOptions.Branch
- API client: branch field on Skill type, discover/install/installBatch - InstallForm: branch input inline with Source (7:3 ratio), git detection - SkillsPage: branch badge with GitBranch icon in all 3 view modes - SkillDetailPage: branch metadata row in detail sidebar
Apply setting change to React Query cache immediately on select, then confirm via API. Rollback cache on error. Eliminates 2s lag between dropdown change and UI update.
Problem: Sync page showed 'in sync' but Targets page showed 39032/64075 — ~25000 skills silently dropped by name collisions and SKILL.md validation in standard naming mode. Root cause: expectedSkillCount used raw filtered count (pre-resolution) while diff used post-resolution count. The gap was invisible. Fix: 1. handler_targets.go: expectedSkillCount now uses resolution.Skills count (post-collision/validation), matching what sync actually does 2. handler_diff_stream.go: surfaces skippedCount and collisionCount in diff response so UI can explain why skills were dropped 3. handler_sync.go: diffTarget struct gains SkippedCount/CollisionCount 4. TargetsPage: shows warning when skills are skipped with collision count 5. SyncPage: shows naming conflict notice in 'in sync' cards 6. API client: Target and DiffTarget types gain optional fields
With 25000+ skipped skills (standard naming + name collisions), the CLI sync output was flooded with per-skill warning lines. Now prints a concise summary: 12345 skill(s) skipped (naming validation) 456 name collision(s) excluded Applied to both merge and copy sync modes.
- check.go: extract urlBranchKey()/splitURLBranch() helpers, used in 5 places - handler_skills.go: extract enrichSkillBranch() helper, used in 2 handlers - handler_targets.go: merge duplicate merge/copy resolution into single case - list.go: cache git.GetCurrentBranch() per-repo instead of per-skill
…d bug fixes Adds --branch feature, sync count fix, CLI warning summary, target dropdown optimistic update, and cached branch lookups to existing v0.18.4 changelog entry. Syncs website changelog and release notes.
…for --branch - check.md: JSON output now includes branch field for tracked repos - quick-reference.md: added --branch example in team sharing section - SKILL.md: added -b flag to install recipes
quick-reference.md and SKILL.md now show both regular (--branch --all) and tracked (--track --branch) usage patterns.
This was
linked to
issues
Mar 31, 2026
There was a problem hiding this comment.
Code Review
This pull request introduces support for installing skills from specific git branches, adds a configurable target_naming strategy (supporting both 'flat' and 'standard' naming), and includes various UI and CLI improvements to support these features. My review identified a bug where sparse checkout discovery ignores the branch argument, and a potential regression in the doctor command's duplicate skill detection logic.
TestSync_TargetNamingStandard_InvalidSkillWarnsAndSkips now checks for summarized output 'skill(s) skipped (naming validation)' instead of per-skill warning line.
sparseCloneSubdir in discoverFromGitSubdir was hardcoding empty branch, ignoring --branch when sparse checkout was used for subdirectory discovery. Reported by: gemini-code-assist on PR #112
P1: check.go '@' separator broke SSH URLs (git@github.com:org/repo)
— splitURLBranch would split at the '@' in the URL itself
— Fix: use tab character as separator (cannot appear in URLs)
— Added unit test for SSH URL round-trip
P1: install_config.go grouped same-repo different-branch skills together
— groupConfigSkillsByRepo keyed by CloneURL only, ignoring Branch
— Fix: include branch in grouping key so each branch clones separately
P2: reconcile never cleared stale branch from registry
— Only updated when meta.Branch was non-empty, never cleared it
— Fix: sync branch unconditionally when meta is available
Tracked repos have no .skillshare-meta.json, so reconcile could not read branch from metadata. Now falls back to git rev-parse --abbrev-ref HEAD for tracked repos, ensuring branch is written to registry.yaml for cross-device rebuild. Added gitCurrentBranch() helper in config package (cannot import internal/git due to circular dependency). Added registry assertion to TestInstallBranch_TrackedRepo.
…il metadata layout Table view: - Add max-w-[300px] + truncate + tooltip on Name column - Fix tooltip overflow clamping to slide instead of flip - Add block prop to Tooltip for correct getBoundingClientRect in table cells - Set tooltip delay to 1500ms for table columns Tooltip component: - Add block prop to render wrapper as block element - Fix horizontal overflow: use vw - MARGIN - w instead of flipping left - Add useEffect cleanup to prevent timer/RAF leak on unmount Skill detail page: - Switch metadata from stacked to horizontal label:value layout - Move CopyButton from label to value side to prevent layout shift - Reduce spacing (space-y-3 → space-y-2) and label size (text-sm → text-xs) - Shorten Repository label to Repo
runkids
added a commit
that referenced
this pull request
Mar 31, 2026
sparseCloneSubdir in discoverFromGitSubdir was hardcoding empty branch, ignoring --branch when sparse checkout was used for subdirectory discovery. Reported by: gemini-code-assist on PR #112
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[0.18.4] - 2026-03-31
New Features
Branch Support (
--branch/-b)Install from a specific branch — new
--branch/-bflag lets you clone from any branch instead of the remote default:--track) and regular skill installsupdateandcheckautomatically use the correct branch--nameto avoid collisions:-p) and config-driven rebuild (skillshare installwith no args)registry.yamlstores the branch for cross-device reproducibilityBranch in Web UI — the Install form shows a Branch input field (inline with Source) when a git source is detected. Skills page shows a branch badge on cards, and the Skill Detail page includes branch in the metadata section
Branch in CLI list —
skillshare listdetail panel shows the tracked branch when non-defaultBranch-aware check —
skillshare checkcompares against the correct remote branch ref, not just HEAD. JSON output includes abranchfield for tracked reposSync Accuracy
Accurate skill counts on Targets page — the expected skill count now reflects what sync actually resolves (after name collision and validation filtering), instead of the raw source count. Previously, targets using
standardnaming could show39032/64075 sharedwhen all resolved skills were actually in syncSkipped skill visibility — when skills are excluded by naming validation or collisions, the Targets page and Sync page now show a summary (e.g. "12345 skill(s) skipped, 456 name collision(s)") instead of silently dropping them. Suggests switching to
flatnaming to include all skillsTarget Naming Mode
target_namingconfig option — choose how synced skill directories are named in targets. Set globally or per-target:flat(default) — nested skills likefrontend/devbecomefrontend__devin targetsstandard— uses the SKILL.mdnamefield directly (e.g.dev), following the Agent Skills specificationdev) are detected and both are skipped with a warningflattostandardautomatically migrates existing managed entries (symlinks and copies are renamed in place)target_namingis ignored insymlinkmode (the entire source directory is linked)Collision output redesigned — name conflict warnings are now deduplicated across targets and displayed as a compact summary instead of repeating each collision per target
Folder Tree View (Web UI)
Skills folder tree — the second layout on
/skillsis now a true folder tree with multi-level expand/collapse, matching your actual directory structure from--into:Skill detail button layout — the Enable/Update/Uninstall buttons no longer wrap awkwardly on narrow screens
Agent Target Paths
agents:paths in their configuration. This is groundwork for upcoming agent sync supportGitHub Actions
setup-skillshareaction — install skillshare in CI with a single step:Bug Fixes
standardnaming and large skill sets) now print a compact summary instead of one line per skipped skillPerformance
skillshare listcachesgitbranch queries per tracked repo, so listing 500 skills from the same repo runs 1 git command instead of 500