A command-line tool for streamlined development workflow with ClickUp and GitHub.
workon <ticket-id>- Start work on a ClickUp ticket (e.g.,workon 86b6ycnw1)workon start- Interactive mode to search, select, or create a ticketworkon ticket- Get ticket info from ClickUp for contextworkon comment- Add a comment to the current ticketworkon pr- Create a pull request with AI-generated descriptionworkon pr-status- Check PR approval and CI statusworkon ci-status- Check CircleCI build status for any branchworkon ci-failure- Get full error output from a failed CI jobworkon merge- Post/mergecomment to trigger merge automation
git clone https://github.com/evansoderberg/workon-cli.git
cd workon-cli
npm install
npm run build
npm linkworkon initThis creates ~/.config/workon/config.json with prompts for your ClickUp API token, user/workspace IDs, GitHub username, branch prefix, and optionally a CircleCI API token. After init, edit the config to add your:
- ClickUp workspace folder IDs (
clickup.workspaces) - Sprint folder patterns (
clickup.workspaces.<name>.sprintPatterns)
- Node.js 20+
- GitHub CLI (
gh) - Installbrew install gh gh auth login
- Claude Code (for AI features) - Install
- ClickUp API token - Settings → Apps → Generate token
- CircleCI API token (optional, for
ci-status) - User Settings → Personal API Tokens
# Most common: pass the ClickUp ticket ID directly
workon 86b6ycnw1
# Creates branch: username/86b6ycnw1/ticket-title-slug
# If branch exists, prompts to checkout or recreate# Search for tickets, select from list, or create a new one
workon start
# Or pass ticket ID to skip the prompt
workon start 86b6ycnw1When creating a new ticket, workon start prompts for:
- Title - The ticket name
- Workspace - If multiple configured
- Type - Dropdown selection (Bug, Feature, Technical, etc.)
- Domain - Searchable multi-select (type to filter, select multiple)
- Description - Optional AI-generated description with acceptance criteria
# Interactive mode - prompts for title, summary, description, testing
workon pr
# Non-interactive mode - provide content directly (for Claude Code integration)
workon pr --title "Add feature" --summary "..." --description "..." --testing "..."
# Pipe content from stdin
echo "Description content" | workon pr --title "Add feature" --description -
# Create as draft
workon pr --draft# Get ticket info for current branch (extracts ID from branch name)
workon ticket
# Get specific ticket
workon ticket 86b6ycnw1Outputs the ticket title, status, URL, and description. Useful for getting context from ClickUp into your current session.
# Add a comment to the current branch's ticket
workon comment "Started working on this feature"
# Pipe content from stdin
echo "Comment content" | workon comment# Current branch's PR
workon pr-status
# Specific PR
workon pr-status 123# Current branch
workon ci-status
# Specific branch
workon ci-status feature/my-branchShows CircleCI pipeline status including:
- Workflow status (passed/failed/running)
- Individual job results
- Job numbers for failed jobs
# Get output from first failed job on current branch
workon ci-failure
# Get output from a specific job number
workon ci-failure 2928754
# Check a different branch
workon ci-failure --branch feature/other-branchFetches the full, untruncated error output from a failed CI step. Useful for debugging test failures, lint errors, or build issues.
workon mergeEdit ~/.config/workon/config.json:
{
"clickup": {
"apiToken": "pk_...",
"userId": "12345678",
"workspaceId": "1234567",
"workspaces": {
"Commerce": {
"folderId": "87654321",
"sprintPatterns": ["\\d+ Commerce 1 \\(", "Sprint \\d+ \\("]
}
},
"defaults": {
"status": "ON DECK"
}
},
"github": {
"username": "username"
},
"git": {
"branchPrefix": "username"
},
"ai": {
"enabled": true,
"generateTicketDescriptions": true
},
"circleci": {
"apiToken": "CIRCLE_TOKEN"
}
}The ci-status and ci-failure commands need a CircleCI API token. You can provide it via:
- Config:
circleci.apiTokenin config.json - Environment:
CIRCLECI_TOKENorCIRCLE_TOKEN
Sprint folders are matched by patterns and date ranges:
Sprint 20 (12/8 - 12/21)- matches pattern, parses date range99 Commerce 1 (12/8 - 12/21)- same format with team name
The CLI finds the folder where today's date falls within the range.
AI is used only for ticket description generation during workon start:
| Feature | What it does |
|---|---|
| Ticket description | Generates acceptance criteria from title |
PR descriptions are intended to be generated by Claude Code and passed to the workon CLI via command-line options. This allows Claude Code to use its full context (diff, commits, ticket info) to generate better descriptions.
AI features can be disabled in config.
After making changes to the source code:
# Compile TypeScript to JavaScript
npm run build
# If not already linked globally, link the CLI
npm link
# Lint
npm run lintThe workon command will now use the updated code.