A TypeScript CLI tool that generates professional resume content by analyzing:
- Git commits from local repositories
- GitHub Pull Requests for enhanced context
- Slack messages for collaboration insights
- AI-powered synthesis using OpenAI or Anthropic
⚠️ Note: This was entirely built with Claude Opus 4.5 as an experiment to work with AI and what I can manage to do with them.
| Category | Technology |
|---|---|
| Runtime | Bun |
| Language | TypeScript |
| CLI Framework | Commander.js |
| Interactive Prompts | @clack/prompts |
| Linting | oxlint |
| Formatting | oxfmt |
| GitHub API | @octokit/rest |
| Slack API | @slack/web-api |
| Language Detection | linguist-languages |
See DEV_NOTES.md for technical decisions and architecture details.
- Local Git Analysis: Extract commits, code changes, and technical contributions
- GitHub Integration: Fetch PR descriptions and project context (including Enterprise)
- Slack Integration: Analyze communication patterns and collaboration (via Slack AI or API)
- AI Resume Generation: Synthesize data into professional resume content
- Template Support: Use your existing resume style as a template
- Interactive Configuration: Beautiful setup process with @clack/prompts
# Clone the repository
git clone <repository-url>
cd resume-helper
# Install dependencies
bun install
# Build the CLI
bun run build-
Initialize configuration:
bun run dev init # or after building: node dist/index.js init -
Follow the interactive setup:
- Add repository paths
- Configure author emails
- Set up API tokens (GitHub, Slack, AI)
- Optionally provide a resume template
# Generate resume for a specific period
bun run dev generate --company "Acme Corp" --start-date 2024-01-01 --end-date 2024-12-31 --output resume-acme.md
# Use a custom template
bun run dev generate --template ./my-resume-style.md --output resume.md
# Include Slack AI context (see Slack AI Integration below)
bun run dev generate --slack-context slack-context.txt --output resume.mdExtract collaboration insights from Slack without needing API tokens or admin approval:
# 1. Generate a prompt template for Slack AI
bun run dev slack-prompt --name "Your Name" --start-date 2024-01-01 --end-date 2024-12-31
# 2. Copy the generated prompt and paste it into a Slack AI conversation
# 3. Save Slack AI's response to a file (e.g., slack-context.txt)
# 4. Include the context when generating your resume
bun run dev generate --slack-context slack-context.txt --output resume.mdThis approach:
- Requires no Slack API token or app installation
- Leverages Slack AI's access to your conversations
- Extracts project discussions, cross-team collaboration, leadership moments, and impact statements
# Show current configuration
bun run dev config --show
# Add repository or email
bun run dev config --add-repo /path/to/project
bun run dev config --add-email your.email@company.com
# Update tokens
bun run dev config --set-github-token <token>
bun run dev config --set-slack-token <token>The CLI stores configuration in .resume-cli.json in your current directory.
You can customize limits in your .resume-cli.json file:
{
"maxCommits": 100,
"minimumCommitChanges": 3
}| Option | Default | Description |
|---|---|---|
maxCommits |
100 | Maximum commits to include per repository (also limits PRs shown) |
minimumCommitChanges |
3 | Minimum lines changed to include a commit |
-
Token: Classic Personal Access Token with
reposcope-
⚠️ Important: Fine-grained PATs are NOT supported on GitHub Enterprise Server - For GitHub.com public repos only:
public_reposcope is sufficient - For private repos or GitHub Enterprise:
reposcope is required
-
- Enterprise: Supports GitHub Enterprise Server URLs (auto-detected from repository remote)
- Rate Limits: 5,000 requests/hour (authenticated)
- Data: Commits, PR descriptions, repository metadata
- Go to GitHub → Settings → Developer Settings → Personal Access Tokens → Tokens (classic)
- Click "Generate new token" → "Generate new token (classic)"
- Select the
reposcope (orpublic_repofor public repos only) - For GitHub Enterprise, create the token on your Enterprise instance (e.g.,
https://github.yourcompany.com/settings/tokens)
Use Slack's built-in AI to extract and summarize your contributions. No API token or admin approval needed. The CLI will generate a prompt to give to the Slack AI, and the result can be given back to the CLI.
See Slack AI Integration for the full workflow.
- TanStack AI: Unified interface across providers
- Supported: OpenAI GPT, Anthropic Claude
- Usage: Synthesizes technical data into resume content
src/
├── commands/ # CLI command implementations
│ ├── init.ts # Interactive configuration
│ ├── generate.ts # Resume generation
│ ├── test.ts # Service testing
│ └── config.ts # Configuration management
├── services/ # API and data services
│ ├── git.ts # Local git analysis
│ ├── github.ts # GitHub API integration
│ ├── slack.ts # Slack API integration
│ └── ai.ts # AI resume generation
├── utils/ # Utility functions
│ └── config.ts # Configuration management
├── types/ # TypeScript definitions
│ └── index.ts # Type definitions
└── index.ts # CLI entry point
Completed:
- Project setup and CLI framework
- Interactive configuration with @clack/prompts
- TypeScript structure and type definitions
- All commands (init, generate, test, config)
- Git analysis service with technology detection
- GitHub API integration (including Enterprise)
- Slack API integration
- AI prompt generation (export for manual AI use)
- Direct AI generation with OpenAI/Anthropic
- Resume template support
- Multi-language support
- Token estimation and large prompt warnings
This is a proof-of-concept CLI tool. Feel free to:
- Fork the repository
- Create feature branches
- Submit pull requests
- Report issues
The CLI is not automatically released when commits are pushed on the main branch. You have to:
- Update the
package.jsonversion, likevX.Y.Z; - Create a commit with a message:
git commit -am "release vX.Y.Z"; - Create a tag containing the corresponding version:
git tag vX.Y.Z; - Push the commit:
git push origin main --tags; - Then the release workflow will kick off.
MIT License - see LICENSE file for details