workspace/skills/gitlab-devops/SKILL.md
GitLab DevOps operations — issues, merge requests, CI/CD pipelines, repository browsing, labels, milestones, releases, and wiki management. Use when querying GitLab project status, monitoring pipeline executions, browsing repository files, creating issues for network findings, opening merge requests for config changes, or managing project metadata.
npx skillsauth add automateyournetwork/netclaw gitlab-devopsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Never execute write operations (create, update, delete, merge) without explicit operator confirmation. All mutating actions — creating issues, merging MRs, triggering pipelines, deleting labels — require human-in-the-loop approval before invocation (Constitution XIV). Always observe current state before making changes (Constitution II: Read-Before-Write).
This skill uses tools provided by the gitlab-mcp server (@zereight/mcp-gitlab), a community MCP server with 98+ tools for GitLab operations. The server is spawned locally via npx -y @zereight/mcp-gitlab and communicates over stdio transport.
| Variable | Required | Description |
|----------|----------|-------------|
| GITLAB_PERSONAL_ACCESS_TOKEN | Yes | GitLab PAT with api or read_api scope |
| GITLAB_API_URL | No | GitLab API URL (default: https://gitlab.com) |
| GITLAB_READ_ONLY_MODE | No | Restrict to read-only tools (default: false) |
Use this workflow to search, list, and inspect GitLab issues and merge requests for network project tracking.
Find the target project by name or keyword:
Tool: search_projects
Parameters: { "query": "network-automation" }
Or list all accessible projects:
Tool: list_projects
Parameters: { "per_page": 20 }
Query issues with filters for state, labels, assignee, or milestone:
Tool: list_issues
Parameters: {
"project_id": "network-team/network-automation",
"state": "opened",
"labels": "outage",
"assignee_username": "jcapobianco"
}
Retrieve full details for a specific issue:
Tool: get_issue
Parameters: {
"project_id": "network-team/network-automation",
"issue_iid": 42
}
List the discussion thread on an issue:
Tool: list_issue_comments
Parameters: {
"project_id": "network-team/network-automation",
"issue_iid": 42
}
Query merge requests with filters:
Tool: list_merge_requests
Parameters: {
"project_id": "network-team/infra-configs",
"state": "opened",
"labels": "needs-review"
}
Retrieve MR details including diff stats and approval status:
Tool: get_merge_request
Parameters: {
"project_id": "network-team/infra-configs",
"merge_request_iid": 15
}
Use this workflow to monitor pipeline status, inspect job details, and troubleshoot failures.
View pipeline executions for a project:
Tool: list_pipelines
Parameters: {
"project_id": "network-team/network-configs",
"status": "failed",
"ref": "main"
}
Retrieve details for a specific pipeline:
Tool: get_pipeline
Parameters: {
"project_id": "network-team/network-configs",
"pipeline_id": 123
}
Inspect jobs within a pipeline:
Tool: get_pipeline_jobs
Parameters: {
"project_id": "network-team/network-configs",
"pipeline_id": 123
}
Retrieve console output for troubleshooting:
Tool: get_pipeline_job_log
Parameters: {
"project_id": "network-team/network-configs",
"job_id": 456
}
Requires operator confirmation. Skipped in read-only mode.
Tool: create_pipeline
Parameters: {
"project_id": "network-team/network-configs",
"ref": "feature/bgp-tuning"
}
Tool: retry_pipeline
Parameters: {
"project_id": "network-team/network-configs",
"pipeline_id": 123
}
Tool: cancel_pipeline
Parameters: {
"project_id": "network-team/network-configs",
"pipeline_id": 124
}
Use this workflow to inspect repository structure, read file contents, and review change history.
View the directory structure:
Tool: list_repository_tree
Parameters: {
"project_id": "network-team/network-configs",
"path": "ansible/",
"ref": "main"
}
Read a specific file:
Tool: get_file_content
Parameters: {
"project_id": "network-team/network-configs",
"file_path": "ansible/site.yml",
"ref": "main"
}
View commit history with filters:
Tool: list_commits
Parameters: {
"project_id": "network-team/network-configs",
"ref_name": "main",
"path": "ansible/",
"since": "2026-03-01T00:00:00Z"
}
Inspect a specific commit with diff:
Tool: get_commit
Parameters: {
"project_id": "network-team/network-configs",
"sha": "abc123def"
}
Review differences between branches:
Tool: compare_branches
Parameters: {
"project_id": "network-team/network-configs",
"from": "main",
"to": "feature/bgp-tuning"
}
All write operations require operator confirmation. Skipped in read-only mode.
get_projectTool: create_issue
Parameters: {
"project_id": "network-team/network-automation",
"title": "BGP peer flapping on router-01",
"description": "Router-01 BGP peer to router-02 (192.168.1.1) is flapping every 30 seconds. Hold timer expiry detected. Investigate and resolve.",
"labels": "outage,bgp,priority::critical",
"assignee_ids": [42]
}
get_issueTool: update_issue
Parameters: {
"project_id": "network-team/network-automation",
"issue_iid": 42,
"state_event": "close",
"labels": "outage,bgp,resolved"
}
Tool: add_issue_comment
Parameters: {
"project_id": "network-team/network-automation",
"issue_iid": 42,
"body": "Root cause identified: BGP hold timer set to 10s, peer timer at 30s. Aligned timers to 90/30. Peering stable for 15 minutes."
}
compare_branchesTool: create_merge_request
Parameters: {
"project_id": "network-team/infra-configs",
"title": "fix: align BGP hold timers on router-01",
"source_branch": "fix/bgp-timer-alignment",
"target_branch": "main",
"description": "Aligns BGP hold timer from 10s to 90s on router-01 peer to router-02.\n\nServiceNow CR: CHG0012345\nGAIT Session: gait-abc123"
}
get_merge_requestTool: update_merge_request
Parameters: {
"project_id": "network-team/infra-configs",
"merge_request_iid": 15,
"labels": "approved,ready-to-merge"
}
Tool: add_merge_request_comment
Parameters: {
"project_id": "network-team/infra-configs",
"merge_request_iid": 15,
"body": "Verified in CML lab. BGP peering stable after timer change. Ready to merge."
}
get_merge_requestTool: merge_merge_request
Parameters: {
"project_id": "network-team/infra-configs",
"merge_request_iid": 15,
"squash": true,
"should_remove_source_branch": true
}
Tool: list_labels
Parameters: { "project_id": "network-team/network-automation" }
Tool: create_label (requires confirmation, skipped in read-only mode)
Parameters: {
"project_id": "network-team/network-automation",
"name": "critical-infrastructure",
"color": "#FF0000"
}
Tool: list_milestones
Parameters: { "project_id": "network-team/network-automation" }
Tool: create_milestone (requires confirmation, skipped in read-only mode)
Parameters: {
"project_id": "network-team/network-automation",
"title": "Q2 2026 Network Refresh",
"due_date": "2026-06-30"
}
Tool: list_releases
Parameters: { "project_id": "network-team/network-configs" }
Tool: get_release
Parameters: {
"project_id": "network-team/network-configs",
"tag_name": "v2.1.0"
}
Tool: create_release (requires confirmation, skipped in read-only mode)
Parameters: {
"project_id": "network-team/network-configs",
"tag_name": "v2.2.0",
"name": "Network Configs v2.2.0",
"description": "BGP timer alignment and OSPF area optimization"
}
Tool: list_wiki_pages
Parameters: { "project_id": "network-team/network-automation" }
Tool: get_wiki_page
Parameters: {
"project_id": "network-team/network-automation",
"slug": "bgp-runbook"
}
Tool: create_wiki_page (requires confirmation, skipped in read-only mode)
Parameters: {
"project_id": "network-team/network-automation",
"title": "Incident Postmortem: Router-01 BGP Flap",
"content": "## Summary\n\nBGP peering between router-01 and router-02 was flapping..."
}
All GitLab interactions MUST be logged to the GAIT audit trail via gait_mcp tools at skill invocation level.
For each operation, log:
Tool: gait_log
Parameters: {
"action": "gitlab.list_issues",
"details": "Queried open issues in network-automation with label 'outage'",
"result": "Returned 7 open issues"
}
For write operations, include the confirmation step:
Tool: gait_log
Parameters: {
"action": "gitlab.create_issue",
"details": "Created issue 'BGP peer flapping on router-01' in network-automation. Operator confirmed.",
"result": "Issue #43 created at https://gitlab.com/network-team/network-automation/-/issues/43"
}
When GITLAB_READ_ONLY_MODE=true, the skill restricts to observation-only operations:
Allowed tools (read-only):
list_issues, get_issue, list_issue_commentslist_merge_requests, get_merge_requestlist_pipelines, get_pipeline, get_pipeline_jobs, get_pipeline_job_loglist_repository_tree, get_file_content, list_commits, get_commit, compare_brancheslist_projects, get_project, search_projectslist_labels, list_milestones, list_releases, get_releaselist_wiki_pages, get_wiki_pageBlocked tools (write operations — skipped with message):
create_issue, update_issue, add_issue_commentcreate_merge_request, update_merge_request, merge_merge_request, add_merge_request_commentcreate_pipeline, retry_pipeline, cancel_pipelinecreate_label, update_label, delete_labelcreate_milestone, update_milestonecreate_releasecreate_wiki_page, update_wiki_page, delete_wiki_pageWhen a write tool is requested in read-only mode, respond: "GitLab read-only mode is enabled (GITLAB_READ_ONLY_MODE=true). Write operations are disabled. Contact your administrator to enable write access."
testing
Human-in-the-loop escalation via HumanRail — route low-confidence agent decisions, pre-destructive operation approvals, and ambiguous incident tickets to real human engineers. Human answers are verified and returned as structured output. Workers are paid via Lightning Network. Use when the agent is uncertain, when a destructive change needs explicit human sign-off beyond a ServiceNow CR, or when an ambiguous ticket requires human triage before automated handling.
testing
Manage EVE-NG node lifecycle. Use when listing nodes, checking runtime state, creating or deleting nodes, starting or stopping nodes or whole labs, verifying node details, or wiping node NVRAM back to factory defaults.
development
Manage EVE-NG labs and platform inventory. Use when listing labs, checking lab metadata, creating or deleting labs, importing or exporting lab archives, checking EVE-NG health or auth, or verifying available node images before build work.
tools
Execute live CLI commands on running EVE-NG nodes over telnet console. Use when running show commands, making live config changes, verifying protocol state, testing connectivity, checking console readiness, or interacting with IOS, Junos, VPCS, EOS, or NX-OS nodes.