Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

GitLab API Client

Interact with GitLab API for managing projects, issues, merge requests, branches, pipelines, users, groups, and more. Use when the user needs to perform GitL...

MIT-0 · Free to use, modify, and redistribute. No attribution required.
0 · 13 · 0 current installs · 0 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Pending
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
Name/description (GitLab API client) match the included code (CLI that talks to a GitLab instance). However the registry metadata declares no required environment variables or primary credential, while the code and SKILL.md clearly require a GITLAB_TOKEN and GITLAB_URL in a .env file — an inconsistency that should be resolved.
!
Instruction Scope
SKILL.md instructs the agent may read/write ./ .env to manage GITLAB_URL but also insists NEVER to expose GITLAB_TOKEN. That is contradictory: reading .env will expose the token to the agent unless the agent explicitly avoids reading the token field. The instructions also force all API access through the bundled gitlab-client binary (no curl/wget), which the shipped code enforces. The allowed actions and file references are otherwise within the declared purpose.
Install Mechanism
No installer/downloads or remote installs in the skill bundle. The package is a Node CLI with a single dependency (dotenv) declared in package.json; SKILL.md asks users to run npm install locally. This is proportionate and low-risk compared to remote downloads.
!
Credentials
The skill requires a GitLab URL and a personal access token (GITLAB_TOKEN) to function, but the registry metadata lists no required env or primary credential. Also, the token is expected to be stored in a plaintext .env file under the skill directory — a sensitive secret stored on disk. The SKILL.md attempts to limit token exposure but simultaneously permits reading/writing the same .env file, creating a real risk of accidental exposure or exfiltration by the agent or other code.
Persistence & Privilege
The skill does not request always:true or any special persistent privileges, and it does not appear to modify other skills or global agent configuration. It behaves like a normal user-invoked CLI skill.
What to consider before installing
This package is a genuine-looking GitLab CLI, but pay attention to the token handling before installing: - The skill requires a GITLAB_TOKEN saved in a .env file (in the skill directory), yet the registry metadata claims no credentials — verify the source and why metadata is incomplete. - Storing a personal access token in plaintext .env under the skill folder is a security risk. Prefer using your platform's secret manager or placing the token in a secure file location with restricted permissions. - SKILL.md forbids exposing the token but also allows the agent to read/write .env to manage GITLAB_URL; that contradiction can lead to accidental token leakage. If you install, ensure the agent is not allowed to print or transmit .env contents and consider setting GITLAB_TOKEN manually at runtime or using an env var injected by the platform rather than a file the skill can edit. - Review the bundled gitlab-client.js (present here) to confirm no network calls other than to your GitLab host, and run the tool in an isolated environment first (or with a least-privilege token, e.g., read_api rather than full api scope) to test behavior. If you can, ask the publisher to update registry metadata to declare the required credential and to document secure token handling; that would increase confidence in the package.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.0
Download zip
latestvk97dv43j7ysghntt47xne3aa3n83yt4b

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

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=<your-personal-access-token>

If token is missing, prompt the user to edit ./.env and create a token at <GITLAB_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 <resource> <action> [id] [--key value ...]

All list actions support --page N --per-page N (default 20, max 100).

Projects

ActionUsageOptions
listprojects list--search --owned --membership --visibility
getprojects get <id>
searchprojects search "term"
createprojects create --name "name"--description --visibility --namespace-id --initialize-with-readme
editprojects edit <id>--name --description --visibility
deleteprojects delete <id>
forkprojects fork <id>--namespace
membersprojects members <id>
hooksprojects hooks <id>

Issues

ActionUsageOptions
listissues list --project <id>--state --labels --milestone --assignee-id --search
getissues get --project <id> --iid <iid>
createissues create --project <id> --title "T"--description --labels --assignee-ids --milestone-id --due-date --confidential
editissues edit --project <id> --iid <iid>--title --description --state-event --labels --assignee-ids
closeissues close --project <id> --iid <iid>
reopenissues reopen --project <id> --iid <iid>
deleteissues delete --project <id> --iid <iid>
notesissues notes --project <id> --iid <iid>
add-noteissues add-note --project <id> --iid <iid> --body "text"

Merge Requests

