Package Exports
- @bragduck/cli
Readme
Bragduck CLI
Transform your GitHub Pull Requests into polished achievements with AI-powered refinement
Overview
Bragduck CLI is a powerful command-line tool that helps developers track and showcase their achievements by transforming GitHub Pull Requests into polished "brags" using AI-powered refinement. Perfect for updating your portfolio, preparing for performance reviews, or simply keeping track of your accomplishments.
Why Bragduck?
- ๐ค AI-Powered: Automatically refines your commit messages into professional achievements
- ๐ฏ Context-Aware: Analyzes commit diffs, file changes, and patterns
- ๐ Secure: OAuth authentication with encrypted credential storage
- ๐จ Beautiful UI: Interactive terminal experience with colors and spinners
- ๐ Fast: Optimized build size (69KB) for quick installation and execution
- ๐ Cross-Platform: Works on macOS, Windows, and Linux
Prerequisites
Before installing Bragduck CLI, you need:
Node.js โฅ18.0.0
node --version # Should be v18.0.0 or higher
GitHub CLI (gh)
# macOS brew install gh # Windows winget install --id GitHub.cli # Linux # See https://github.com/cli/cli#installation
Authenticate with GitHub CLI
gh auth login
Follow the prompts to authenticate with your GitHub account.
Installation
npm install -g @bragduck/cliUsage
Quick Start
Install GitHub CLI and authenticate:
# Install GitHub CLI (if not already installed) brew install gh # macOS # Authenticate with GitHub gh auth login
Install Bragduck CLI globally:
npm install -g @bragduck/cli
Initialize and authenticate:
bragduck init
This opens your browser for OAuth authentication. Once completed, your credentials are securely stored.
Scan your merged PRs:
cd /path/to/your/github/repo bragduck scanSelect PRs interactively, preview AI-refined brags, and create them.
View your brags:
bragduck list
Commands
bragduck init
Authenticate with Bragduck using OAuth. Opens your browser for authentication and securely stores credentials.
bragduck initbragduck scan
Scan merged GitHub Pull Requests and create brags with AI-powered refinement.
# Scan last 30 days (default, your PRs only)
bragduck scan
# Scan last 60 days
bragduck scan --days 60
# Include all PRs (not just yours)
bragduck scan --all
# Combine options
bragduck scan --days 90 --allOptions:
-d, --days <number>- Number of days to scan (default: 30)-a, --all- Include all PRs, not just current user's
Workflow:
- Validates GitHub repository
- Fetches merged PRs in timeframe (filtered by author unless --all)
- Displays PRs in format:
#123 PR Title [stats] - Interactive checkbox selection
- AI refines selected PRs (using title + description)
- Preview refined brags in table format
- Confirm and create brags
What gets scanned:
- โ Merged Pull Requests only
- โ PR title and description used for context
- โ Aggregate PR statistics (files changed, insertions, deletions)
- โ Filtered by PR author (person who created the PR)
- โ Draft or closed-without-merge PRs excluded
- โ Individual commits not scanned
Requirements:
- Must be in a GitHub repository (GitLab/Bitbucket not supported)
- GitHub CLI must be installed and authenticated (
gh auth login)
bragduck list
List your existing brags with filtering and pagination.
# List all brags (default: 50)
bragduck list
# Show 25 brags
bragduck list --limit 25
# Show next page (skip first 50)
bragduck list --offset 50
# Filter by tags
bragduck list --tags "feature,bugfix"
# Search by keyword
bragduck list --search "implemented authentication"
# Combine filters
bragduck list --tags "feature" --search "API" --limit 20Options:
-l, --limit <number>- Number of brags to display (default: 50)-o, --offset <number>- Number of brags to skip (default: 0)-t, --tags <tags>- Filter by tags (comma-separated)-s, --search <query>- Search brags by keyword
bragduck config
Manage CLI configuration.
# List all configuration values
bragduck config list
# Get specific config value
bragduck config get defaultCommitDays
# Set config value
bragduck config set defaultCommitDays 60
bragduck config set autoVersionCheck falseAvailable Configuration Keys:
defaultCommitDays- Default days to scan (1-365, default: 30)autoVersionCheck- Automatic version checking (true/false, default: true)
Note: The API base URL is set to https://api.bragduck.com by default. You can override it using the API_BASE_URL environment variable if needed for custom deployments.
bragduck logout
Clear stored credentials from your system.
bragduck logoutGlobal Options
Available for all commands:
# Enable debug mode (shows detailed logs)
bragduck --debug <command>
# Skip automatic version check
bragduck --skip-version-check <command>
# Show version
bragduck --version
# Show help
bragduck --helpFeatures
Core Features
- ๐ OAuth Authentication - Secure authentication with local callback server
- ๐ค AI-Powered Refinement - Transforms commit messages into professional achievements
- โ Interactive Selection - Checkbox interface for selecting commits
- ๐ Rich Preview - Table preview of refined brags before creation
- ๐ Smart Filtering - Filter brags by tags and search keywords
- ๐ Pagination Support - Handle large numbers of brags efficiently
Technical Features
- ๐ Secure Storage - Encrypted credential storage with AES-256-GCM
- ๐จ Beautiful UI - Colorful terminal output with spinners and tables
- ๐ Auto-Updates - Automatic version checking with update notifications
- ๐ Debug Mode - Detailed logging for troubleshooting
- โ๏ธ Configurable - Customize API URL, scan days, and more
- ๐ Lightweight - Only 69KB build size
- โจ TypeScript - Fully typed for better IDE support
Platform Support
- โ macOS (Tested)
- โ Windows (Compatible)
- โ Linux (Compatible)
- โ Node.js โฅ18.0.0
- โ GitHub repositories only (GitLab/Bitbucket not supported)
Configuration
Configuration is stored in ~/.config/bragduck/config.json (or equivalent on your OS).
Available Settings
| Key | Type | Default | Description |
|---|---|---|---|
defaultCommitDays |
number | 30 |
Default days to scan (1-365) |
autoVersionCheck |
boolean | true |
Automatic version checking |
API Base URL: The CLI connects to https://api.bragduck.com by default. For custom deployments, set the API_BASE_URL environment variable.
Credentials Storage
Credentials are encrypted and stored at:
- File:
~/.bragduck/credentials.enc - Encryption: AES-256-GCM with machine-specific key derivation
- Access: Only accessible by the CLI on your machine
Troubleshooting
Authentication Issues
Problem: "Not authenticated" error when running commands
Solution:
# Re-authenticate
bragduck logout
bragduck initGit Repository Not Found
Problem: "Not a git repository" error
Solution:
# Make sure you're in a git repository
cd /path/to/your/git/repo
git status # Verify it's a git repo
bragduck scanGitHub CLI Not Authenticated
Problem: "Not authenticated with GitHub" error
Solution:
# Authenticate with GitHub CLI
gh auth login
# Verify authentication
gh auth statusNot a GitHub Repository
Problem: "This repository is not hosted on GitHub" error
Solution:
- Bragduck CLI currently only supports GitHub repositories
- Make sure you're in a repository with a GitHub remote:
git remote -v # Should show github.com URLNo Merged PRs Found
Problem: "No merged PRs found in the last X days"
Solution:
# Increase the scan days
bragduck scan --days 90
# Or include all PRs (not just yours)
bragduck scan --all
# Check if you have merged PRs on GitHub
gh pr list --state merged --limit 10GitHub CLI Not Installed
Problem: "GitHub CLI (gh) is not installed" error
Solution:
# macOS
brew install gh
# Windows
winget install --id GitHub.cli
# Linux - see https://github.com/cli/cli#installation
# Verify installation
gh --versionAPI Connection Issues
Problem: Network or API errors
Solution:
# Check your internet connection
# Try with debug mode to see detailed logs
bragduck --debug scanVersion Check Failures
Problem: Version check taking too long or failing
Solution:
# Skip version check for this run
bragduck --skip-version-check scan
# Or disable it permanently
bragduck config set autoVersionCheck falseEnable Debug Mode
For any issues, enable debug mode to see detailed logs:
bragduck --debug <command>This shows:
- API requests and responses
- Authentication status
- Configuration reads/writes
- Internal operations
Development
Prerequisites
- Node.js โฅ 18.0.0
- npm or yarn
Setup
# Clone the repository
git clone https://github.com/medhatdawoud/bragduck-cli.git
cd bragduck-cli
# Install dependencies
npm install
# Build the project
npm run build
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Lint code
npm run lint
# Format code
npm run formatProject Structure
bragduck-cli/
โโโ src/
โ โโโ commands/ # CLI commands
โ โโโ services/ # Business logic services
โ โโโ ui/ # Terminal UI components
โ โโโ types/ # TypeScript type definitions
โ โโโ utils/ # Utility functions
โ โโโ cli.ts # CLI entry point
โโโ tests/ # Test files
โโโ dist/ # Built files
โโโ package.jsonScripts
| Script | Description |
|---|---|
npm run build |
Build the project with tsup |
npm run dev |
Build in watch mode for development |
npm test |
Run test suite (122 tests) |
npm run test:coverage |
Run tests with coverage report |
npm run test:ui |
Run tests with interactive UI |
npm run lint |
Lint code with ESLint |
npm run lint:fix |
Lint and auto-fix issues |
npm run format |
Format code with Prettier |
npm run typecheck |
Type check without building |
Testing
The project has comprehensive test coverage:
# Run all tests
npm test
# Run with coverage report
npm run test:coverage
# Run specific test file
npx vitest run tests/commands/config.test.ts
# Run in watch mode
npx vitestTest Stats:
- โ 126 tests passing
- ๐ 50% code coverage (focused on core logic)
- ๐งช 8 test suites covering:
- Services (Storage, Git, API, GitHub)
- Commands (Config, List)
- Utilities (Version, Errors)
Architecture
src/
โโโ commands/ # CLI command implementations
โ โโโ init.ts # OAuth authentication flow
โ โโโ scan.ts # Main feature - commit scanning
โ โโโ list.ts # List brags with filtering
โ โโโ config.ts # Configuration management
โ โโโ logout.ts # Credential cleanup
โโโ services/ # Business logic services
โ โโโ auth.service.ts # Authentication & token management
โ โโโ api.service.ts # Backend API client (ofetch)
โ โโโ git.service.ts # Git operations (simple-git)
โ โโโ github.service.ts # GitHub PR fetching (gh CLI)
โ โโโ storage.service.ts # Encrypted credential storage
โโโ ui/ # Terminal UI components
โ โโโ prompts.ts # Interactive prompts (Inquirer)
โ โโโ formatters.ts # Output formatting (chalk, cli-table3)
โ โโโ spinners.ts # Loading indicators (ora)
โโโ utils/ # Utility functions
โ โโโ errors.ts # Custom error classes
โ โโโ logger.ts # Logging utility
โ โโโ version.ts # Version checking & comparison
โ โโโ validators.ts # Input validation
โ โโโ browser.ts # Cross-platform browser opening
โ โโโ oauth-server.ts # Local OAuth callback server
โโโ types/ # TypeScript type definitionsTech Stack
Core:
- TypeScript 5.x
- Node.js โฅ18.0.0
- Commander.js (CLI framework)
Build & Test:
- tsup (TypeScript bundler with esbuild)
- Vitest (testing framework)
- ESLint + Prettier
Dependencies:
- @inquirer/prompts (interactive UI)
- simple-git (Git operations)
- ofetch (HTTP client)
- chalk, ora, cli-table3, boxen (terminal styling)
- conf (configuration management)
External Tools:
- GitHub CLI (gh) - Required for PR scanning
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Quick Contribution Guide
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
npm test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Guidelines
- Write tests for new features
- Follow existing code style (ESLint + Prettier)
- Update documentation for user-facing changes
- Keep commits atomic and well-described
Support
Getting Help
- ๐ Documentation: Read this README and TESTING_GUIDE.md
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
Reporting Issues
When reporting issues, please include:
- Environment: OS, Node.js version, npm version
- Steps to reproduce: Clear steps to reproduce the issue
- Expected behavior: What you expected to happen
- Actual behavior: What actually happened
- Debug output: Run with
--debugflag and include output
Example:
bragduck --debug scanLicense
MIT License - see LICENSE file for details
Acknowledgments
Built with โค๏ธ using:
- Commander.js - CLI framework
- Inquirer.js - Interactive prompts
- simple-git - Git operations
- Vitest - Testing framework
- And many other great open-source projects
Made by Medhat Dawoud | Powered by AI