Automatically generate professional weekly brag documents from your Linear issues using AI.
A brag document (or brag doc) is a living record of your accomplishments at work. It helps you:
- Track your achievements for performance reviews
- Remember what you've worked on when updating your resume
- Share progress with your manager and team
- Build confidence by seeing what you've accomplished
This tool makes creating brag docs effortless by automatically pulling your work from Linear and summarizing it with AI.
βββββββββββββββ
β Linear β Fetches issues (configurable lookback)
β API β (completed + in progress)
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββββββββββββββ
β Generate Verbose MD β Creates detailed markdown
β (all issue details) β with metadata, comments, etc.
ββββββββββββ¬βββββββββββββββ
β
βΌ
ββββββββββββββββ
β AI Provider β Choose your AI:
β β β’ Ollama (local, free)
β β β’ Claude (cloud, powerful)
ββββββββ¬ββββββββ
β
βΌ
βββββββββββββββββββ
β Summarization β AI condenses verbose details
β β into polished brag doc
βββββββββββ¬ββββββββ
β
βΌ
ββββββββββββββββ
β bragdoc.md β Ready to share!
ββββββββββββββββ
- Node.js 18.0.0 or higher
# Clone the repository
git clone git@github.com:jstanier/bragdoc.git
cd bragdoc
# Install dependencies
npm installThis tool supports three configuration methods with the following priority:
- Command-line arguments (highest priority)
- Config file (
.bragdoc.config.json) - Environment variables (
.envfile)
npm start -- --linear-key lin_api_xxx --claude-key sk-ant-xxxAvailable flags:
--version- Show version number--linear-key <key>- Your Linear API key (required)--claude-key <key>- Your Claude API key (optional)--ai-provider <provider>- AI provider:ollamaorclaude--ollama-url <url>- Ollama API URL (default:http://localhost:11434)--ollama-model <model>- Ollama model name (default:llama2)--output <file>- Output file path (default:bragdoc.md)--days <number>- Number of days to look back (default:7)--dry-run- Fetch and display issues without calling AI (useful for testing)
-
Copy the example config:
cp .bragdoc.config.example.json .bragdoc.config.json
-
Edit
.bragdoc.config.jsonwith your settings:{ "linearApiKey": "lin_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "claudeApiKey": "sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "aiProvider": "ollama", "ollamaUrl": "http://localhost:11434", "ollamaModel": "llama2", "outputFile": "bragdoc.md", "days": 7 } -
Run the tool:
npm start
Note: .bragdoc.config.json is git-ignored by default to protect your API keys.
-
Copy the example env file:
cp .env.example .env
-
Edit
.envwith your settings:LINEAR_API_KEY=your_linear_api_key_here CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OLLAMA_URL=http://localhost:11434 OLLAMA_MODEL=llama2
-
Run the tool:
npm start
- Go to Linear Settings β API
- Click "Create new key"
- Give it a name (e.g., "Brag Doc Generator")
- Copy the key (starts with
lin_api_)
- Sign up at Anthropic Console
- Go to API Keys section
- Create a new API key
- Copy the key (starts with
sk-ant-)
Note: Claude is more powerful but costs money. Ollama is free and runs locally but requires setup.
If you want to use Ollama instead of Claude:
- Install Ollama
- Pull a model:
ollama pull llama2 # or try other models like mistral, codellama, etc. - Make sure Ollama is running:
ollama serve
- Configure the tool to use Ollama (it's the default if no Claude key is provided)
npm startnpm start -- --ai-provider claudenpm start -- --linear-key lin_api_xxx --output ./reports/weekly.mdnpm start -- --ollama-model mistralnpm start -- --days 14npm start -- --dry-runnpm start -- --versionThe tool generates two files:
bragdoc.md- Concise, polished brag document ready to sharebragdoc-verbose.md- Detailed version with all issue metadata (for reference)
Both files are git-ignored by default.
The tool fetches Linear issues that:
- Are assigned to you
- Were updated in the configured time period (default: last 7 days)
- Are either:
- Completed (Done/Completed status)
- In Progress (In Progress/In Review status)
For each issue, it includes:
- Title and identifier
- Description
- State and metadata (priority, estimate, team, labels)
- Comments and discussion
The AI then summarizes this into a professional brag doc format.
Make sure you've provided your Linear API key via one of the three configuration methods.
Either:
- Provide a Claude API key, or
- Switch to Ollama:
--ai-provider ollama
Make sure Ollama is running:
ollama serveThis is normal if you haven't updated any Linear issues recently. Try increasing the lookback period:
npm start -- --days 14The tool automatically retries failed API calls up to 3 times with exponential backoff. If you're still experiencing issues, check your network connection and API key validity.
bragdoc/
βββ index.ts # Main entry point
βββ config.ts # Configuration management
βββ utils.ts # Utility functions (retry logic, etc.)
βββ providers/
β βββ ai-provider.interface.ts # AI provider interface
β βββ ollama-provider.ts # Ollama implementation
β βββ claude-provider.ts # Claude implementation
βββ .bragdoc.config.example.json # Example config file
βββ .env.example # Example environment variables
βββ package.json
βββ tsconfig.json
βββ LICENSE
βββ README.md
Feel free to open issues or submit pull requests!
MIT
Pro tip: Run this tool every week and keep a running collection of brag docs. When performance review time comes around, you'll thank yourself! π