Skip to content

Skill 清单

GitLab 研发管理场景的全部能力定义,按清海 AI 实际工作方式分层组织。 会话场景概览见 GitLab 研发管理,角色维度的会话旅程见 角色场景


架构总览

GitLab 研发管理的能力分为四层,从 AI 对话侧到系统自动化逐层递进:

分层判断标准

层级判断标准开发产出
A — SkillAI 需要场景指导、权限规则、工具组合策略skills/gitlab/SKILL.md
B — ToolAI 需要调用、tool schema 可自描述scripts/direct/tools/gitlab.py
C — 系统能力不需要 AI 感知,自动运行中间件 / 工具内部逻辑
D — 主动推送非对话触发,由事件或定时驱动事件处理器 / 定时任务

Skill / Tool 汇总

名称描述状态
gitlab SkillGitLab 研发管理场景 AI 对话技能(SKILL.md)✅ 已实现
gitlab_list_projects列出所有可访问的 GitLab 项目✅ 已实现
gitlab_list_commits查询项目提交记录,支持按作者/日期筛选✅ 已实现(⚠️ 多分支覆盖待修复)
gitlab_get_contributions按作者统计代码贡献量(提交数/增删行)✅ 已实现(⚠️ 多分支覆盖待修复)
gitlab_list_mrs查看项目的合并请求列表✅ 已实现
gitlab_get_mr_diff查看 MR 的详情与代码变更✅ 已实现
gitlab_list_pipelines查看项目 CI/CD 流水线状态✅ 已实现
gitlab_get_pipeline_jobs查看流水线 Job 详情,失败 Job 附日志✅ 已实现
gitlab_list_issues查看项目 Issues,支持多维度筛选✅ 已实现
gitlab_get_file查看仓库指定文件内容✅ 已实现
gitlab_get_commit查看提交详情与代码 diff✅ 已实现
gitlab_get_project_summary一次调用返回项目综合概况(提交/MR/Pipeline)✅ 已实现(⚠️ 多分支覆盖待修复)
gitlab_list_branches列出项目所有分支及最近提交时间,供 AI 查询活跃分支🔲 待开发
gitlab_get_team_daily_activity按人聚合每日团队活动🔒 暂缓
gitlab_get_stale_mrs返回所有超时未审核的 MR🔒 暂缓

A 层 — Skill:gitlab 对话技能

设计决策:保持一个 Skill,不拆分

考虑因素结论
触发词重叠"代码"、"GitLab"、"提交"、"MR" 跨场景共用,拆分后 AI 常需同时加载多个
对话跨场景"boss-agi 什么情况"同时涉及提交 + MR + Pipeline
渐进式加载效率一次加载 SKILL.md 即覆盖所有场景

SKILL.md 内部结构

yaml
name: gitlab
trigger: 代码|GitLab|提交|MR|合并请求|仓库|分支|流水线|CI|CD|Issues|代码审查|代码贡献|谁提交|提交记录|Pipeline|构建
description: GitLab 研发管理查询与分析
tools: [见 B 层完整列表]
scope: all

SKILL.md 正文按 6 个业务场景 组织(而非按 API 端点),每个场景说明:

  • 典型用法和触发词
  • 推荐的工具组合和调用顺序
  • 角色权限规则(老板/组长/员工各看什么)
  • 回复格式要求

覆盖的 6 个会话场景

场景核心价值涉及工具
项目状态速览不开 GitLab 就知道项目动态list_projects + list_commits + get_project_summary
MR 生命周期推动 MR review 流程list_mrs + get_mr_diff + get_stale_mrs
Pipeline 与部署CI 红灯第一时间感知list_pipelines + get_pipeline_jobs
团队工作量洞察量化研发产出get_contributions + get_team_daily_activity
代码变更摘要用业务语言翻译 diffget_commit + get_mr_diff
Issues 与文件快速查看 Issue 和文件内容list_issues + get_file

权限规则(嵌入 SKILL.md)

角色 × 场景权限矩阵及越权查询引导流程详见 GitLab 研发管理 — 角色权限与场景覆盖


