Personal development toolkit for streamlined workflows with automated dependency management

Installation

Choose your preferred installation method

Via curl (no dependencies)

curl -fsSL https://cli.jd.boiv.in/install.sh | bash

Requires only curl/wget and unzip

or

Via npm

npm install -g @jdboivin/cli

Requires Node.js and npm

Commands

All available commands and their options

jd init
Setup and install CLI dependencies (optional first-time setup)
jd init [--skip-deps] [--skip-completions]
  • Helps set up the jd CLI by installing required tools like GitHub CLI, devcontainer CLI, and configuring shell completions.
  • --skip-deps Skip dependency installation checks
  • --skip-completions Skip shell completion setup
jd dev
Apply devcontainer templates to projects
jd dev [template-id] [--force] [--list]
  • template-id Custom template ID (default: ghcr.io/devcontainers/templates/nodejs-postgres)
  • --force Force overwrite existing .devcontainer
  • --list List available templates
jd pr
Create GitHub pull requests with AI-generated title and description
jd pr [--draft] [--auto-draft] [--base BRANCH] [--web] [--title TITLE] [--body BODY] [--no-claude] [--model MODEL] [--reviewers USERS] [--labels LABELS]
  • --draft Create as draft PR
  • --auto-draft Auto-detect draft from branch name (wip/draft prefixes)
  • --base BRANCH Target base branch (default: main/master)
  • --web Open PR in browser after creation
  • --title TITLE Custom PR title (AI generates description if not provided)
  • --body BODY Custom PR body/description
  • --no-claude Disable Claude AI generation (use fallback)
  • --model MODEL Claude model: sonnet (default), haiku, or opus
  • --reviewers USERS Comma-separated list of reviewers
  • --labels LABELS Comma-separated list of labels
jd merge
Merge GitHub pull request and cleanup branches with worktree support (squash by default)
jd merge [--branch BRANCH] [--type TYPE] [--clean]
  • --branch BRANCH Branch name to find PR for (defaults to current branch)
  • --type TYPE Merge type: squash (default), merge, or rebase
  • --clean Only cleanup old temporary branches (no merge)
jd repo
Initialize GitHub repository and configure secrets from 1Password
jd repo [--npm] [--extensions] [--claude] [--apple] [--suffix SUFFIX] [--rules] [--public] [--description DESC] [--no-init]
  • --npm Add NPM_TOKEN secret
  • --extensions Add VSCE_PAT and OVSX_PAT secrets for extension publishing
  • --claude Add CLAUDE_CODE_OAUTH_TOKEN secret
  • --apple Add Apple App Store, Fastlane, and GitHub PAT secrets
  • --suffix SUFFIX Add suffix to APPSTORE_* and MATCH_* secrets (use with --apple)
  • --rules Apply branch protection rulesets for main and dev branches
  • --public Create public repository (default: private)
  • --description DESC Repository description
  • --no-init Use existing git repo (skip git init)
jd npm
Setup npm package with OIDC trusted publishing
jd npm
  • Publishes placeholder package (0.0.0-placeholder) and guides through OIDC configuration on npmjs.com
jd update
Self-update to latest version
jd update [--check] [--force]
  • --check Check for updates without installing
  • --force Force reinstall current version
jd venv
Create and manage Python virtual environments
jd venv
  • Creates ./venv if missing, activates it, and auto-installs from requirements.txt
jd requirements
Generate requirements.txt from active virtual environment
jd requirements
  • Uses pip freeze to capture all installed packages
jd claude-github
Update Claude Code OAuth token across all GitHub repositories and 1Password
jd claude-github
  • Runs 'claude setup-token', prompts for the OAuth token, updates 1Password vault, and loops through all GitHub repositories to update the CLAUDE_CODE_OAUTH_TOKEN secret where it exists
  • Prerequisites: GitHub CLI (gh), 1Password CLI (op), Claude Code CLI (claude)