Convert GitLab profile data to Markdown for LLM analysis
Project description
gitlab2md
Convert GitLab profile data to clean Markdown files - the ideal format for LLM analysis.
Why Markdown?
Markdown is the lingua franca of AI tools. Once your GitLab data is in .md format, you can:
- Upload to NotebookLM and have conversations about your development history
- Use Claude Projects to analyze patterns across your contributions
- Feed to Obsidian with AI plugins for a personal developer knowledge base
- Run local LLMs (Ollama, LM Studio) for completely private analysis
Example Prompts
Once your GitLab data is in an LLM, try asking:
| Question | Data Used |
|---|---|
| "What technologies do I work with most?" | projects.md, merge_requests.md |
| "Summarize my contribution patterns" | events.md, merge_requests.md |
| "What open source projects have I contributed to?" | contributed_projects.md |
| "Analyze my merge request review patterns" | merge_requests.md |
| "What groups am I most active in?" | groups.md, memberships.md |
| "Generate a developer portfolio summary" | All files |
| "What are my most starred projects?" | starred.md |
Installation
Recommended (using pipx - installs in isolated environment):
pipx install gitlab2md
Or with pip (in a virtual environment):
pip install gitlab2md
Note: On modern Linux systems (Debian, Ubuntu 23.04+, Fedora), use
pipxto avoid the "externally-managed-environment" error.
Prerequisites
- GitLab CLI (glab) installed and authenticated
- Python 3.13+
Installing glab
# macOS
brew install glab
# Ubuntu/Debian
sudo apt install glab
# Or via pipx
pipx install glab
Then authenticate:
glab auth login
Usage
# Use authenticated user
gitlab2md
# Specify a username
gitlab2md juanmanueldaza
# Include group contributions
gitlab2md juanmanueldaza --groups colmena-project,another-group
# Custom output directory
gitlab2md juanmanueldaza -o ./my_gitlab_data
Then drag the output folder into your favorite AI tool.
Options
| Option | Description | Default |
|---|---|---|
username |
GitLab username (optional, uses authenticated user if omitted) | - |
-o, --output |
Output directory | gitlab_export |
--groups |
Comma-separated list of groups to include contributions from | - |
LLM Tools That Work Great With This
| Tool | Type | Best For |
|---|---|---|
| NotebookLM | Cloud | Conversational analysis, audio summaries |
| Claude Projects | Cloud | Deep analysis, long context |
| ChatGPT | Cloud | General analysis, quick insights |
| Obsidian + AI plugins | Local | Personal knowledge base, linked notes |
| Open Notebook | Local/Cloud | 16+ AI models, open source |
| Ollama | Local | Private, offline analysis |
Output Files
Creates 13 markdown files in the output directory:
Profile & Projects
profile.md- User profile (name, bio, job title, organization, website)projects.md- Owned projects with stars, forks, visibility, topicsmember_projects.md- Projects where user is a member (excludes own)contributed_projects.md- Projects user has contributed to
Activity & Contributions
merge_requests.md- MR history with state, labels, and status breakdownissues.md- Issues created with state and labelsevents.md- Recent activity summary and action typesgroups.md- Group memberships and commit contributions
Network & Social
starred.md- Starred projectsmemberships.md- Groups and projects with access levelssnippets.md- Code snippets with visibility
Security
ssh_keys.md- SSH key titles and expiration datesgpg_keys.md- GPG key IDs and creation dates
Architecture
This project follows SOLID principles for maintainability:
- Single Responsibility: Each parser/formatter handles one data section
- Open/Closed: Add new parsers via
@register_parserdecorator without modifying core code - Liskov Substitution: All parsers implement the
SectionParserprotocol - Interface Segregation: Focused protocols for extractors, parsers, formatters, and writers
- Dependency Inversion: Converter depends on abstractions, not implementations
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
GPL-2.0 - see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gitlab2md-0.1.0.tar.gz.
File metadata
- Download URL: gitlab2md-0.1.0.tar.gz
- Upload date:
- Size: 47.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b52ca1abad65617a806476be783b0e0083bf2d5422ad0801da6752cac1f0d29
|
|
| MD5 |
d7295bca0ad83b1a5eff2933c05d2c59
|
|
| BLAKE2b-256 |
0ef57b1256ea2f8e74b2bba1b4e083da7660d5f409deb6bd7e555aff96b58c2e
|
Provenance
The following attestation bundles were made for gitlab2md-0.1.0.tar.gz:
Publisher:
publish.yml on juanmanueldaza/gitlab2md
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gitlab2md-0.1.0.tar.gz -
Subject digest:
3b52ca1abad65617a806476be783b0e0083bf2d5422ad0801da6752cac1f0d29 - Sigstore transparency entry: 844986420
- Sigstore integration time:
-
Permalink:
juanmanueldaza/gitlab2md@ca14d9c147f318647ec2a912b3893e16d8c78d64 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/juanmanueldaza
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ca14d9c147f318647ec2a912b3893e16d8c78d64 -
Trigger Event:
release
-
Statement type:
File details
Details for the file gitlab2md-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gitlab2md-0.1.0-py3-none-any.whl
- Upload date:
- Size: 41.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c75916dc899fb1b7e64737f79d7da555332ff2abf33028f2a6dc350b261060
|
|
| MD5 |
f543e4a3b6ffbc44e0d8359677525e4c
|
|
| BLAKE2b-256 |
4c30f882f3f81c57fb58375fbf02b735c44e101f0926cfa5e992771689617a1a
|
Provenance
The following attestation bundles were made for gitlab2md-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on juanmanueldaza/gitlab2md
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gitlab2md-0.1.0-py3-none-any.whl -
Subject digest:
82c75916dc899fb1b7e64737f79d7da555332ff2abf33028f2a6dc350b261060 - Sigstore transparency entry: 844986429
- Sigstore integration time:
-
Permalink:
juanmanueldaza/gitlab2md@ca14d9c147f318647ec2a912b3893e16d8c78d64 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/juanmanueldaza
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ca14d9c147f318647ec2a912b3893e16d8c78d64 -
Trigger Event:
release
-
Statement type: