Skill flagged — suspicious patterns detected

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

Gitlab Workflow

v0.1.1

GitLab 工作流助手,严格遵循团队规范。用于 MR 管理、代码审查、CI/CD 状态查询、分支管理和合并操作。通过 MorphixAI 代理安全访问 GitLab API。

0· 434·1 current·1 all-time
byPaul Leo@paul-leo

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for paul-leo/gitlab-workflow.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Gitlab Workflow" (paul-leo/gitlab-workflow) from ClawHub.
Skill page: https://clawhub.ai/paul-leo/gitlab-workflow
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required env vars: MORPHIXAI_API_KEY
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install gitlab-workflow

ClawHub CLI

Package manager switcher

npx clawhub@latest install gitlab-workflow
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
技能名称/描述(GitLab 工作流、MR 管理、CI/CD 状态等)匹配其所有运行指令与外部交互:使用 mx_gitlab/mx_link(通过 MorphixAI 代理调用 GitLab API)以及在本地用 git 检查变更。仅请求 MORPHIXAI_API_KEY,与通过 MorphixAI 代理访问 GitLab 的目的相符。
Instruction Scope
SKILL.md 明确指示在本机执行文件系统查找(find ~/www)、cd 到本地仓库并运行 git fetch/diff/log 等命令;这是为本地代码审查设定的合理行为,但会访问用户主目录下的仓库和本地 git 元数据——对隐私/机密代码敏感。备用路径使用 MorphixAI 代理直接调用 GitLab API(gitlab.com 的端点),这也与描述一致。
Install Mechanism
注册表中无 install spec(仅说明性技能),这降低了写磁盘/执行任意代码的风险。但文档要求用户安装 openclaw-morphixai 插件并在 morphix.app 上创建 API key/连接 GitLab 帐户;这些是外部步骤,需信任 morphix.app 与该插件。
Credentials
仅声明并使用 MORPHIXAI_API_KEY 作为必需环境变量,合理且与所述代理访问行为相符。技能没有要求直接提供 GitLab 个人访问令牌或其他不相关的凭据。
Persistence & Privilege
技能未设置 always: true,也不要求写入系统或修改其他技能配置。允许模型在有权限时自主调用(默认),这与多数技能行为一致且未放大特权。
Assessment
该技能总体自洽且用途明确,但在安装前请注意: - 使用此技能会要求你提供 MORPHIXAI_API_KEY 并在 morphix.app 上连接 GitLab;确保信任该服务与插件再授予访问权。不要把高权限或长期有效的凭据随意用于测试环境。 - 文档会让代理在本机运行 find、cd、git fetch 等命令以读取本地仓库,这对代码审查是必要的,但也意味着该技能(或被允许运行这些指令的插件)能读取你的用户目录下的仓库与 git 元数据;在敏感环境中慎用或限制工作目录。 - 因为这是 instruction-only(没有代码文件),风险主要来自你安装的 openclaw-morphixai 插件与 morphix.app 的行为:在安装插件前尽量审查插件来源与权限。若想更谨慎,可仅在受控/非生产环境或专用账户下使用,或仅允许通过 MorphixAI 代理访问公开/低敏项目。 - 如果你需要更高保证,请索要或查看 openclaw-morphixai 的实现细节(代码/权限说明)以及 morphix.app 的隐私/凭据使用策略。

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

Runtime requirements

🦊 Clawdis
EnvMORPHIXAI_API_KEY
latestvk97efmkw4swnnhczzdhnmhpy2h82dr6a
434downloads
0stars
2versions
Updated 15h ago
v0.1.1
MIT-0

GitLab 工作流

通过 mx_gitlab 工具管理 GitLab 项目。严格遵守团队规范。

