{"id":50607132,"url":"https://github.com/tkhwang/workbranch","last_synced_at":"2026-06-06T00:03:46.318Z","repository":{"id":361727955,"uuid":"1254370634","full_name":"tkhwang/workbranch","owner":"tkhwang","description":"Simplify Git worktree workspaces and branch operations.","archived":false,"fork":false,"pushed_at":"2026-06-01T22:48:40.000Z","size":126,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T00:15:36.128Z","etag":null,"topics":["ai-context","ai-sessions","git-ops","shell-script","worktree","worktree-workflow"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/tkhwang.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-05-30T13:33:23.000Z","updated_at":"2026-06-01T22:50:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tkhwang/workbranch","commit_stats":null,"previous_names":["tkhwang/tasktree","tkhwang/workbranch"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tkhwang/workbranch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkhwang%2Fworkbranch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkhwang%2Fworkbranch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkhwang%2Fworkbranch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkhwang%2Fworkbranch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkhwang","download_url":"https://codeload.github.com/tkhwang/workbranch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkhwang%2Fworkbranch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33964367,"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-05T02:00:06.157Z","response_time":120,"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":["ai-context","ai-sessions","git-ops","shell-script","worktree","worktree-workflow"],"created_at":"2026-06-06T00:03:45.897Z","updated_at":"2026-06-06T00:03:46.313Z","avatar_url":"https://github.com/tkhwang.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# workbranch\n\n**English** | [한국어](README.ko.md)\n\nManage Git worktree task spaces without memorizing `git worktree` commands.\n\n`workbranch` creates one task folder per feature, works with one repo or many repos, and keeps branch sync commands short and safe.\n\nIts two core workflows are **Workspace lifecycle** for creating and removing task workspaces, and **Branch workflow** for updating, landing, and pushing task branches.\n\n![img](./docs/figs/workbranch-git-flow.png)\n\n## Install\n\n### Homebrew\n\n```bash\nbrew install tkhwang/tap/workbranch\n```\n\nIf you prefer to add the tap first:\n\n```bash\nbrew tap tkhwang/tap\nbrew install workbranch\n```\n\n### curl installer\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/tkhwang/workbranch/main/install.sh | bash\n```\n\nHomebrew installs published releases. The curl installer tracks `main`.\n\n## Quick start\n\n```bash\nworkbranch init\nworkbranch add login\ncd login/\u003crepo\u003e\n# work on the task\nworkbranch update login\nworkbranch push login\nworkbranch remove login\n```\n\n`workbranch add \u003ctask\u003e` uses `\u003ctask\u003e` as the folder name, shows each repo's base branch, then prompts for that repo's task branch. Press Enter to accept the suggested default branch name. Defaults are `feature/\u003ctask\u003e` from main-style base branches and `\u003cbase-branch\u003e-\u003ctask\u003e` from `feature/*`, `feat/*`, or the configured legacy prefix.\n\nTask branches are created from the current HEAD of your local `_base/\u003crepo\u003e` worktrees. `workbranch add` does not pull remote base branches automatically. To start from the latest remote base, run:\n\n```bash\nworkbranch pull\nworkbranch add \u003ctask\u003e\n```\n\nUse `workbranch config` when you want to update project settings, base branches, editor/terminal launch commands, or per-repo setup commands without cloning repos again.\n\n## What it creates\n\nFor every task, `workbranch` creates linked worktrees under one shared task directory:\n\n```text\nmy-app-workspace\n├── .workbranch.config\n├── _base\n│   ├── frontend\n│   └── backend\n└── login\n    ├── frontend\n    └── backend\n```\n\nSingle-repo projects use the same shape with one repo directory inside each task.\n\n## Common commands\n\n### Workspace lifecycle\n\n| Command | Use it to |\n| --- | --- |\n| `workbranch init` | Create or clone base worktrees from config |\n| `workbranch config` | Edit project settings, base branches, tool commands, and repo setup commands |\n| `workbranch config editor` | Update only the configured editor command |\n| `workbranch config terminal` | Update only the configured terminal command |\n| `workbranch add \u003ctask\u003e` | Create a task workspace |\n| `workbranch list` | Show repos and task workspaces |\n| `workbranch remove \u003ctask\u003e` | Remove task worktrees and local task branches |\n\n### Branch workflow\n\n| Command | Use it to |\n| --- | --- |\n| `workbranch status` | Show branch, diff, and dirty state |\n| `workbranch pull` | Pull remote base branches into `_base/\u003crepo\u003e` |\n| `workbranch update [task]` | Merge local base changes into task worktrees |\n| `workbranch push` | Push base branches |\n| `workbranch push \u003ctask\u003e` | Push task branches |\n| `workbranch land \u003ctask\u003e` | Fast-forward task work back into local base branches |\n\n### Tool commands\n\n| Command | Use it to |\n| --- | --- |\n| `workbranch path \u003ctask\u003e` | Print a task workspace or repo path |\n| `workbranch editor \u003ctask\u003e` | Open task repo worktrees in the configured editor |\n| `workbranch terminal \u003ctask\u003e` | Open task repo worktrees in the configured terminal |\n\n### Other\n\n| Command | Use it to |\n| --- | --- |\n| `workbranch -v` | Show the installed version |\n\nAdd `--repo \u003crepo\u003e` to supported Branch workflow and Tool commands when you want to operate on one repo only.\n\n## CLI display\n\nIn an interactive terminal, `workbranch` uses color, a compact banner on help/init screens, and section titles to make command output easier to scan. Captured or piped output stays plain by default so scripts and tests do not receive ANSI escape sequences.\n\nColor controls:\n\n```bash\nNO_COLOR=1 workbranch help              # always plain\nWORKBRANCH_COLOR=never workbranch help  # always plain\nWORKBRANCH_COLOR=always workbranch help # force enhanced display\n```\n\n`workbranch path \u003ctask\u003e` and `workbranch path \u003ctask\u003e --repo \u003crepo\u003e` remain plain path-only outputs for scripting.\n\n## Opening task workspaces\n\nConfigure one editor and one terminal command for the project:\n\n```bash\nworkbranch config editor\nworkbranch config terminal\n```\n\nThen open every repo in a task workspace:\n\n```bash\nworkbranch editor login\nworkbranch terminal login\n```\n\nLimit to one repo when needed:\n\n```bash\nworkbranch editor login --repo frontend\nworkbranch terminal login --repo backend\n```\n\nPrint full paths for scripting:\n\n```bash\nworkbranch path login\nworkbranch path login --repo frontend\n```\n\nLauncher commands run repo-by-repo. Commands that keep running in the foreground, such as a raw TUI terminal command, should use `--repo` or a custom non-blocking wrapper.\n\n## Setup commands\n\n`workbranch config` can store a setup command per repo. When you run `workbranch add \u003ctask\u003e`, each setup command runs inside `\u003ctask\u003e/\u003crepo\u003e`.\n\nSee the [MVP spec](docs/specs/0001-workbranch-mvp.md) for the config format and setup environment variables.\n\n## Safety\n\nBefore changing worktrees, `workbranch` checks for dirty worktrees, wrong branches, rebase state, missing repos, and non-fast-forward Git paths.\n\n## More docs\n\n- [Architecture](docs/architecture.md)\n- [Git operations](docs/git-operations.md)\n- [MVP spec](docs/specs/0001-workbranch-mvp.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkhwang%2Fworkbranch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkhwang%2Fworkbranch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkhwang%2Fworkbranch/lists"}