ActionUsageOptions
listmrs list --project <id>--state --labels --milestone --source-branch --target-branch --search
getmrs get --project <id> --iid <iid>
createmrs create --project <id> --source-branch "src" --target-branch "tgt" --title "T"--description --assignee-id --reviewer-ids --labels --milestone-id --remove-source-branch --squash
editmrs edit --project <id> --iid <iid>--title --description --state-event --labels --assignee-id
mergemrs merge --project <id> --iid <iid>--merge-commit-message --squash --should-remove-source-branch
changesmrs changes --project <id> --iid <iid>
commitsmrs commits --project <id> --iid <iid>
notesmrs notes --project <id> --iid <iid>
add-notemrs add-note --project <id> --iid <iid> --body "text"
approvemrs approve --project <id> --iid <iid>
pipelinesmrs pipelines --project <id> --iid <iid>

Branches

ActionUsageOptions
listbranches list --project <id>--search
getbranches get --project <id> --branch "name"
createbranches create --project <id> --branch "name" --ref "main"
deletebranches delete --project <id> --branch "name"
delete-mergedbranches delete-merged --project <id>

Commits

ActionUsageOptions
listcommits list --project <id>--ref-name --since --until --path
getcommits get --project <id> --sha "abc123"
diffcommits diff --project <id> --sha "abc123"
commentscommits comments --project <id> --sha "abc123"
add-commentcommits add-comment --project <id> --sha "abc123" --note "text"

Repository / Files

ActionUsageOptions
treerepo tree --project <id>--path --ref --recursive
filerepo file --project <id> --file-path "path"--ref
rawrepo raw --project <id> --file-path "path"--ref
create-filerepo create-file --project <id> --file-path "p" --branch "b" --content "c" --commit-message "m"
update-filerepo update-file --project <id> --file-path "p" --branch "b" --content "c" --commit-message "m"
delete-filerepo delete-file --project <id> --file-path "p" --branch "b" --commit-message "m"
comparerepo compare --project <id> --from "main" --to "feat"

Pipelines

ActionUsageOptions
listpipelines list --project <id>--status --ref
getpipelines get --project <id> --pipeline-id <pid>
jobspipelines jobs --project <id> --pipeline-id <pid>
job-logpipelines job-log --project <id> --job-id <jid>
retrypipelines retry --project <id> --pipeline-id <pid>
cancelpipelines cancel --project <id> --pipeline-id <pid>
createpipelines create --project <id> --ref "main"--variables "K1=v1,K2=v2"

Groups

ActionUsageOptions
listgroups list--search --owned
getgroups get <id>
projectsgroups projects <id>--search
membersgroups members <id>
issuesgroups issues <id>--state
mrsgroups mrs <id>--state

Users

ActionUsage
meusers me
listusers list [--search "john"]
getusers get <id>
projectsusers projects <id>

Labels

ActionUsageOptions
listlabels list --project <id>
createlabels create --project <id> --name "bug" --color "#FF0000"--description
editlabels edit --project <id> --name "bug"--new-name --color
deletelabels delete --project <id> --name "bug"

Milestones

ActionUsageOptions
listmilestones list --project <id>--state
getmilestones get --project <id> --milestone-id <mid>
createmilestones create --project <id> --title "v1.0"--description --due-date --start-date
editmilestones edit --project <id> --milestone-id <mid>--title --state-event
deletemilestones delete --project <id> --milestone-id <mid>

Tags & Releases

ActionUsageOptions
tags listtags list --project <id>--search
tags createtags create --project <id> --tag-name "v1.0" --ref "main"--message
tags deletetags delete --project <id> --tag-name "v1.0"
releases listreleases list --project <id>
releases createreleases create --project <id> --tag-name "v1.0" --name "R1"--description

Snippets

ActionUsageOptions
listsnippets list --project <id>
getsnippets get --project <id> --snippet-id <sid>
createsnippets create --project <id> --title "T" --file-name "f" --content "c"--visibility

Search

ActionUsage
globalsearch global --scope <scope> --search "query"
projectsearch project --project <id> --scope <scope> --search "query"
groupsearch group --group <id> --scope <scope> --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

ActionUsageOptions
listrunners list --project <id>
allrunners all--type --status

Webhooks

ActionUsageOptions
listhooks list --project <id>
createhooks create --project <id> --url "url"--push-events --merge-requests-events --issues-events --token
deletehooks delete --project <id> --hook-id <hid>

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.

Files

4 total
Select a file
Select a file to preview.

Comments

Loading comments…