前置条件

  1. 安装插件: openclaw plugins install openclaw-morphixai
  2. 获取 API Key: 访问 morphix.app/api-keys 生成 mk_xxxxxx 密钥
  3. 配置环境变量: export MORPHIXAI_API_KEY="mk_your_key_here"
  4. 链接账号: 访问 morphix.app/connections 链接 GitLab 账号,或通过 mx_link 工具链接(app: gitlab

参数命名规范(重要)

mx_gitlab 工具所有 action 的参数命名:

参数说明
project项目 ID(数字字符串)或路径(group/repo),不是 project_id
mr_iidMR 在项目内的序号,不是 merge_request_iid
pipeline_idPipeline 的全局 ID

description 字段换行格式

⚠️ description 字段必须使用真实换行符,不要使用 \n 字面量字符串。

错误示例(在 GitLab 上会显示为 \n):

description: "改动\n- 修复 bug\n- 新增功能"

正确示例(使用 YAML 多行字符串):

description: |
  ## 改动
  - 修复 bug
  - 新增功能

  ## 测试
  - 单元测试通过

代码审查策略(优先级顺序)

获取 MR 代码变更时,按以下顺序尝试:

✅ 优先:本地 git(推荐)

本地仓库 + git 命令是最可靠的代码审查方式:

  • 无需额外认证(使用本地已有凭证)
  • 无响应体大小限制(任意规模的 diff)
  • 速度快,工具丰富(log、diff、show、blame)

第一步:查找本地仓库路径

# nodes.run — 在本机执行
find ~/www -maxdepth 4 -type d -name '<仓库名>'
# 例:find ~/www -maxdepth 4 -type d -name 'tanka-2b-web'

第二步:fetch 最新数据

# nodes.run — 工作目录切换到仓库路径
cd ~/www/<项目路径> && git fetch origin

第三步:获取 MR 的 commits(需要知道源分支和目标分支)

# 查看 MR 分支间的 commit 列表
git log origin/<target-branch>..origin/<source-branch> --oneline

# 示例(MR: feat/zoom-v2/main → uat-tanka-oh)
git log origin/uat-tanka-oh..origin/feat/zoom-v2/main --oneline

第四步:获取文件变更统计

git diff --stat origin/<target-branch>...origin/<source-branch>
# 示例
git diff --stat origin/uat-tanka-oh...origin/feat/zoom-v2/main

第五步:获取具体文件的 diff

# 全量 diff(大 MR 慎用,建议指定文件)
git diff origin/<target-branch>...origin/<source-branch>

# 指定文件 diff(推荐)
git diff origin/<target-branch>...origin/<source-branch> -- src/path/to/file.ts

# 只看特定目录
git diff origin/<target-branch>...origin/<source-branch> -- src/components/

⚠️ 备用:mx_link proxy(本地无仓库时使用)

当本地不存在仓库时,通过 MorphixAI 代理调用 GitLab API。 注意:大型 MR 的 diff 可能因响应体过大返回 400,此时只能使用本地 git。

mx_link:
  action: proxy
  account_id: <gitlab-account-id>
  method: GET
  url: https://gitlab.com/api/v4/projects/<project-id>/merge_requests/<mr-iid>/changes

可用的 MR 相关 API:

  • GET /api/v4/projects/{id}/merge_requests/{iid} — MR 详情
  • GET /api/v4/projects/{id}/merge_requests/{iid}/changes — 文件变更(可能因大小失败)
  • GET /api/v4/projects/{id}/merge_requests/{iid}/discussions — Discussion 线程
  • GET /api/v4/projects/{id}/merge_requests/{iid}/notes — 评论列表
  • POST /api/v4/projects/{id}/merge_requests/{iid}/notes — 发表评论
  • GET /api/v4/projects/{id}/merge_requests/{iid}/approvals — 审批状态

分支命名

  • feature/JIRA-{ID}-{简短描述} — 新功能
  • fix/JIRA-{ID}-{简短描述} — bug 修复
  • release/v{X.Y.Z} — 发布分支
  • hotfix/v{X.Y.Z}-{描述} — 生产热修复

Commit Message 格式

{Scope}: {action} {description}

  • Scope:模块名(SDK、CLI、Gateway、Bot 等)
  • Actions:add / update / fix / remove / refactor
  • 示例:SDK: add message retry logic
  • 相关改动一个 commit,绝不混杂无关重构

核心操作(mx_gitlab)

查看当前用户

mx_gitlab:
  action: get_user

列出项目

mx_gitlab:
  action: list_projects
  per_page: 10

查看项目详情

mx_gitlab:
  action: get_project
  project: "12345"

MR 操作

列出 MR:

mx_gitlab:
  action: list_merge_requests
  project: "12345"
  state: "opened"

创建 MR:

mx_gitlab:
  action: create_merge_request
  project: "12345"
  source_branch: "feature/JIRA-123-user-login"
  target_branch: "main"
  title: "[JIRA-123] 实现用户登录功能"
  description: "## 改动\n- 实现 JWT 登录\n\n## 测试\n- 单元测试通过\n\n## 关联\n- JIRA-123"

审批 MR:

mx_gitlab:
  action: approve_merge_request
  project: "12345"
  mr_iid: 42

查看单条 MR 详情(含合并就绪状态):

mx_gitlab:
  action: get_merge_request
  project: "12345"
  mr_iid: 42

返回关键字段:

  • detailed_merge_status: mergeable(可合并)/ preparing(准备中,需等待)/ checking(检查中)/ ci_must_pass(CI 未通过)/ not_approved(未获批准)/ discussions_not_resolved(有未解决讨论)
  • has_conflicts: 是否有冲突
  • blocking_discussions_resolved: 阻塞性讨论是否已解决
  • pipeline: 最新 Pipeline 状态

合并前必须先检查状态(重要):

⚠️ 直接调用 merge_merge_request 而不检查状态会导致 500 错误(MR 未就绪时 GitLab 拒绝合并)

# 正确流程:
1. mx_gitlab: get_merge_request → 确认 detailed_merge_status === "mergeable"
2. 如果是 "preparing" 或 "checking" → 等待后重试 get_merge_request
3. 如果是 "ci_must_pass" → CI 未通过,不能合并
4. 如果是 "not_approved" → 需要审批,先 approve_merge_request
5. 确认 mergeable 后 → mx_gitlab: merge_merge_request

合并 MR:

mx_gitlab:
  action: merge_merge_request
  project: "12345"
  mr_iid: 42

merge_merge_request 会自动检查 detailed_merge_status,若 MR 未就绪会直接返回错误和原因,无需手动 pre-check。

更新 MR(设置 Reviewer / Assignee / 标签等):

# 先搜索 GitLab 用户 ID
mx_gitlab:
  action: search_users
  search: "username_or_name"

# 再设置 reviewer(使用搜索结果中的 id 字段)
mx_gitlab:
  action: update_merge_request
  project: "12345"
  mr_iid: 42
  reviewer_ids: [12345]

CI/CD 操作

查看 Pipeline:

mx_gitlab:
  action: list_pipelines
  project: "12345"
  per_page: 5

重试失败的 Pipeline:

mx_gitlab:
  action: retry_pipeline
  project: "12345"
  pipeline_id: 67890

Issue 操作

列出 Issue:

mx_gitlab:
  action: list_issues
  project: "12345"
  state: "opened"

创建 Issue:

mx_gitlab:
  action: create_issue
  project: "12345"
  title: "Bug: 登录页面白屏"
  description: "## 问题\n在 Safari 下登录页面白屏\n\n## 复现\n1. 打开 Safari\n2. 访问 /login"
  labels: ["bug", "frontend"]

分支操作

列出分支:

mx_gitlab:
  action: list_branches
  project: "12345"
  search: "feature/"

MR 创建规范

标题:[JIRA-{ID}] {描述}

描述必须包含:

  1. 改了什么,为什么改
  2. 如何测试
  3. 关联的 Jira Issue 链接

至少指定 1 个 Reviewer。单个 MR 最多 500 行变更。

Code Review 检查清单

Review MR 时,按顺序检查所有项目:

  1. 分支命名符合规范
  2. Commit message 清晰且有 scope
  3. 代码符合团队风格指南
  4. 有对应的测试用例
  5. CI pipeline 全绿
  6. 无未解决的 Discussion
  7. 无硬编码的 secret 或 token
  8. 破坏性变更有文档说明

所有项通过才能 approve。评论具体问题时引用行号。


常见工作流

审查指定 MR(完整流程)

1. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
     → 获取 MR 信息(source_branch, target_branch, mr_iid)

2. nodes.run: find ~/www -maxdepth 4 -type d -name '<repo>'
     → 查找本地仓库路径

3. nodes.run: cd <repo-path> && git fetch origin
     → 更新远端分支数据

4. nodes.run: git log origin/<target>..origin/<source> --oneline
     → 查看 commit 列表

5. nodes.run: git diff --stat origin/<target>...origin/<source>
     → 查看文件变更统计

6. nodes.run: git diff origin/<target>...origin/<source> -- <关键文件>
     → 深入审查关键文件的 diff

7. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 状态

8. mx_gitlab: approve_merge_request, project: "<id>", mr_iid: <iid>(审查通过后)

查看我的待处理 MR

1. mx_gitlab: get_user → 获取用户名
2. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
     → 列出 open 状态的 MR
3. mx_gitlab: list_pipelines, project: "<id>" → 检查 CI 状态

创建并合并 Feature MR

1. mx_gitlab: create_merge_request
     project: "<id>", source_branch: "feature/xxx", target_branch: "main"
     title: "[JIRA-xxx] desc"
2. mx_gitlab: get_merge_request, project: "<id>", mr_iid: <iid>
     → 等待 detailed_merge_status 变为 "mergeable"
     (刚创建后状态为 "preparing",需要等待 GitLab 完成检查)
3. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 通过
4. mx_gitlab: merge_merge_request, project: "<id>", mr_iid: <iid> → 合并

CI 失败处理

1. mx_gitlab: list_pipelines, project: "<id>", status: "failed"
2. mx_gitlab: retry_pipeline, project: "<id>", pipeline_id: <id>

设置 MR Reviewer(完整流程)

1. mx_gitlab: search_users, search: "reviewer_name"
     → 从结果中找到目标用户的 id(数字)
2. mx_gitlab: update_merge_request
     project: "<id>", mr_iid: <iid>, reviewer_ids: [<user_id>]

Pipeline 监控(等待 Pipeline 完成)

⚠️ 心跳(HEARTBEAT)默认间隔 30m,Anthropic setup-token 下为 1h,不适合实时监控。

推荐做法:将监控任务写入 HEARTBEAT.md,心跳触发时自动检查:

## 待监控
- Pipeline #10164 (project: tanka-electron):等待完成,完成后通知用户

或用户要求"立即检查"时,直接调用:

mx_gitlab: list_pipelines, project: "<id>", per_page: 5

对比 pipeline id 和状态,判断是否完成。


注意事项

  • project 参数:数字 ID(如 "12345")或路径(如 "my-group/my-project"),通过 list_projectsget_project 获取
  • mr_iid 是 MR 在项目内的序号(非全局 ID),从 list_merge_requestscreate_merge_request 返回结果中获取
  • account_id 参数通常省略,工具自动检测已链接的 GitLab 账号
  • mx_link proxy 获取 MR diff 可能因响应体过大返回 400,优先使用本地 git

Comments

Loading comments...