Use the `untaped github` command to query GitHub or GitHub Enterprise (list org and team repositories, search repositories, code, issues and users, and sweep local clones of many repositories with grep-style questions). Use when the user mentions GitHub, GHE, repos, orgs, teams, code search, issue search, which repos use something, or a codebase-wide sweep.
Resources
1Install
npx skillscat add alexisbeaulieu97/untaped/untaped-github Install via the SkillsCat registry.
SKILL.md
Untaped Github
Use this skill when the user wants an agent to operate the untaped github CLI for authenticated GitHub user, repository inventory, search, sweep, and local Git corpus cache workflows.
Details that do not fit here ship next to this file:
| File | Read it when |
|---|---|
| references/sweep.md | running sweeps: freshness, predicates, per-repo failures, row fields, cache commands |
| references/search.md | repos list patterns; searching: default scope, --limit notices, batching and rate limits |
Setup
- The command is
untaped github. It ships with the unifieduntapedCLI (no separate install). - Settings live under
profiles.<name>.github:base_url,token,default_org,corpus_path, andsweepfreshness/concurrency settings. untaped config set github.default_org ORGgivesrepos list,search repos|code|issues,sweep,cache syncandcache prunean org scope when none of--org,--team,--repo,--useror--stdinis passed. Any explicit scope replaces it (never adds to it).base_urldefaults tohttps://api.github.com; GitHub Enterprise Server usually useshttps://HOST/api/v3.- Git fetches (
sweep,cache sync) send the token only to the Git host ofbase_url(github.com, orHOSTforhttps://HOST/api/v3); a pipedclone_urlon another host is fetched without credentials. - Set the token with
untaped config set github.token --promptor--stdin, or pointgithub.token_commandat a command that prints it ('["gh", "auth", "token"]').GH_TOKEN/GITHUB_TOKENare the last fallback. A rejected token (HTTP 401) fails with a hint to run that command and exits 4. - Set the base URL with
untaped config set github.base_url https://HOST/api/v3.
Command Patterns
untaped github whoamiverifies the token and returns the current user (a detail view intable, one JSON object injson).untaped github repos list [PATTERN] [--org ORG]... [--team ORG/SLUG|SLUG]... [--limit N]lists complete org/team repository inventory from GitHub list APIs with at least one repeatable scope, emittinggithub.reporecords (full_nameplusrepo,html_urlplusurl,clone_url,ssh_url,pushed_at, ...); the table shows onlyfull_name,default_branch,private,archived,forkandurl, so pass-cfor other fields.untaped github sweep --org ORG --grep PATTERN(or a--team ORG/SLUGor--repo OWNER/NAMEscope) asks a question over the local Git corpus and emits matchinggithub.sweep_reporows by default.untaped github sweep --org ORG --show matches --grep PATTERNemits dedupedgithub.sweep_matchrows withfull_name,refs,path,line, andtext.--show filesemits onegithub.sweep_filerow per matching file (full_name,path,refs,hits= matching lines).untaped github cache sync --org ORG [--refs branches] [--refresh](or a--team ORG/SLUG,--repo OWNER/NAMEor--stdinscope) warms the corpus without a query (nightly prewarm) and emits onegithub.sync_outcomeper repo withactionsynced,unchanged,skipped, orfailed(witherror; exit 1, or 5 when a fetch timed out).untaped github cache status,cache delete OWNER/NAME...|--all,cache prune --org ORG, andcache worktree OWNER/NAMEinspect/delete/prune/materialize the managed corpus.cache deleteandcache prunetake--yes|-yand--dry-run.untaped github search repossearches repositories and emitsgithub.repo_hitrecords (a different shape from thegithub.repoinventory rows).untaped github search codesearches GitHub's indexed code search and does not support sort, regex, or exhaustive multi-ref sweeps.untaped github search issuessearches issues and pull requests.untaped github search userssearches users and organizations and emitsgithub.user_hitrecords (whoamiemitsgithub.user).- Search commands support scoped selectors such as
--user, repeatable--org, repeatable-r/--repo, and repeatable--team ORG/SLUGwhere applicable.-ralways means--repoacrossgithubcommands. --archived include|exclude|onlyonrepos list,search repos,sweepandcache synckeeps, drops, or isolates archived repos; the default isexcludeeverywhere. There are no--no-archivedor bare--archivedspellings. An unquotedarchived:qualifier in thesearch reposquery wins over the flag.- Prefer
--team ORG/SLUGfor team-only operations. A bare--team SLUGis accepted only when exactly one--orgis present and normalizes toORG/SLUG. repos listrequires--orgor--teamscopes (orgithub.default_org); it does not default to the authenticated user's repositories.repos listtreats--organd--teamas additive scopes:--team acme/backendis team-only, while--org acme --team backendincludes the whole org plus that team.- Use
repos list --no-fork --format raw --columns ssh_urlto produce cloneable inventory URL lines foruntaped workspace repos add WS --stdin. - Use
sweepinstead of GitHubsearch codefor repeated team-wide code checks, regexes, path-scoped predicates, negation, and refs beyond the default branch.
Agent Guidance
- Prefer
--format jsonfor structured search and sweep results. - Prefer
repos listoversearch reposwhen the user needs complete org/team inventory or local glob/regex matching. - Prefer
sweep --team ORG/SLUG --grep PATTERNfor broad repeated code checks. It expands scopes from the org/team inventory and searches a local clone of each repo, not GitHub code search. - Question-first sweep examples:
untaped github sweep --org acme --grep 'requests\.get\(' --path 'src/**' --has-file Jenkinsfileuntaped github sweep --team acme/platform --grep log4j --grep slf4j --anyuntaped github sweep --org acme --grep old_api --not-grep new_apiuntaped github sweep --org acme --ref 'release/*' --grep jenkins --show matches
- Use
--format pipeto chain a search into another untaped tool: each
record is tagged (github.repo_hit/github.code/...), and--stdinreads a--format pipestream ofgithub.repo,github.repo_hit, orgithub.sweep_reporecords back (mappingfull_name; other kinds exit2)
as well as bareowner/namelines — e.g.untaped github search repos --org acme --format pipe | untaped github search code "BaseModel" --stdin. - For
untaped workspace repos add WS --stdin, use raw URL lines:untaped github sweep --org acme --grep old_api --format raw --columns clone_url | untaped workspace repos add remediation --stdin.workspace repos add --stdin
also readsgithub.repo,github.repo_hitandgithub.sweep_repopipe records
(untaped github search repos --org acme --format pipe | untaped workspace repos add acme --stdin). --profile <name>works in any token position (e.g.untaped github --profile work whoami).- Exit codes: 0 success, 1 failure, 2 usage error, 3 when
sweep --fail-on-matchmatched or--strictleft a repo unscanned, 4 fix the environment (settings, token, permission), 5 retry later (network, rate limit), 130 interrupted;--format jsonmakes stderr JSON Lines.