Get the FREE Ultimate OpenClaw Setup Guide →

gitlab-group

npx machina-cli add skill grandcamel/GitLab-Assistant-Skills/gitlab-group --openclaw
Files (1)
SKILL.md
8.0 KB

Group Skill

Group management operations for GitLab using glab api raw endpoint calls.

Quick Reference

OperationCommand PatternRisk
List groupsglab api groups-
Get groupglab api groups/:id-
Create groupglab api groups -X POST -f ...⚠️
Update groupglab api groups/:id -X PUT -f ...⚠️
Delete groupglab api groups/:id -X DELETE⚠️⚠️⚠️
List membersglab api groups/:id/members-
Add memberglab api groups/:id/members -X POST -f ...⚠️
Update memberglab api groups/:id/members/:uid -X PUT -f ...⚠️
Remove memberglab api groups/:id/members/:uid -X DELETE⚠️⚠️
List subgroupsglab api groups/:id/subgroups-
List projectsglab api groups/:id/projects-
Share with groupglab api projects/:id/share -X POST -f ...⚠️

Risk Legend: - Safe | ⚠️ Caution | ⚠️⚠️ Warning | ⚠️⚠️⚠️ Danger

When to Use This Skill

ALWAYS use when:

  • User mentions "group", "team", "organization", "namespace"
  • User wants to manage group membership
  • User asks about subgroups or group projects
  • User wants to share a project with another group

NEVER use when:

  • User wants project-level settings (use gitlab-repo)
  • User wants to manage CI/CD group variables (use gitlab-variable with -g flag)

API Prerequisites

Required Token Scopes: api

Permissions:

  • List/view groups: Any authenticated user (for visible groups)
  • Create groups: Depends on instance settings
  • Manage members: Owner or Maintainer role
  • Delete groups: Owner role

Access Levels

LevelValueDescription
Guest10View issues and comments
Reporter20View code, create issues
Developer30Push code, create MRs
Maintainer40Manage project settings
Owner50Full control

Available Commands

List Groups

# List accessible groups
glab api groups --method GET

# List with pagination
glab api groups --paginate

# Filter by search term
glab api "groups?search=devops" --method GET

# List only owned groups
glab api "groups?owned=true" --method GET

# List top-level groups only
glab api "groups?top_level_only=true" --method GET

Get Group Details

# Get by numeric ID
glab api groups/123 --method GET

# Get by path (URL-encode slashes)
glab api "groups/$(echo 'my-group' | jq -Rr @uri)" --method GET

# Get nested group
glab api "groups/$(echo 'parent/child' | jq -Rr @uri)" --method GET

# Include additional details
glab api "groups/123?with_projects=true" --method GET

Create Group

# Create top-level group
glab api groups --method POST \
  -f name="My Team" \
  -f path="my-team" \
  -f visibility="private"

# Create subgroup
glab api groups --method POST \
  -f name="Backend Team" \
  -f path="backend" \
  -f parent_id=123 \
  -f visibility="internal"

# Create with description and features
glab api groups --method POST \
  -f name="Dev Group" \
  -f path="dev-group" \
  -f description="Development team" \
  -f visibility="private" \
  -f request_access_enabled=true

Visibility Options:

  • private - Only members can see
  • internal - Any authenticated user
  • public - Anyone can see

Update Group

# Update name
glab api groups/123 --method PUT \
  -f name="New Name"

# Update visibility
glab api groups/123 --method PUT \
  -f visibility="internal"

# Update multiple settings
glab api groups/123 --method PUT \
  -f name="Updated Team" \
  -f description="New description" \
  -f request_access_enabled=false

Delete Group

Warning: This permanently deletes the group and all its projects!

# Delete group
glab api groups/123 --method DELETE

# With permanently_remove flag (immediate deletion)
glab api "groups/123?permanently_remove=true" --method DELETE

List Group Members

# List all members
glab api groups/123/members --method GET

# Include inherited members
glab api groups/123/members/all --method GET

# Search members
glab api "groups/123/members?query=john" --method GET

Add Group Member

# Add as Developer
glab api groups/123/members --method POST \
  -f user_id=456 \
  -f access_level=30

# Add as Maintainer with expiration
glab api groups/123/members --method POST \
  -f user_id=456 \
  -f access_level=40 \
  -f expires_at="2025-12-31"

Update Group Member

# Change access level
glab api groups/123/members/456 --method PUT \
  -f access_level=40

# Set expiration
glab api groups/123/members/456 --method PUT \
  -f expires_at="2025-06-30"

Remove Group Member

# Remove member
glab api groups/123/members/456 --method DELETE

List Subgroups

# List immediate subgroups
glab api groups/123/subgroups --method GET

# List all descendant groups
glab api groups/123/descendant_groups --method GET

# With pagination
glab api groups/123/subgroups --paginate

List Group Projects

# List projects in group
glab api groups/123/projects --method GET

# Include subgroup projects
glab api "groups/123/projects?include_subgroups=true" --method GET

# Filter archived
glab api "groups/123/projects?archived=false" --method GET

# With pagination
glab api groups/123/projects --paginate

Share Project with Group

# Share project with group (Developer access)
glab api projects/789/share --method POST \
  -f group_id=123 \
  -f group_access=30

# Share with expiration
glab api projects/789/share --method POST \
  -f group_id=123 \
  -f group_access=30 \
  -f expires_at="2025-12-31"

# Unshare
glab api projects/789/share/123 --method DELETE

Common Workflows

Workflow 1: Create Team Structure

# 1. Create parent group
glab api groups --method POST \
  -f name="Engineering" \
  -f path="engineering" \
  -f visibility="internal"

# 2. Get parent group ID
parent_id=$(glab api "groups/$(echo 'engineering' | jq -Rr @uri)" | jq -r '.id')

# 3. Create subgroups
glab api groups --method POST \
  -f name="Backend" \
  -f path="backend" \
  -f parent_id=$parent_id

glab api groups --method POST \
  -f name="Frontend" \
  -f path="frontend" \
  -f parent_id=$parent_id

Workflow 2: Onboard Team Member

# 1. Find user ID
user_id=$(glab api "users?search=john.doe" | jq -r '.[0].id')

# 2. Add to group as Developer
glab api groups/123/members --method POST \
  -f user_id=$user_id \
  -f access_level=30

# 3. Verify membership
glab api groups/123/members/$user_id

Workflow 3: Audit Group Access

# List all members including inherited
glab api groups/123/members/all --paginate | \
  jq -r '.[] | [.username, .access_level_description] | @tsv'

Workflow 4: Transfer Project Between Groups

# 1. Get project ID
project_id=$(glab api "projects/$(echo 'old-group/my-project' | jq -Rr @uri)" | jq -r '.id')

# 2. Transfer to new group
glab api "projects/$project_id/transfer" --method PUT \
  -f namespace=456

Troubleshooting

IssueCauseSolution
403 on create groupGroup creation disabledCheck instance settings or contact admin
404 on groupPath not foundVerify group exists, check URL encoding
Cannot add memberUser not foundSearch users first with glab api users?search=...
Cannot delete groupNot ownerNeed Owner role or admin access
Subgroup creation failsParent not foundVerify parent_id is correct

Related Documentation

Source

git clone https://github.com/grandcamel/GitLab-Assistant-Skills/blob/main/skills/gitlab-group/SKILL.mdView on GitHub

Overview

This skill enables managing GitLab groups through the glab API. It covers listing and viewing groups, creating, updating, and deleting groups, managing group members, listing subgroups and group projects, and sharing projects with groups.

How This Skill Works

The skill uses glab api calls to interact with GitLab REST endpoints for groups and related resources. Operations map to HTTP methods (GET for read, POST for create, PUT for update, DELETE for delete) and are demonstrated via concrete command patterns in the Quick Reference.

When to Use It

  • You need to list or view groups you have access to, including filtering by search, ownership, or top level.
  • You want to create a new group or sub-group with specific visibility and metadata.
  • You need to update or delete an existing group, or modify its details.
  • You must manage group membership (add, update, or remove members).
  • You want to list subgroups or group projects, or share a project with a group.

Quick Start

  1. Step 1: Install and authenticate with glab, ensuring the API scope is granted in your token.
  2. Step 2: Choose an operation (list, get, create, update, delete, manage members, share) and run the corresponding glab api command from the Quick Reference.
  3. Step 3: Review the response, handle any errors, and adjust permissions or visibility as needed.

Best Practices

  • Ensure you have the correct permissions (Owner or Maintainer) before creating, updating, or deleting groups.
  • Specify clear visibility and descriptive metadata when creating groups (private/internal/public).
  • URL-encode group paths and handle nested groups properly when constructing endpoints.
  • Use pagination when listing groups or members to avoid missing results in large instances.
  • Validate API responses and handle errors gracefully to avoid partial changes.

Example Use Cases

  • List groups you can view: glab api groups --method GET
  • Get details for a specific group: glab api groups/123 --method GET
  • Create a private top-level group: glab api groups --method POST -f name="DevOps" -f path="devops" -f visibility="private"
  • Add a member to a group: glab api groups/123/members -X POST -f user_id=45 -f access_level=40
  • Share a project with a group: glab api projects/987/share -X POST -f group_id=123

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers