GitLab API Skill
Node.js client for the GitLab REST API (v4). Reads config from ./.env.
Security Rules
- NEVER read, cat, print, grep, or expose the
GITLAB_TOKEN value.
- NEVER use
curl, wget, or any tool to call GitLab API directly. All access MUST go through gitlab-client.
- AI may read/write
.env to manage GITLAB_URL, but GITLAB_TOKEN must be set by the user manually.
Setup
Requires ./.env with:
GITLAB_URL=https://gitlab.fullnine.com.cn
GITLAB_TOKEN=\x3Cyour-personal-access-token>
If token is missing, prompt the user to edit ./.env and create a token at \x3CGITLAB_URL>/-/profile/personal_access_tokens (scope: api).
Install (first time): source ~/.nvm/nvm.sh && npm install
Quick Start
gitlab-client users me # Current user
gitlab-client projects list --owned # My projects
gitlab-client issues list --project 42 --state opened # Project issues
gitlab-client mrs create --project 42 --source-branch feat --target-branch main --title "My MR"
Commands Reference
Format: gitlab-client \x3Cresource> \x3Caction> [id] [--key value ...]
All list actions support --page N --per-page N (default 20, max 100).
Projects
| Action |
Usage |
Options |
| list |
projects list |
--search --owned --membership --visibility |
| get |
projects get \x3Cid> |
|
| search |
projects search "term" |
|
| create |
projects create --name "name" |
--description --visibility --namespace-id --initialize-with-readme |
| edit |
projects edit \x3Cid> |
--name --description --visibility |
| delete |
projects delete \x3Cid> |
|
| fork |
projects fork \x3Cid> |
--namespace |
| members |
projects members \x3Cid> |
|
| hooks |
projects hooks \x3Cid> |
|
Issues
| Action |
Usage |
Options |
| list |
issues list --project \x3Cid> |
--state --labels --milestone --assignee-id --search |
| get |
issues get --project \x3Cid> --iid \x3Ciid> |
|
| create |
issues create --project \x3Cid> --title "T" |
--description --labels --assignee-ids --milestone-id --due-date --confidential |
| edit |
issues edit --project \x3Cid> --iid \x3Ciid> |
--title --description --state-event --labels --assignee-ids |
| close |
issues close --project \x3Cid> --iid \x3Ciid> |
|
| reopen |
issues reopen --project \x3Cid> --iid \x3Ciid> |
|
| delete |
issues delete --project \x3Cid> --iid \x3Ciid> |
|
| notes |
issues notes --project \x3Cid> --iid \x3Ciid> |
|
| add-note |
issues add-note --project \x3Cid> --iid \x3Ciid> --body "text" |
|
Merge Requests
| Action |
Usage |
Options |
| list |
mrs list --project \x3Cid> |
--state --labels --milestone --source-branch --target-branch --search |
| get |
mrs get --project \x3Cid> --iid \x3Ciid> |
|
| create |
mrs create --project \x3Cid> --source-branch "src" --target-branch "tgt" --title "T" |
--description --assignee-id --reviewer-ids --labels --milestone-id --remove-source-branch --squash |
| edit |
mrs edit --project \x3Cid> --iid \x3Ciid> |
--title --description --state-event --labels --assignee-id |
| merge |
mrs merge --project \x3Cid> --iid \x3Ciid> |
--merge-commit-message --squash --should-remove-source-branch |
| changes |
mrs changes --project \x3Cid> --iid \x3Ciid> |
|
| commits |
mrs commits --project \x3Cid> --iid \x3Ciid> |
|
| notes |
mrs notes --project \x3Cid> --iid \x3Ciid> |
|
| add-note |
mrs add-note --project \x3Cid> --iid \x3Ciid> --body "text" |
|
| approve |
mrs approve --project \x3Cid> --iid \x3Ciid> |
|
| pipelines |
mrs pipelines --project \x3Cid> --iid \x3Ciid> |
|
Branches
| Action |
Usage |
Options |
| list |
branches list --project \x3Cid> |
--search |
| get |
branches get --project \x3Cid> --branch "name" |
|
| create |
branches create --project \x3Cid> --branch "name" --ref "main" |
|
| delete |
branches delete --project \x3Cid> --branch "name" |
|
| delete-merged |
branches delete-merged --project \x3Cid> |
|
Commits
| Action |
Usage |
Options |
| list |
commits list --project \x3Cid> |
--ref-name --since --until --path |
| get |
commits get --project \x3Cid> --sha "abc123" |
|
| diff |
commits diff --project \x3Cid> --sha "abc123" |
|
| comments |
commits comments --project \x3Cid> --sha "abc123" |
|
| add-comment |
commits add-comment --project \x3Cid> --sha "abc123" --note "text" |
|
Repository / Files
| Action |
Usage |
Options |
| tree |
repo tree --project \x3Cid> |
--path --ref --recursive |
| file |
repo file --project \x3Cid> --file-path "path" |
--ref |
| raw |
repo raw --project \x3Cid> --file-path "path" |
--ref |
| create-file |
repo create-file --project \x3Cid> --file-path "p" --branch "b" --content "c" --commit-message "m" |
|
| update-file |
repo update-file --project \x3Cid> --file-path "p" --branch "b" --content "c" --commit-message "m" |
|
| delete-file |
repo delete-file --project \x3Cid> --file-path "p" --branch "b" --commit-message "m" |
|
| compare |
repo compare --project \x3Cid> --from "main" --to "feat" |
|
Pipelines
| Action |
Usage |
Options |
| list |
pipelines list --project \x3Cid> |
--status --ref |
| get |
pipelines get --project \x3Cid> --pipeline-id \x3Cpid> |
|
| jobs |
pipelines jobs --project \x3Cid> --pipeline-id \x3Cpid> |
|
| job-log |
pipelines job-log --project \x3Cid> --job-id \x3Cjid> |
|
| retry |
pipelines retry --project \x3Cid> --pipeline-id \x3Cpid> |
|
| cancel |
pipelines cancel --project \x3Cid> --pipeline-id \x3Cpid> |
|
| create |
pipelines create --project \x3Cid> --ref "main" |
--variables "K1=v1,K2=v2" |
Groups
| Action |
Usage |
Options |
| list |
groups list |
--search --owned |
| get |
groups get \x3Cid> |
|
| projects |
groups projects \x3Cid> |
--search |
| members |
groups members \x3Cid> |
|
| issues |
groups issues \x3Cid> |
--state |
| mrs |
groups mrs \x3Cid> |
--state |
Users
| Action |
Usage |
| me |
users me |
| list |
users list [--search "john"] |
| get |
users get \x3Cid> |
| projects |
users projects \x3Cid> |
Labels
| Action |
Usage |
Options |
| list |
labels list --project \x3Cid> |
|
| create |
labels create --project \x3Cid> --name "bug" --color "#FF0000" |
--description |
| edit |
labels edit --project \x3Cid> --name "bug" |
--new-name --color |
| delete |
labels delete --project \x3Cid> --name "bug" |
|
Milestones
| Action |
Usage |
Options |
| list |
milestones list --project \x3Cid> |
--state |
| get |
milestones get --project \x3Cid> --milestone-id \x3Cmid> |
|
| create |
milestones create --project \x3Cid> --title "v1.0" |
--description --due-date --start-date |
| edit |
milestones edit --project \x3Cid> --milestone-id \x3Cmid> |
--title --state-event |
| delete |
milestones delete --project \x3Cid> --milestone-id \x3Cmid> |
|
Tags & Releases
| Action |
Usage |
Options |
| tags list |
tags list --project \x3Cid> |
--search |
| tags create |
tags create --project \x3Cid> --tag-name "v1.0" --ref "main" |
--message |
| tags delete |
tags delete --project \x3Cid> --tag-name "v1.0" |
|
| releases list |
releases list --project \x3Cid> |
|
| releases create |
releases create --project \x3Cid> --tag-name "v1.0" --name "R1" |
--description |
Snippets
| Action |
Usage |
Options |
| list |
snippets list --project \x3Cid> |
|
| get |
snippets get --project \x3Cid> --snippet-id \x3Csid> |
|
| create |
snippets create --project \x3Cid> --title "T" --file-name "f" --content "c" |
--visibility |
Search
| Action |
Usage |
| global |
search global --scope \x3Cscope> --search "query" |
| project |
search project --project \x3Cid> --scope \x3Cscope> --search "query" |
| group |
search group --group \x3Cid> --scope \x3Cscope> --search "query" |
Scopes — global: projects|issues|merge_requests|milestones|snippet_titles|users. Project: issues|merge_requests|milestones|notes|wiki_blobs|commits|blobs. Group: projects|issues|merge_requests|milestones.
Runners
| Action |
Usage |
Options |
| list |
runners list --project \x3Cid> |
|
| all |
runners all |
--type --status |
Webhooks
| Action |
Usage |
Options |
| list |
hooks list --project \x3Cid> |
|
| create |
hooks create --project \x3Cid> --url "url" |
--push-events --merge-requests-events --issues-events --token |
| delete |
hooks delete --project \x3Cid> --hook-id \x3Chid> |
|
Usage Notes
- Auth: Uses
PRIVATE-TOKEN header. Scopes: api (full), read_api (read-only), read_user, read_repository.
- Project ID: Use numeric ID or URL-encoded path (
my-group%2Fmy-project).
- Output: JSON. Pipe to
jq for filtering: gitlab-client projects list | jq '.[].name'
- Dates: ISO 8601 format (
YYYY-MM-DDTHH:MM:SSZ).
- Labels: Comma-separated:
--labels "bug,feature,urgent".
- Errors:
401 unauthorized, 403 forbidden, 404 not found, 422 validation, 429 rate limited.