B 层 — Python Tool 清单

所有工具暴露给 AI,通过 tool_use 调用。分为基础查询工具和场景增强工具。

参数命名约定:工具参数与 GitLab API v4 官方参数名保持一致。 下表中 id 为 GitLab API 路径参数,表示项目 ID 或 URL 编码的 namespace/project 路径。

公共行为

所有工具共享:
- 从配置读取 GitLab URL + Token,verify_ssl=False(自签名证书)
- id 参数支持项目 ID(如 42)或 namespace/project 路径(如 "boss/boss-agi")
- 人名参数接受中文名,内部通过 PersonIndex 解析为 GitLab email/username
- 日期参数接受 YYYY-MM-DD,内部转换为 ISO 8601 格式传递给 API
- 分页统一使用 GitLab 官方 per_page + page 参数
- 返回格式化文本,直接呈现给用户
- 错误时返回可读的错误说明

基础查询工具(10 个,已实现)

1. gitlab_list_projects — 列出项目

列出所有可访问的 GitLab 项目,含项目 ID、路径、默认分支、最近活动时间。

GitLab APIGET /projects
参数必填默认值说明
search按项目名、路径或描述关键词搜索
membershiptrue只显示当前用户参与的项目
simpletrue返回精简字段,减少响应体积
order_bylast_activity_at排序字段(created_at / updated_at / last_activity_at / name
per_page20每页返回数量(最大 100)

服务场景:项目状态速览


2. gitlab_list_commits — 查询提交记录

查询项目的 git 提交记录,支持按分支、作者、日期范围筛选。

GitLab APIGET /projects/:id/repository/commits
参数必填默认值说明
id项目 ID 或路径
ref_name分支名、tag 名或 commit 范围
author按提交作者过滤(姓名或邮箱)
since起始日期 ISO 8601(如 2026-03-01T00:00:00Z
until截止日期 ISO 8601
with_statstrue包含每次提交的代码增删统计
per_page20每页返回数量(最大 100)

服务场景:项目状态速览、团队工作量洞察

关键约束

  • author 官方支持按姓名或邮箱过滤;我们通过 PersonIndex 将中文名解析为 email 后传入
  • author_name 可能含空格(如"阿 远"),优先使用 email 匹配
  • 跨项目查询时需先 list_projects 再逐项目遍历,注意 API 调速

3. gitlab_get_contributions — 代码贡献统计

按作者统计代码贡献量(提交次数 / 新增行数 / 删除行数)。

此工具组合两个 GitLab API,非单一接口映射:

模式GitLab API说明
全量统计GET /projects/:id/repository/contributors返回全部历史贡献(commits / additions / deletions)
日期范围统计GET /projects/:id/repository/commits + 逐条聚合Contributors API 无日期筛选,需逐条 commit 聚合

Contributors API 官方参数

参数必填默认值说明
id项目 ID 或路径
order_bycommits排序字段(name / email / commits
sortasc排序方向(asc / desc

工具封装参数(在官方 API 之上扩展):

参数必填默认值说明
id项目 ID 或路径
author只看某人的贡献(工具层过滤,非 API 参数)
since统计起始日期(触发逐条 commit 聚合模式,非 Contributors API 参数)
until统计截止日期(同上)

服务场景:团队工作量洞察

关键约束

  • Contributors API 官方 sinceuntilauthor 参数,日期范围统计通过 Commits API(with_stats=true)逐条聚合实现
  • CE 18.x 的 Contributors API additions/deletions 返回 0,传日期范围时强制走逐条 commit 聚合

4. gitlab_list_mrs — MR 列表

查看项目的合并请求列表,支持按状态、作者、目标分支筛选。

GitLab APIGET /projects/:id/merge_requests
参数必填默认值说明
id项目 ID 或路径
stateopenedopened / merged / closed / locked / all
author_username按 MR 创建者用户名筛选
reviewer_username按审核人用户名筛选
target_branch按目标分支筛选
source_branch按源分支筛选
created_afterMR 创建时间下限 ISO 8601
created_beforeMR 创建时间上限 ISO 8601
order_bycreated_at排序字段(created_at / updated_at
per_page10每页返回数量(最大 100)

服务场景:MR 生命周期


5. gitlab_get_mr_diff — MR 变更详情

查看指定 MR 的详情、变更文件列表及每个文件的 diff。

GitLab APIGET /projects/:id/merge_requests/:merge_request_iid/changes
参数必填默认值说明
id项目 ID 或路径
merge_request_iidMR 的项目内编号(如 !42 中的 42)

服务场景:MR 生命周期、代码变更摘要

关键约束:diff 内容每个文件最多显示 60 行,超出部分提示省略行数(工具层截断)


6. gitlab_list_pipelines — Pipeline 列表

查看项目的 CI/CD 流水线运行状态。

GitLab APIGET /projects/:id/pipelines
参数必填默认值说明
id项目 ID 或路径
ref按分支或 tag 筛选
statuscreated / waiting_for_resource / preparing / pending / running / success / failed / canceled / skipped / manual / scheduled
username按触发用户筛选
sha按 commit SHA 筛选
order_byid排序字段(id / status / ref / updated_at / user_id
per_page10每页返回数量(最大 100)

服务场景:Pipeline 与部署


7. gitlab_get_pipeline_jobs — Pipeline Job 详情

查看指定流水线中各 Job 的运行状态,失败 Job 自动附上日志末尾。

GitLab APIGET /projects/:id/pipelines/:pipeline_id/jobs
参数必填默认值说明
id项目 ID 或路径
pipeline_id流水线 ID
scopeJob 状态过滤(created / pending / running / failed / success / canceled / skipped / manual),支持数组
include_retriedfalse是否包含重试的 Job

服务场景:Pipeline 与部署

关键约束:失败 Job 自动附上日志末尾(最多 80 行),日志通过 GET /projects/:id/jobs/:job_id/trace 获取(工具层自动追加)


8. gitlab_list_issues — Issues 列表

查看项目的 Issues,支持按状态、指派人、标签、关键词筛选。

GitLab APIGET /projects/:id/issues
参数必填默认值说明
id项目 ID 或路径
stateopenedopened / closed / all
assignee_username按指派人用户名筛选(支持数组)
author_username按创建者用户名筛选
labels按标签筛选,多标签逗号分隔
search按标题和描述关键词搜索
milestone按里程碑筛选
created_after创建时间下限 ISO 8601
created_before创建时间上限 ISO 8601
order_bycreated_at排序字段(created_at / updated_at / priority / due_date
per_page15每页返回数量(最大 100)

服务场景:Issues 与文件


9. gitlab_get_file — 文件内容

查看仓库中指定文件的内容。

GitLab APIGET /projects/:id/repository/files/:file_path/raw
参数必填默认值说明
id项目 ID 或路径
file_path文件路径(需 URL 编码,如 lib%2Fclass%2Erb
ref分支名、tag 名或 commit SHA(API 必填,工具默认 HEAD

服务场景:Issues 与文件

关键约束

  • ref 在 GitLab API 中为必填参数,工具层默认传 HEAD(自动使用默认分支)
  • 文件超过 4000 字符时自动截断(工具层截断)

10. gitlab_get_commit — 提交详情与 diff

查看指定 commit 的详情及每个文件的 diff。

此工具调用两个 GitLab API

步骤GitLab API说明
获取 commit 详情GET /projects/:id/repository/commits/:sha返回提交信息 + stats(默认包含)
获取 commit diffGET /projects/:id/repository/commits/:sha/diff返回每个文件的 diff(独立端点
参数必填默认值说明
id项目 ID 或路径
sha提交 SHA(完整或短 SHA)
include_difftrue是否同时请求 diff 端点(工具层参数,控制是否调用第二个 API)

服务场景:代码变更摘要


场景增强工具(3 个规划,1 个已实现)

解决高频多步编排场景,将 AI 侧的"遍历项目 → 逐条查询 → 聚合"下沉到 Python 层,减少调用次数和出错率。


分支查询工具(1 个,待开发)

14. gitlab_list_branches — 列出分支 🔲 待开发

列出项目所有分支及各分支最近提交时间,供 AI 识别活跃分支后针对性查询。

GitLab APIGET /projects/:id/repository/branches
参数必填默认值说明
project项目 ID 或路径
search按分支名关键词搜索(可选)
active_days90只返回最近 N 天有提交的活跃分支(工具层过滤)

返回内容:分支名、最近提交时间、最近提交人、是否为默认分支、是否 protected

服务场景:项目状态速览、团队工作量洞察

开发背景:修复多分支覆盖问题的前置工具。list_commits / get_contributions / get_project_summary 在不指定分支时需先调此工具获取活跃分支列表,再并发查询各分支并按 SHA 去重合并


场景增强工具(3 个规划,1 个已实现)

11. gitlab_get_project_summary — 项目概况聚合

一次调用返回项目的综合概况。

参数必填默认值说明
project项目 ID 或路径
days3统计最近 N 天

返回内容

  • 最近 N 天提交数 + 活跃贡献者
  • Open MR 数量 + 最近 merged 数量
  • 最新 Pipeline 状态

解决的痛点:"boss-agi 什么情况"原需 AI 自行编排 3 次调用(commits + mrs + pipelines),现在一次搞定

服务场景:项目状态速览


12. gitlab_get_team_daily_activity — 团队每日活动

暂不实现,后续迭代。 当前可通过 AI 组合 list_commits + PersonIndex 实现类似效果。

一次调用返回按人聚合的每日活动。

参数必填默认值说明
date昨天查询日期 YYYY-MM-DD
team团队/组名,不传则全公司

返回内容

  • 按人分组:每人的提交列表(项目 + 标题 + 代码增删)
  • 无提交的团队成员也列出(标注"无提交")

解决的痛点:"昨天大家干了啥"原需 AI 遍历所有项目 → 拉取 commits → PersonIndex 映射 → 按人聚合,容易遗漏或超时

服务场景:项目状态速览、团队工作量洞察

关键约束:自动应用权限过滤(组长只看本组成员、员工只看自己)


13. gitlab_get_stale_mrs — 超时未审 MR

暂不实现,后续迭代。 当前可通过 AI 组合 list_mrs + 时间计算实现类似效果。

一次调用返回所有超时未审核的 MR。

参数必填默认值说明
hours24超过多少小时算超时
project限定项目,不传则全公司扫描

返回内容

  • MR 标题 + 作者 + reviewer + 等待时长
  • 按等待时长倒序

解决的痛点:"有没有卡着的 MR"原需遍历项目 + 筛选 + 计算时差,现在一次返回

服务场景:MR 生命周期


C 层 — Python 系统能力

权限过滤、越权拦截暂不实现,后续迭代。 当前通过 SKILL.md 中的权限规则文字约束 AI 行为。

不暴露给 AI,在 Tool 内部或中间件中自动运行。

能力说明实现位置状态
权限过滤根据用户角色(老板/组长/员工)自动过滤查询结果中的人员数据Tool 返回前的过滤逻辑🔒 暂缓
PersonIndex 集成author_email / username → 中文名自动映射Tool 内部调用 PersonIndex✅ 已实现
CE 18.x 贡献统计Contributors API 返回 0 时自动降级为逐条 commit 聚合get_contributions 内部逻辑✅ 已实现
API 调速控制GitLab CE 默认 10 req/s/user 限流管理HTTP 客户端层⚠️ 依赖默认
越权查询拦截员工查他人、组长查外组个人时返回引导语而非数据Tool 返回前的权限检查🔒 暂缓
GitLab 账号绑定AI 对话中学习并绑定 GitLab 用户名link_platform_identity(已有)✅ 已实现

权限过滤流程


D 层 — 主动推送 🔒 暂缓

主动推送整体暂不实现,后续迭代。 包括定时扫描和 Webhook 事件两类。

非对话触发,由事件或定时任务驱动。复用 B 层 Tool + NotificationEngine + feishu-message。

定时扫描类

推送场景扫描频率触发条件推送对象推送内容
MR 超时催审每 4 小时opened MR 超过 24h 无审核动作reviewer(飞书)"你有一个 MR 待审核已超 24h:{标题},作者:{作者}"
本周无提交提醒周四下午团队成员本周 0 commit组长(飞书)"{姓名} 本周暂无代码提交,需要关注吗?"

实现依赖gitlab_get_stale_mrs / gitlab_get_team_daily_activity + NotificationEngine

Webhook 事件类

推送场景GitLab 事件推送对象推送内容
CI 失败告警Pipeline Hook(status=failed)最后提交者(飞书)"{项目} 的 Pipeline 失败了,失败 Job:{job_name}"
直推 main 提醒Push Hook(branch=main/master)提交者(飞书)"你刚直接 push 到了 {项目} 的 main 分支,团队规范建议走 MR 流程"
MR 被打回MR Hook(action=close)MR 作者(飞书)"你的 MR !{iid} 被 {closer} 打回了"
MR 被合并MR Hook(action=merge)MR 作者(飞书)"你的 MR !{iid} 已被 {merger} 合并 ✓"

实现依赖:GitLab Webhook 接收端点 + 事件解析 + PersonIndex + NotificationEngine

推送约束

约束说明
防骚扰遵循 NotificationEngine 的冷却/时段/每日上限规则
语气员工侧友善引导,不施压("建议"而非"必须")
正向反馈MR 合并通知简短正向,让员工感知闭环
工作时段仅在工作时间推送(9:00-19:00),紧急除外

复用的现有能力

能力本场景用途状态
PersonIndexGitLab username/email → 中文名映射,组长/组员关系查询✅ 已实现
link_platform_identityAI 在对话中学习绑定 GitLab 账号✅ 已实现
feishu-message Skill催审通知、异常告警推送✅ 已实现
NotificationEngine主动通知的防骚扰控制(冷却/时段/每日上限)✅ 已实现
身份识别 + 三级权限自动识别对话用户角色,应用权限规则✅ 已实现

全局约束

约束说明
只读查询不创建、不修改、不删除任何仓库数据
GitLab CE 18.2无 Code Review Analytics、无 Merge Train
SSL 自签名verify_ssl=False
API 调速GitLab CE 默认限流 10 req/s/user
Contributors 缺陷CE 18.x 的 additions/deletions 返回 0,需逐条 commit 聚合代码量
⚠️ 多分支覆盖当前提交统计只覆盖默认分支(master/main),feature/develop/hotfix 等活跃分支数据缺失;修复方案:新增 gitlab_list_branches + 各查询工具并发多分支查询并按 SHA 去重
安全敏感代码审查涉及密钥等敏感内容时需标记风险,发现真实密钥立即提醒

实现路线

Phase 1:被动查询(当前重点)

基础查询工具 + gitlab SKILL.md 场景化重写

#事项状态
1基础查询工具 10 个✅ 已实现
2权限过滤中间件(C 层)🔒 暂缓,后续迭代
3越权查询拦截(C 层)🔒 暂缓,后续迭代
4SKILL.md 按场景重写(A 层)✅ 已实现

Phase 2:场景增强 + 多分支修复

#事项状态
5gitlab_get_project_summary✅ 已实现
6多分支修复:新增 gitlab_list_branches 工具🔲 待开发
7多分支修复gitlab_list_commits — branch 不填时查所有活跃分支并去重🔲 待开发
8多分支修复gitlab_get_contributions — 日期范围模式覆盖所有活跃分支🔲 待开发
9多分支修复gitlab_get_project_summary — 提交统计覆盖所有活跃分支🔲 待开发
10gitlab_get_team_daily_activity🔒 暂缓,后续迭代
11gitlab_get_stale_mrs🔒 暂缓,后续迭代

Phase 3:主动推送 🔒 暂缓

整体暂不实现,后续迭代。

#事项状态
12GitLab Webhook 接收端点🔒 暂缓
13Webhook 事件解析 + 推送逻辑(CI 失败、直推 main、MR 状态变更)🔒 暂缓
14定时扫描任务(MR 超时催审、无提交提醒)🔒 暂缓

Boss-AGI · 超级 AI 企业助理