gitlab-search
npx machina-cli add skill grandcamel/GitLab-Assistant-Skills/gitlab-search --openclawSearch Skill
Search operations for GitLab using glab api raw endpoint calls.
Quick Reference
| Operation | Command Pattern | Risk |
|---|---|---|
| Search projects | glab api "search?scope=projects&search=..." | - |
| Search issues | glab api "search?scope=issues&search=..." | - |
| Search MRs | glab api "search?scope=merge_requests&search=..." | - |
| Search code | glab api "search?scope=blobs&search=..." | - |
| Search commits | glab api "search?scope=commits&search=..." | - |
| Search users | glab api "search?scope=users&search=..." | - |
| Search wiki | glab api "search?scope=wiki_blobs&search=..." | - |
| Project search | glab api "projects/:id/search?scope=...&search=..." | - |
| Group search | glab api "groups/:id/search?scope=...&search=..." | - |
Risk Legend: - Safe | ⚠️ Caution | ⚠️⚠️ Warning | ⚠️⚠️⚠️ Danger
When to Use This Skill
ALWAYS use when:
- User wants to search or find something across GitLab
- User mentions "search", "find", "query", "look for"
- User asks "where is", "which project has", "find all"
- User wants to search code, issues, MRs, commits, or wikis
NEVER use when:
- User wants to list all items (use specific skill: gitlab-issue, gitlab-mr, etc.)
- User knows the exact project/issue/MR ID
- User wants to search local files (use grep/find locally)
API Prerequisites
Required Token Scopes: read_api or api
Note: Search results are limited to resources the authenticated user can access.
Search Scopes
| Scope | Description | Available At |
|---|---|---|
projects | Search project names/descriptions | Global, Group |
issues | Search issue titles/descriptions | Global, Group, Project |
merge_requests | Search MR titles/descriptions | Global, Group, Project |
milestones | Search milestone titles | Global, Group, Project |
snippet_titles | Search snippet titles | Global |
wiki_blobs | Search wiki content | Global, Group, Project |
commits | Search commit messages | Global, Group, Project |
blobs | Search code/file content | Global, Group, Project |
notes | Search comments | Global, Group, Project |
users | Search usernames/names | Global |
Available Commands
Global Search
# Search projects by name
glab api "search?scope=projects&search=api+gateway" --method GET
# Search issues globally
glab api "search?scope=issues&search=authentication+bug" --method GET
# Search merge requests
glab api "search?scope=merge_requests&search=refactor" --method GET
# Search code (blobs)
glab api "search?scope=blobs&search=TODO+fixme" --method GET
# Search commits
glab api "search?scope=commits&search=fix+security" --method GET
# Search wiki content
glab api "search?scope=wiki_blobs&search=installation" --method GET
# Search users
glab api "search?scope=users&search=john" --method GET
# Search milestones
glab api "search?scope=milestones&search=v2.0" --method GET
# Search comments/notes
glab api "search?scope=notes&search=approved" --method GET
Project-Scoped Search
# Search issues in specific project
glab api "projects/123/search?scope=issues&search=bug" --method GET
# Search code in project
glab api "projects/123/search?scope=blobs&search=function+authenticate" --method GET
# Search commits in project
glab api "projects/123/search?scope=commits&search=fix" --method GET
# Search wiki in project
glab api "projects/123/search?scope=wiki_blobs&search=setup" --method GET
# Search MRs in project
glab api "projects/123/search?scope=merge_requests&search=feature" --method GET
# Search notes in project
glab api "projects/123/search?scope=notes&search=LGTM" --method GET
# Search milestones in project
glab api "projects/123/search?scope=milestones&search=sprint" --method GET
# Using project path (URL-encoded)
glab api "projects/$(echo 'mygroup/myproject' | jq -Rr @uri)/search?scope=blobs&search=TODO"
Group-Scoped Search
# Search issues in group
glab api "groups/456/search?scope=issues&search=urgent" --method GET
# Search code across group
glab api "groups/456/search?scope=blobs&search=api+key" --method GET
# Search projects in group
glab api "groups/456/search?scope=projects&search=backend" --method GET
# Search MRs in group
glab api "groups/456/search?scope=merge_requests&search=hotfix" --method GET
# Using group path (URL-encoded)
glab api "groups/$(echo 'mygroup' | jq -Rr @uri)/search?scope=issues&search=bug"
Pagination
# Get more results per page
glab api "search?scope=issues&search=bug&per_page=50" --method GET
# Get specific page
glab api "search?scope=issues&search=bug&per_page=50&page=2" --method GET
# Auto-paginate all results
glab api "search?scope=projects&search=api" --paginate
Advanced Search Syntax
# Exact phrase search (use quotes, URL-encoded)
glab api "search?scope=blobs&search=%22exact+phrase%22" --method GET
# Filename filter in code search
glab api "search?scope=blobs&search=authenticate+filename:auth.py" --method GET
# Extension filter
glab api "search?scope=blobs&search=class+extension:java" --method GET
# Path filter
glab api "search?scope=blobs&search=config+path:src/main" --method GET
Output Processing
Extract Key Fields
# Get issue IDs and titles
glab api "search?scope=issues&search=bug" | \
jq -r '.[] | "\(.project_id)#\(.iid): \(.title)"'
# Get project names and URLs
glab api "search?scope=projects&search=api" | \
jq -r '.[] | "\(.path_with_namespace): \(.web_url)"'
# Get code matches with file paths
glab api "search?scope=blobs&search=TODO" | \
jq -r '.[] | "\(.project_id):\(.path):\(.startline) \(.data)"'
# Get commit info
glab api "search?scope=commits&search=fix" | \
jq -r '.[] | "\(.short_id): \(.title)"'
Count Results
# Count matching issues
glab api "search?scope=issues&search=bug" --paginate | jq 'length'
# Count by project
glab api "search?scope=issues&search=bug" --paginate | \
jq 'group_by(.project_id) | map({project: .[0].project_id, count: length})'
Common Workflows
Workflow 1: Find All TODOs in Codebase
# Search for TODO comments across all accessible projects
glab api "search?scope=blobs&search=TODO" --paginate | \
jq -r '.[] | "\(.project_id):\(.path):\(.startline)"'
Workflow 2: Find Issues Across Team Projects
# Get group ID
group_id=$(glab api "groups/$(echo 'myteam' | jq -Rr @uri)" | jq -r '.id')
# Search for critical issues in group
glab api "groups/$group_id/search?scope=issues&search=critical" --paginate | \
jq -r '.[] | "\(.references.full): \(.title)"'
Workflow 3: Find Who Worked on Feature
# Search commits mentioning feature
glab api "projects/123/search?scope=commits&search=authentication" | \
jq -r '.[] | "\(.author_name): \(.title)"'
Workflow 4: Find Security-Related Code
# Search for potential security patterns
for term in "password" "secret" "api_key" "token"; do
echo "=== Searching for: $term ==="
glab api "projects/123/search?scope=blobs&search=$term" | \
jq -r '.[] | "\(.path):\(.startline)"'
done
Workflow 5: Find Related MRs
# Search MRs by feature name
glab api "search?scope=merge_requests&search=oauth+integration" | \
jq -r '.[] | "!\(.iid) [\(.state)]: \(.title)"'
Search Tips
Effective Search Terms
| For | Search Examples |
|---|---|
| Bug fixes | fix bug, resolve issue, patch |
| Features | add feature, implement, new |
| Refactoring | refactor, cleanup, improve |
| Security | security, vulnerability, CVE |
| Performance | performance, optimize, speed |
| Documentation | docs, readme, documentation |
URL Encoding Special Characters
# Space -> +
glab api "search?scope=issues&search=fix+bug"
# Quotes (for exact match) -> %22
glab api "search?scope=blobs&search=%22exact+phrase%22"
# Hash -> %23
glab api "search?scope=issues&search=issue%231234"
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Empty results | No matches or no access | Verify search term, check permissions |
| Partial results | Pagination needed | Use --paginate flag |
| 400 Bad Request | Invalid scope | Check scope is valid for endpoint |
| Slow search | Large result set | Add filters or narrow scope |
| No code results | Basic search disabled | Contact admin to enable advanced search |
Search Limitations
- Basic search searches titles/descriptions only
- Advanced search (Elasticsearch) required for code search
- Results limited to accessible resources
- Rate limits apply for large searches
Related Documentation
Source
git clone https://github.com/grandcamel/GitLab-Assistant-Skills/blob/main/skills/gitlab-search/SKILL.mdView on GitHub Overview
This skill enables you to perform GitLab searches through the glab API, across the entire instance or within a specific group or project. It supports locating issues, merge requests, code, commits, users, milestones, wikis, and more, restricted to items you have access to.
How This Skill Works
The skill uses glab api calls to GitLab’s search endpoints. Global searches use scopes like projects, issues, merge_requests, blobs, commits, and users, while project/group searches use project/:id/search or group/:id/search with a chosen scope. Results are limited to resources the authenticated user can access based on read_api or api token scopes.
When to Use It
- You need to locate something across GitLab (global search) using keywords.
- You want to find specific issues, merge requests, or commits by keyword.
- You know the project or group and want to search within it for issues, code, or notes.
- You’re trying to find users or projects by keyword or name.
- You need to search wiki content or notes within GitLab resources.
Quick Start
- Step 1: Ensure you have a GitLab API token with read_api or api scope.
- Step 2: Run a global search example, e.g., glab api "search?scope=projects&search=api+gateway" --method GET
- Step 3: Review and refine results by changing scope or narrowing to a project/group search.
Best Practices
- Use global searches for broad queries and project/group scoped searches when you know where to look.
- Combine the right scope with concise keywords to reduce noise (e.g., scopes=issues, blobs, or users).
- Always use an API token with read_api or api scope to ensure access to results.
- Be mindful of access permissions; results reflect what the authenticated user can access.
- URL-encode spaces in search terms (e.g., api+gateway or authentication+bug).
Example Use Cases
- glab api "search?scope=projects&search=api+gateway" --method GET
- glab api "search?scope=issues&search=authentication+bug" --method GET
- glab api "search?scope=merge_requests&search=refactor" --method GET
- glab api "search?scope=blobs&search=TODO+fixme" --method GET
- glab api "search?scope=users&search=john" --method GET