Maintain the GitLab agent profile page and static contribution performance chart.
---
name: gitlab-agent-profile
description: Maintain the GitLab agent profile page and static contribution performance chart.
metadata: { "openclaw": { "requires": { "bins": ["glab", "python3"] }, "primaryEnv": "GITLAB_TOKEN" } }
---
# GitLab Agent Profile Skill
Use this skill to keep the GitLab agent profile assets current with monthly contribution performance statistics.
## Goal
Maintain static profile assets for the agent with:
* Static SVG and WebP chart files showing the last 12 months of merged merge requests, owner direct commits to `main`, and contribution score.
* Categories for owner-authored work, agent-authored work with owner review/merge, agent-authored work without owner review/merge, and the combined total.
* A legend and bar labels with the exact counts behind the chart.
* A JSON proof file with the counted records sorted by date descending.
## Daily update routine
Create or keep a daily cron that runs the bundled script:
```bash
{baseDir}/scripts/update-profile-stats.py
```
Recommended cron payload:
```text
Read the gitlab-agent-profile skill, run its `{baseDir}/scripts/update-profile-stats.py` helper, and commit/push the generated image/proof assets if they changed.
```
## Inputs
The script accepts these environment variables:
* `GITLAB_AGENT_PROFILE_CHART_OUTPUT`: Static SVG chart file to update. Defaults to `assets/gitlab-agent-profile.svg`.
* `GITLAB_AGENT_PROFILE_WEBP_OUTPUT`: Static WebP chart file to update. Defaults to `assets/gitlab-agent-profile.webp`.
* `GITLAB_AGENT_PROFILE_RECORDS_OUTPUT`: JSON proof file to update. Defaults to `assets/gitlab-agent-profile-records.json`.
* `GITLAB_AGENT_PROFILE_WORKSPACE`: Workspace root used for relative output paths. Defaults to the current directory.
* `GITLAB_AGENT_PROFILE_ROOT_GROUP`: Root group used to expand short project names. Defaults to `xrow-public`.
* `GITLAB_AGENT_PROFILE_PROJECTS`: Space, comma, or newline separated project paths or project names. Defaults to `helm-openclaw ci-tools claw-support`.
* `GITLAB_AGENT_PROFILE_AGENT_USERNAME`: Agent username. Defaults to the authenticated `glab` user.
* `GITLAB_AGENT_PROFILE_OWNER_USERNAME`: Owner username. Defaults to `xrow`.
* `GITLAB_AGENT_PROFILE_MONTHS`: Number of months to render. Defaults to `12`.
Relative output values are resolved from `GITLAB_AGENT_PROFILE_WORKSPACE`.
Project names without `/` are expanded with `GITLAB_AGENT_PROFILE_ROOT_GROUP`, so `ci-tools` becomes `xrow-public/ci-tools`.
## Classification
For merged merge requests:
* Owner: author username matches `GITLAB_AGENT_PROFILE_OWNER_USERNAME`.
* Agent + reviewer: author username matches `GITLAB_AGENT_PROFILE_AGENT_USERNAME` and the owner is a reviewer or merge user.
* Agent (autonomous): author username matches `GITLAB_AGENT_PROFILE_AGENT_USERNAME` and the owner is neither reviewer nor merge user.
* Merged total: sum of the three MR categories.
* Direct owner commits: commits on `main` authored or committed by the owner that are not known MR merge/squash commits and do not start with `skip:`, `skip(...)`, `chore:`, `chore(...)`, `docs:`, `docs(...)`, or `revert`.
* MRs with `type::fix` or `type::feature` labels count toward MR totals and contribution score.
* If a merged MR has no type label, a Conventional Commit title beginning with `fix:`/`fix(...)` or `feat:`/`feat(...)` is used as a fallback type.
* MRs beginning with `skip:`, `skip(...)`, `chore:`, `chore(...)`, `docs:`, or `docs(...)` are never counted, even if they have a counted type label.
* MR contribution score: each counted MR starts at `1` point and is multiplied by its size factor.
* Size factor: `size::small` = `1`, `size::medium` = `2`, `size::large` = `3`, `size::xlarge` = `5`; missing size labels default to `1`.
* Direct owner commits count `0.2` point each.
The script ignores merge requests authored by other users.
don't have the plugin yet? install it then click "run inline in claude" again.