Open Orchestrator automatically generates meaningful branch names from your task descriptions. When you run owt new "Add user authentication", the tool creates a branch named feat/add-user-authentication without any manual naming.
The Algorithm
Branch name generation follows a deterministic pipeline:
Task Description
│
▼
1. Detect prefix keyword
│
▼
2. Normalize text (lowercase, strip punctuation)
│
▼
3. Split into words
│
▼
4. Filter filler words
│
▼
5. Limit to 6 words
│
▼
6. Join with hyphens
│
▼
7. Truncate to 50 characters
│
▼
8. Combine as "prefix/slug"Step-by-Step Breakdown
1. Detect Prefix Keyword
The first step scans the task description for a keyword that maps to a branch prefix. The first matching keyword wins.
| Prefix | Keywords |
|---|---|
feat | add, create, implement, build, new, feature |
fix | fix, bug, repair, resolve, patch |
refactor | refactor, restructure, reorganize, clean, simplify |
docs | document, docs, readme, guide, documentation |
test | test, spec, coverage, assert |
experiment | experiment, try, explore, prototype, spike, poc |
chore | chore, update, upgrade, bump, maintain |
perf | performance, optimize, speed, cache, fast |
security | security, auth, vulnerability, cve, encrypt |
If no keyword matches, the default prefix is feat.
2. Normalize
The description is lowercased and punctuation is stripped:
"Add User Authentication!!" → "add user authentication"3. Split into Words
The normalized string is split on whitespace:
"add user authentication" → ["add", "user", "authentication"]4. Filter Filler Words
Common filler words are removed to keep the slug concise:
"fix the broken login page issue" → ["fix", "broken", "login", "page", "issue"]Filler words removed include: the, a, an, is, are, was, were, be, been, being, have, has, had, do, does, did, will, would, could, should, may, might, shall, can, for, and, but, or, nor, not, so, yet, to, of, in, on, at, by, with, from, into, about, it, its, this, that, these, those, i, we, you, they, he, she.
5. Limit to 6 Words
Only the first 6 remaining words are kept:
["implement", "user", "authentication", "with", "jwt", "tokens", "and", "refresh"]
→ ["implement", "user", "authentication", "jwt", "tokens", "refresh"]6. Join with Hyphens
Words are joined:
["user", "authentication", "jwt", "tokens"] → "user-authentication-jwt-tokens"7. Truncate to 50 Characters
The slug is truncated at 50 characters on a word boundary to avoid cutting words in half.
8. Combine Prefix and Slug
The prefix keyword (from step 1) is removed from the slug if it appears there, then combined:
prefix: "feat"
slug: "add-user-authentication"
↓ (remove prefix keyword "add" since it mapped to feat)
slug: "user-authentication"
result: "feat/user-authentication"Examples
| Task Description | Generated Branch |
|---|---|
"Add user authentication" | feat/user-authentication |
"Fix the broken login page" | fix/broken-login-page |
"Refactor database queries" | refactor/database-queries |
"Write tests for payment module" | test/payment-module |
"Update dependencies to latest" | chore/dependencies-latest |
"Optimize API response times" | perf/api-response-times |
"Add security headers to all endpoints" | security/headers-all-endpoints |
"Document the REST API" | docs/rest-api |
"Try out the new caching library" | experiment/new-caching-library |
"Implement OAuth2 with Google and GitHub providers for SSO" | feat/oauth2-google-github-providers-sso |
Usage
Branch naming happens automatically with owt new:
# Branch name generated from description
owt new "Add user authentication"
# Creates: feat/user-authentication
# With template override
owt new "Add user authentication" -t bugfix
# Creates: fix/user-authentication (template overrides prefix)You do not need to think about branch names. Describe the task in natural language and Open Orchestrator handles the rest.