{"id":50536890,"url":"https://github.com/diegoleme/gh-wt","last_synced_at":"2026-06-03T17:01:32.791Z","repository":{"id":350372979,"uuid":"1206361351","full_name":"diegoleme/gh-wt","owner":"diegoleme","description":"Worktree-driven development workflow for GitHub CLI","archived":false,"fork":false,"pushed_at":"2026-06-01T21:19:34.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T22:23:36.012Z","etag":null,"topics":["bubbletea","cli","cobra","gh-cli","gh-extension","github","go","golang","lipgloss","terminal","tui","viper"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diegoleme.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-09T20:52:30.000Z","updated_at":"2026-06-01T21:20:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/diegoleme/gh-wt","commit_stats":null,"previous_names":["diegoleme/gh-wt"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/diegoleme/gh-wt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diegoleme%2Fgh-wt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diegoleme%2Fgh-wt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diegoleme%2Fgh-wt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diegoleme%2Fgh-wt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diegoleme","download_url":"https://codeload.github.com/diegoleme/gh-wt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diegoleme%2Fgh-wt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33874679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","cli","cobra","gh-cli","gh-extension","github","go","golang","lipgloss","terminal","tui","viper"],"created_at":"2026-06-03T17:01:32.204Z","updated_at":"2026-06-03T17:01:32.780Z","avatar_url":"https://github.com/diegoleme.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gh-wt\n\nA GitHub CLI extension for worktree-driven development. One issue = one branch = one worktree = one PR.\n\n## Install\n\n```bash\ngh extension install diegoleme/gh-wt\n```\n\n## Usage\n\n### TUI\n\n```bash\ngh wt\n```\n\nOpens an interactive dashboard with all your issues organized in sections:\n\n- **Done** — closed issues with worktrees still active\n- **In Progress** — open issues with worktrees\n- **Todo** — open issues without worktrees\n\n### CLI\n\n```bash\ngh wt start \u003cissue\u003e    # Create branch + worktree + link issue + run hooks\ngh wt list             # List worktrees with PR/CI/review status\ngh wt prune            # Remove worktrees for merged/closed branches\ngh wt prune \u003cnumber\u003e   # Remove worktree for a specific issue or PR\ngh wt status           # Show current worktree state\n```\n\n## Configuration\n\nTwo-level config: user preferences + repo settings.\n\n### User config (`~/.config/gh-wt/config.yml`)\n\n```yaml\ntui:\n  keybindings:\n    - key: s\n      label: \"start\"\n      command: \"gh wt start {{.IssueNumber}}\"\n      output: true\n\n    - key: d\n      label: \"delete\"\n      confirm: true\n      requires:\n        - worktree\n      command: \"git worktree remove '{{.Path}}' --force \u0026\u0026 git branch -D '{{.Branch}}'\"\n      output: true\n\n    - key: w\n      label: \"open web\"\n      requires:\n        - issue\n      command: \"gh issue view {{.IssueNumber}} --web\"\n```\n\n### Repo config (`.gh-wt.yml`)\n\n```yaml\nworktree:\n  path: \"../{{.RepoName}}-wt/{{.Branch}}\"\n  copy-ignored:\n    enabled: true\n    exclude: [\"node_modules/\", \".turbo/\"]\n\nhooks:\n  post-start:\n    - run: \"npm install\"\n```\n\n## Keybinding options\n\n| Field | Type | Description |\n|---|---|---|\n| `key` | string | Keyboard shortcut |\n| `label` | string | Label shown in footer |\n| `command` | string | Shell command with template variables |\n| `input` | string | Prompt for user input before executing |\n| `confirm` | bool | Ask for confirmation (y/N) |\n| `requires` | []string | Show only when conditions are met: `pr`, `issue`, `worktree` |\n| `output` | bool | Show command output in a floating dialog |\n| `interactive` | bool | Hand over terminal to the command |\n\n## Template variables\n\n| Variable | Type | Description |\n|---|---|---|\n| `{{.Branch}}` | string | Branch name |\n| `{{.Path}}` | string | Worktree absolute path |\n| `{{.IssueTitle}}` | string | Issue title |\n| `{{.Input}}` | string | User input from `input` prompt |\n| `{{.IssueNumber}}` | int | Issue number |\n| `{{.PRNumber}}` | int | PR number |\n\nCommands are executed via `sh -c`, so values would normally need shell quoting.\ngh-wt does this for you: **string variables are auto-escaped** and rendered\nalready wrapped in single quotes, so `{{.IssueTitle}}` is always one shell\nargument, even if the title contains spaces, apostrophes, `$`, backticks, etc.\nInteger variables are interpolated raw so they work in arithmetic comparisons.\n\n```yaml\n# Always safe — no manual quoting needed:\ncommand: \"open-pane.sh '#'{{.IssueNumber}}-{{.IssueTitle}} {{.Path}}\"\ncommand: \"git worktree remove {{.Path}} --force \u0026\u0026 git branch -D {{.Branch}}\"\ncommand: \"if [ {{.PRNumber}} -gt 0 ]; then gh pr view {{.PRNumber}}; fi\"\n\n# Don't add your own quotes around string variables — they're already quoted:\ncommand: \"echo '{{.Branch}}'\"   # renders as: echo ''main''  (works, but ugly)\n\n# A leading literal '#' must be quoted (in YAML or shell) so sh doesn't read it\n# as the start of a comment — this is a shell rule, unrelated to gh-wt.\n```\n\n## Tech stack\n\nGo, Cobra, Viper, Bubble Tea, Lipgloss, go-gh\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiegoleme%2Fgh-wt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiegoleme%2Fgh-wt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiegoleme%2Fgh-wt/lists"}